我一直在尝试使用脚本自动输入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
但在退出第一个连接之前,我无法读取任何命令。
答案 0 :(得分:3)
以下是@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
您通过第一个主机代理到达第二个主机。假设您在netcat
上安装了my_hostname_2
。如果没有,您需要安装它。
您也可以在~/.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
放在此处,但以明文形式提供密码并不是一个好主意。使用基于密钥的身份验证可能会更好。
答案 1 :(得分:0)
Bash脚本是一系列命令。
echo moo
echo bar
将运行echo moo
并等待它完成,然后运行下一个命令。
您可以像这样运行远程命令:
ssh remote echo moo
将连接到remote
,运行命令,然后退出。如果此后脚本文件中还有其他命令,则执行这些命令的shell将继续执行下一个命令,显然是在启动脚本的主机上。
要从另一个主机连接到一个主机,原则上可以
ssh host1 ssh host2
但@zerodiff建议的代理命令改善了体验的几个方面。