Malabarba Asked: 2010-12-04 07:25:17 +0800 CST2010-12-04 07:25:17 +0800 CST 2010-12-04 07:25:17 +0800 CST 使用脚本在 ssh 服务器上远程运行命令 772 我想在 ssh 服务器上运行一个命令,但是这个命令是由我本地机器上的脚本决定的。我怎么做? 一个清晰的例子: 我想在这里写一个脚本(foo.sh),它接受一个参数。如果我运行./foo.sh 0它应该以某种方式向服务器机器发送一个关闭信号,但如果我运行./foo.sh 1它应该发送一个重新启动信号。 我知道如何通过 ssh 手动登录,并且我已经将 ssh-keys 设置为跳过密码,但我不知道如何使用脚本自动执行该过程。 scripts server ssh 3 个回答 Voted Oli 2010-12-04T07:33:40+08:002010-12-04T07:33:40+08:00 您可以将命令(或命令列表,以; 或&&分隔)传递给 SSH 连接,如下所示: ssh user@server-address "./foo 1" 如果你有一个输出0or的本地脚本1,你可以进一步简化: ssh user@server-address "./foo $(/path/to/your/local/script)" 中的代码在$(...)执行其他任何操作之前执行,其输出动态放入行中。这称为命令替换。 Best Answer Nick Pascucci 2010-12-04T07:38:53+08:002010-12-04T07:38:53+08:00 正如 Oli 评论的那样,您可以告诉 SSH 发送命令。您可以修改您的脚本,以便如果您的命令行 arg 为 1,它会发送ssh user@server "shutdown -h now". 请记住,您必须是另一台机器上的超级用户才能将其关闭。 编辑:而不是使用 root,正如在 sudoers 文件中的注释中所建议的user那样,可以在没有密码的情况下关闭机器。 nowat 2019-09-02T09:01:30+08:002019-09-02T09:01:30+08:00 您可以使用runoverssh: sudo apt install runoverssh runoverssh -n -s localscript.sh user host -n将使用 SSH 默认身份验证(您的密钥) -s远程运行本地脚本
您可以将命令(或命令列表,以
;
或&&
分隔)传递给 SSH 连接,如下所示:如果你有一个输出
0
or的本地脚本1
,你可以进一步简化:中的代码在
$(...)
执行其他任何操作之前执行,其输出动态放入行中。这称为命令替换。正如 Oli 评论的那样,您可以告诉 SSH 发送命令。您可以修改您的脚本,以便如果您的命令行 arg 为 1,它会发送
ssh user@server "shutdown -h now"
. 请记住,您必须是另一台机器上的超级用户才能将其关闭。编辑:而不是使用 root,正如在 sudoers 文件中的注释中所建议的
user
那样,可以在没有密码的情况下关闭机器。您可以使用runoverssh:
-n
将使用 SSH 默认身份验证(您的密钥)-s
远程运行本地脚本