【问题标题】:SSH from Local to A, A to B and run multiple commands on BSSH 从本地到 A、A 到 B 并在 B 上运行多个命令
【发布时间】:2018-09-02 06:34:47
【问题描述】:

我目前正在使用下面的脚本行从我的本地机器 ssh 到服务器(让我们称之为 ip-address1)然后从那台机器我想 ssh 到另一台机器(让我们称之为这台机器 ip-address2)。我使用的脚本如下:

sshpass -p mypassword ssh -tt user@ip-address1 ssh -tt -i /root/.ssh/vm_private_key user@ip-address2 "pwd; ls;"

问题只是第一个命令 (pwd) 在 ip-address2 上执行然后关闭,ls 命令在 ip-address1 上执行然后关闭。我希望这两个命令都在 ip-address2 上执行。我的终端中的输出如下所示:

/home/user (pwd command executing here)
Connection to ip-address2 closed.
//files then get outputted here (ls command executes after ip-address2 has 
closed)
Connection to ip-address1 closed.

我认为我的报价可能有问题,但我无法弄清楚是什么。请帮忙。

谢谢。

【问题讨论】:

    标签: shell ssh scripting


    【解决方案1】:

    我没有办法对此进行测试,但请尝试以下方法:

    sshpass -p mypassword ssh -tt user@ip-address1 \
        "ssh -tt -i /root/.ssh/vm_private_key user@ip-address2 'pwd; ls;'"
    

    你肯定需要引用你想在ip_address1上运行的整个命令,包括你将传递给ip_address2的命令。

    编辑

    我处于一个需要测试多台机器的环境中;以下命令对我有用:

    ssh snewell@<host sanitized> \
        "ssh <host2 sanitized> 'hostname; ls -a <path sanitized>;'"
    

    hostname 肯定会显示最终服务器 (host2) 的结果,而ls 正在列出第一个主机没有的目录。

    【讨论】:

    • 嗨斯蒂芬,感谢这里的帮助,不幸的是,这似乎没有做到这一点。不过看起来确实更近了。现在的输出类似于:/home/user(此处执行 pwd 命令)。 //找不到命令(似乎在寻找什么) 与 ip-address2 的连接已关闭 与 ip-address1 的连接已关闭。
    • @CiaranWhyte - 只是为了好玩,您可以在命令中添加hostname(在pwd 之后)吗?当这些命令被执行时,让我们验证您实际上是在最终主机上。
    • 我可以这样做,但如果我把主机名放在 pwd 之后,它就不会执行。 ls 命令在 pwd 之后并且它不执行。 ip-address2 机器只是运行 pwd 并关闭。我解决了 :command not found 输出,这是由于 dos/unix 冲突产生的 ^M line endeing。
    • 所以澄清一下,现在我正在运行你建议的原始代码。我按以下顺序看到三行输出 1.pwd 的结果 2.Closing ip-address2 machine 3.Closing ip-address1 machine ....ls 命令从未显示。
    • 如果目录为空,ls 不会打印结果。这就是为什么我希望你添加hostname,所以它会打印输出并清楚地显示一系列命令是否在ip-address2 上运行。
    猜你喜欢
    • 2011-06-24
    • 2020-08-25
    • 2013-08-27
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多