【问题标题】:How can I run commands locally after running ssh commands in a shell script?在 shell 脚本中运行 ssh 命令后,如何在本地运行命令?
【发布时间】:2019-09-02 16:54:04
【问题描述】:

我正在尝试在 Ubuntu 16.04 上编写一个 shell 脚本,它将在另一台机器上远程执行命令,然后在本地执行更多命令。这个我试过了,还是不行

#!/bin/bash

ssh username@10.200.31.131 'pkill iperf'
ssh -f username@10.200.31.131 'iperf -s'

iperf -c 10.150.91.175 >iperflog.txt

它将在远程服务器上执行前 2 个命令,但我认为它也在尝试在远程服务器上执行最后一个命令,我想在本地服务器上执行最后一个命令。我怎样才能做到这一点?谢谢

【问题讨论】:

  • 命令一次运行一个,所以远程iperf在本地启动之前就已经完成了。我不认为那是你想要的。也许你需要在后台运行远程ssh,即`ssh -f user@.....'iperf -s'&`。祝你好运。
  • 感谢您的评论。我应该提到 - 'iperf -s' 命令将永久运行 iperf 服务器,直到它停止
  • 请尝试ssh -f user@... 'iperf -s'&。我认为它会解决你的问题。最后一个cmd(本地iperf)不可能在远程机器上运行。您可以通过在脚本顶部附近使用 set -vx 打开 shell 调试/跟踪来查看 shell 脚本中发生了什么。如果没有&,您将看到最后一个命令永远不会执行,而如果您启动第一个iperf w &,那么您将看到最后一个命令执行。祝你好运。

标签: shell ubuntu scripting


【解决方案1】:

也许你的命令保持登录状态!

尝试在远程端的命令行末尾添加; /bin/bash

ssh username@10.200.31.131 'pkill iperf; /bin/bash -i'

希望对你有帮助

【讨论】: