【发布时间】:2019-12-10 18:54:28
【问题描述】:
我需要在里面运行一些命令
ssh->ssh->clientprogram->loop command
这是我执行命令的要求。
- 将输入参数发送到第一个 ssh 服务器,捕获该命令的输出(这是一个 bash 脚本,相互依赖于同一路径中的其他脚本,并且在 $path 变量中可用。我确实检查了 echo $PATH)
- 将 ip 的 step1 命令输出提供给第二个 ssh 命令。
- 在循环内循环 n 次,启用客户端并执行一系列命令并捕获两个命令的输出并验证第二个命令的输出(例如:一系列命令是:rm 文件;ls -> 检查该文件是否存在,然后重复相同直到 n 次迭代)
- Step3 应根据选择执行(例如:创建文件或删除文件)。这个变量应该是用户一开始的选项。
到目前为止,我能够放置所有静态 IP 并能够执行一个命令
ssh_to_server () {
remote_output=$(ssh -t root@10.25.55.10 << "EOF"
# looking for command to capture output of input entry 1 and proceed further like
command_output=$(/tmp/user/script $1) # this is not working. getting file or directory not found.
ssh -t user@10.50.10.76 << "EOF1"
clientprogram <<-"EOF2"
loop;then
command1 # based on "option"
command2 # checking if the delete or create operation is success.
end loop
/exit . # exit from the client program
EOF2
EOF1
EOF)
}
ssh_to_server "input" "option"
以上代码中的示例 IP。
我能够在客户端程序中执行命令并捕获输出,但我需要的是:
- 在第一个 ssh 服务器中捕获命令的 ip 输出并将其动态传递给第二个 ssh 服务器。
- 将选项从用户传递给客户端程序或第二个服务器以创建或删除文件。
注意:第二个 ssh 服务器不允许来自除第一个服务器之外的任何其他 ip 的 ssh。因此,ssh 隧道和其他隧道将不起作用。如果有更好的方法来处理使用其他脚本语言(Python、Perl)或Java(我可以创建一个jar)是可以接受的。
【问题讨论】:
-
=周围不应该有空格,应该是command_output=$(/tmp/user/script $1) -
查看使用代理命令运行 ssh。这是处理ssh跳转主机的正常方式。
-
另外,关于不工作的部分。您希望在哪个主机上运行
/tmp/user/script?在您的本地主机上还是在跳转主机上? -
在第一台主机上
-
Inian,我修正了命令输出和命令之间的空格。