Linux 如何在使用双SSH连接连接的远程主机上执行多个命令?
我有两个远程服务器,我正在尝试使用ssh命令在连接到的远程主机上执行多个命令。我的命令语法如下:Linux 如何在使用双SSH连接连接的远程主机上执行多个命令?,linux,bash,unix,ssh,remote-execution,Linux,Bash,Unix,Ssh,Remote Execution,我有两个远程服务器,我正在尝试使用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上执行 我的要求是,除了remote-2上的最后一个命令外,我要执行所有命令。以及remote-1上的最
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上执行
我的要求是,除了remote-2上的最后一个命令外,我要执行所有命令。以及remote-1上的最后一个命令。
注意:我知道如何通过连接到单个远程主机来执行多个命令。因此,如果只有在理解问题陈述之后才能给出答案,我将不胜感激。假设您无法创建配置文件来简化两台主机上的命令,并且您不想将其拆分为两个单独的命令,那么它应该像将最后一个命令移出内部SSH命令一样简单:
ssh-t-i key-1user1@remote-1英寸ssh-t-i密钥-2user2@remote-2 \“cmd-1;cmd-2;。。。cmd-n-1 \“cmd-n”
#或
ssh-t-i key-1user1@remote-1'ssh-t-i key-2user2@remote-2“cmd-1;cmd-2;…cmd-n-1”;cmd-n'
您还应该转义双嵌套引号,或者简单地将外部/内部引号更改为单引号,前提是您没有在此命令中展开
另外,您可以通过使用<代码> .sHSCONFIG文件来简化SSH命令,特别是使用<代码> PROXYLASH 参数()、
< P>而不是单行,考虑利用<代码>文档来简化序列。它的优点是更容易输入长命令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-1user1@remote-1我假设您有2台主机/远程服务器和一些命令集。。您正在尝试执行除remote2上的最后一个命令和remote1上的最后一个命令之外的所有命令。我说的对吗?对。请注意,我的要求是一次性执行所有命令。我无法将这些命令分解为命令序列。@Shalem:我知道,如果我在最后一个命令之前使用分号,最后一个命令可以在remote-1上执行。请查看man ssh\u config
中的ProxyJump
和ProxyCommand
选项,以消除在跳转上显式运行ssh
的需要主办正确配置后,您只需运行ssh-remote-2“cmd-1;cmd-2;…cmd-n”
,您的配置将负责通过remote-1
连接到remote-2
。您的意思是说ssh-t-i key-2..
作为第一个命令和cmd 1;cmd-2;。。。。cmd-n
作为最后一个命令,还是说cmd-1
作为第一个命令,cmd-n
作为最后一个命令?你有很多嵌套的东西可以解释为命令,这使得用一些有用的东西来回答有点困难!
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__