是否可以在一台服务器上运行 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
。