Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在使用双SSH连接连接的远程主机上执行多个命令?_Linux_Bash_Unix_Ssh_Remote Execution - Fatal编程技术网

Linux 如何在使用双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命令在连接到的远程主机上执行多个命令。我的命令语法如下:

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__