首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用双SSH连接的远程主机上执行多个命令?

如何在使用双SSH连接的远程主机上执行多个命令?
EN

Stack Overflow用户
提问于 2019-11-25 13:59:31
回答 2查看 1.3K关注 0票数 0

我有两个远程服务器,我试图使用ssh命令在连接到的远程主机上执行多个命令。我的命令语法如下:

代码语言:javascript
复制
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.上的最后一个命令。

注意:我知道如何通过连接到单个远程主机来执行多个命令。因此,如果只有在理解了问题陈述后才能给出答案,我将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2019-11-26 11:21:33

假设您不能创建配置文件来简化两台主机上的命令,并且不希望将其拆分为两个单独的命令,则应该只需将最后一个命令移出内部SSH命令即可:

代码语言:javascript
复制
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命令。

票数 0
EN

Stack Overflow用户

发布于 2019-11-26 11:45:03

考虑利用here-documents来简化序列,而不是单行。它的优点是可以更容易地输入长命令。

代码语言:javascript
复制
ssh -t -i key-1 user1@remote-1 <<__END__
    ssh -t -i key-2 user2@remote-2 "cmd-1;cmd-2;..."
    cmd-n
__END__

我无法在本地进行测试,但应该可以进一步嵌套。

代码语言:javascript
复制
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__
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59033563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档