我有两个远程服务器,我试图使用ssh命令在连接到的远程主机上执行多个命令。我的命令语法如下:
ssh -t -i key-1 user1@remote-1 "ssh -t -i key-2 user2@remote-2 "cmd-1;cmd-2;...cmd-n;"";我尝试在两个命令之间使用分号(;)和&&符号,并注意到第一个命令在remote-2上执行,第二个命令在remote-1上执行。
,我的要求是,除了远程2上的最后一个命令之外,我想执行所有命令。以及远程-1.上的最后一个命令。
注意:我知道如何通过连接到单个远程主机来执行多个命令。因此,如果只有在理解了问题陈述后才能给出答案,我将不胜感激。
发布于 2019-11-26 11:21:33
假设您不能创建配置文件来简化两台主机上的命令,并且不希望将其拆分为两个单独的命令,则应该只需将最后一个命令移出内部SSH命令即可:
ssh -t -i key-1 user1@remote-1 "ssh -t -i key-2 user2@remote-2 \"cmd-1;cmd-2;...cmd-n-1\"; cmd-n"
# or
ssh -t -i key-1 user1@remote-1 'ssh -t -i key-2 user2@remote-2 "cmd-1;cmd-2;...cmd-n-1"; cmd-n'您还应该转义双嵌套引号,或者简单地将外部/内部引号更改为单引号,前提是在此命令中不展开。
另外,通过使用.ssh_config文件,特别是使用ProxyJump参数(手册页),可以大大简化SSH命令。
发布于 2019-11-26 11:45:03
考虑利用here-documents来简化序列,而不是单行。它的优点是可以更容易地输入长命令。
ssh -t -i key-1 user1@remote-1 <<__END__
ssh -t -i key-2 user2@remote-2 "cmd-1;cmd-2;..."
cmd-n
__END__我无法在本地进行测试,但应该可以进一步嵌套。
ssh -t -i key-1 user1@remote-1 <<__END__
ssh -t -i key-2 user2@remote-2 <<__SUB__
# Execute on remote2
cmd-1
cmd-2
...
__SUB__
# Execute on remote1
cmd-n
__END__https://stackoverflow.com/questions/59033563
复制相似问题