使用脚本在 ssh 服务器上远程运行命令

使用脚本在 ssh 服务器上远程运行命令

我想在 ssh 服务器上运行一个命令,但这个命令由我本地机器上的脚本决定。我该怎么做?

为了清晰起见,举个例子:
我想在这里写一个脚本(foo.sh) 带有一个参数。如果我运行它,./foo.sh 0它应该以某种方式向服务器计算机发送关闭信号,但如果我运行它,./foo.sh 1它应该发送重启信号。

我知道如何通过 ssh 手动登录,并且我已经设置 ssh-keys 来跳过密码,但我不知道如何使用脚本自动执行该过程。

答案1

您可以传递一个命令(或命令列表,以; 或者&&)像这样的 SSH 连接:

ssh user@server-address "./foo 1"

如果您有一个输出0或 的本地脚本1,您可以进一步简化事情:

ssh user@server-address "./foo $(/path/to/your/local/script)"

中的代码$(...)先于其他任何代码执行,其输出动态地放入行中。它被称为命令替换

答案2

正如 Oli 所评论的,您可以告诉 SSH 发送命令。您可以修改脚本,以便如果您的命令行参数是 1,它会发送ssh user@server "shutdown -h now"。请记住,您必须是另一台机器的超级用户才能关闭它。

编辑:不要使用 root,正如 sudoers 文件中的注释所建议的那样,user这样就可以无需密码关闭机器。

答案3

您可以使用运行

sudo apt install runoverssh
runoverssh -n -s localscript.sh user host

-n将使用 SSH 默认身份验证(您的密钥)
-s远程运行本地脚本

相关内容