Shell脚本在多个服务器上执行

Shell脚本在多个服务器上执行

是否可以在一台服务器上运行 ksh/sh 脚本的一部分,然后 ssh 到另一台服务器并继续脚本的其余部分?或者有解决方法吗?

我有一个用户,每次访问服务器时都不必进行身份验证,因此我可以从一台服务器跳到另一台服务器,而无需任何键盘交互。

我已经尝试过这个,尝试将一些逻辑分离到另一个脚本中:

MYSCRIPT="nohup ksh myscript.ksh > mylog.log &"
ssh servername ${MYSCRIPT}

我尝试了这个,但它似乎没有在另一台服务器上执行这个脚本。

上面的整个代码是for循环的一部分;我对服务器列表执行相同的脚本。

出于测试目的,该列表有两个服务器;由于一些奇怪和扭曲的原因,只有最后一个(或第二个)服务器脚本按我的预期工作。

所有服务器都可以看到 myscript.ksh —— 它对所有服务器都是可见且可执行的。

答案1

听起来您想在另一台服务器上运行一系列命令,而不必多次登录。为了实现这一点,你可以这样做:

local_command sequence
ssh remote-server << End-Of-File
        remote_command 1
        remote_command 2
        remote_command 3
End-Of-File

这将运行remote_command 1,完成后,运行remote_command 2,然后remote_command 3全部在远程服务器上

答案2

说实话,你的措辞有点模糊,但让我们追踪一下可能的原因:

您所描述的内容应该可以正常工作,但请参阅ssh-copy-id源代码以查找与您自己的脚本(它是与 OpenSSH 捆绑在一起的 shell 脚本)的差异。

您提到该命令在您的一台机器上不起作用,也许服务器有不同的设置,阻止脚本首先启动。

另外,您提到了身份验证,所以我想您正在使用无密码公钥身份验证,并且您可能希望限制使用关联密钥授权的命令:请参阅man ssh,部分AUTHORIZED_KEYS FILE FORMAT

相关内容