本文写于 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()

常见应用场景

  1. 启动服务
  2. 查看所有log文件
  3. 上传下载文件

本文由 arganzheng 创作,采用 CC BY 4.0 许可协议。在保留原文作者、署名以及完整原文链接(https://arganzheng.life/run-shell-on-remote-server.html)的前提下,欢迎各种形式的转载、翻译或商业引用。


COMMENTS

评论存放在 GitHub Discussions, 用 GitHub 账号登录即可发表,支持 Markdown。 想针对正文某句话说?选中那段文字,点浮出的「评论」即可划线评论;觉得哪里写错了,发表时勾上「同时提交 Issue」。 有人回复你时 GitHub 会按你的通知设置发邮件,不用守在这里。

×