本文写于 13 年前(2013 年 1 月),部分内容可能已经过时。
通常我们需要写个shell脚本然后放上服务器上执行。一般的步骤是先登陆上服务器,然后将shell脚本上传到服务器的某个目录下,最后是执行这个脚本。然而shell本身是支持远程执行的。
可以使用如下命令:
ssh user@server bash < /path/to/local/script.sh
在远程机器上运行一段脚本。这条命令最大的好处就是不用把脚本拷到远程机器上。
如果你只是想执行on line command,那么可以使用管道:
echo "date" | ssh user@server bash
当然,远程执行的前提其实是要先ssh到服务器的,需要身份验证。可以使用except或者ssh public key来实现免密码登陆。这样就更完美了。具体可以参见笔者的另一篇文章:shell如何实现ssh免密码登陆
这篇文章 在多台Linux机器上执行命令 使用了socat来实现这个功能。其实不用,不过socat还是挺强大的。
如果服务器有python运行环境,那么可以使用python的paramkio库,这样可以直接享受python带来的好处。
例如:下面的代码在远程服务器上执行ifconfig命令:
Example 5-9. Connecting to an SSH server and remotely executing a command
#!/usr/bin/env python import paramiko hostname = '192.168.1.15' port = 22 username = 'jmjones' password = 'xxxYYYxxx' if __name__ == "__main__": paramiko.util.log_to_file('paramiko.log') s = paramiko.SSHClient() s.load_system_host_keys() s.connect(hostname, port, username, password) stdin, stdout, stderr = s.exec_command('ifconfig') print stdout.read() s.close()
常见应用场景
- 启动服务
- 查看所有log文件
- 上传下载文件
本文由 arganzheng 创作,采用 CC BY 4.0 许可协议。在保留原文作者、署名以及完整原文链接(https://arganzheng.life/run-shell-on-remote-server.html)的前提下,欢迎各种形式的转载、翻译或商业引用。
COMMENTS
评论存放在 GitHub Discussions, 用 GitHub 账号登录即可发表,支持 Markdown。 想针对正文某句话说?选中那段文字,点浮出的「评论」即可划线评论;觉得哪里写错了,发表时勾上「同时提交 Issue」。 有人回复你时 GitHub 会按你的通知设置发邮件,不用守在这里。