我一直在尝试使用脚本自动进入 ssh 连接。 This到目前为止,以前的 SOF 帖子对我有帮助。使用一个连接有效(第一个 ssh
语句)。但是,我想在连接后创建另一个 ssh 连接,我认为它可能如下所示:
#! /bin/bash
# My ssh script
sshpass -p "MY_PASSWORD1" ssh -o StrictHostKeyChecking=no *my_hostname_1*
sshpass -p "MY_PASSWORD2" ssh -o StrictHostKeyChecking=no *my_hostname_2*
运行脚本时,我只连接到 my_hostname_1
并且第二个 ssh
命令在我退出第一个 ssh
之前不会运行连接。
我试过使用这样的 if
语句:
if [ "$HOSTNAME" = my_host_name_1 ]; then
sshpass -p "MY_PASSWORD2" ssh -o StrictHostKeyChecking=no *my_hostname_2*
fi
但在退出第一个连接之前,我无法读取任何命令。
最佳答案
这是@lihao 建议的 ProxyCommand 示例:
#!/bin/bash
sshpass -p "MY_PASSWORD2" ssh -o StrictHostKeyChecking=no \
-o ProxyCommand='sshpass -p "MY_PASSWORD1" ssh m_hostname_1 netcat -w 1 %h %p' \
my_hostname_2
您正在代理通过第一台主机到达第二台主机。这假设您在 my_hostname_2
上安装了 netcat
。如果没有,您需要安装它。
你也可以在你的 ~/.ssh/config
文件中设置它,这样你就不需要命令行上的代理东西了:
Host my_hostname_1
HostName my_hostname_1
Host my_hostname_2
HostName my_hostname_2
ProxyCommand ssh my_hostname_1 netcat -w 1 %h %p
但是,这在密码处理方面有点棘手。虽然您可以将 sshpass
放在这里,但使用纯文本形式的密码并不是一个好主意。使用基于 key 的身份验证可能会更好。
关于bash - 通过脚本连接多个ssh连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25643637/