注意:这可能看起来与这个问题。它是相关的但不相同(加上它在不同的 StackExchange 站点中)。在这个问题中,作者询问了一种在远程系统中执行命令的方法。在这个问题中,我问如何通过两个 SSH 连接打开(和维护)shell。
我必须通过一台中间机器(我们称之为$gateway
)才能到达我的$server
.所以我的典型工作流程是:
ssh $gateway (supply password manually)
ssh $server (supply password manually)
我可以在到 的跃点上配置 SSH 公钥身份验证,$gateway
但不能在到 的第二跃点上配置 SSH 公钥身份验证$server
。所以我能做的最好的就是:
ssh $gateway (no password necessary)
ssh $server (supply password manually)
我的问题是:我可以使用sshpass
或其他方法在第二跳提供密码吗?我没有sshpass
在机器上安装或任何其他软件的权限$gateway
。
答案1
您可以尝试忽略手动密码输入 -
vipin@kali:~$ cat kk.sh
#!/usr/bin/expect
set password 1 #set password to 1 (hardcoded)
spawn ssh kali@kali # user and hostname is kali
expect "password"
send "$password\r"
interact # to get the shell prompt
vipin@kali:~$ ./kk.sh # execute it and you are in new server
答案2
使用ProxyCommand
:
sshpass -p server_password ssh -oProxyCommand="ssh -W %h:%p $gateway" $server
它将sshpass
从您的本地主机运行。