我知道可以编写一个shell脚本,将您的硬编码密码传递给ssh连接身份验证(使用expect)。然而,我需要的是稍微复杂一些。
在我的大学,我有一台台式电脑给我。我可以通过首先与某个服务器建立ssh连接,然后从该服务器到我指定的台式计算机进行另一个ssh连接,远程连接到这台计算机。这就像:
localuser @ localcomputer:〜$ ssh -X username @ serveraddress
username @ serveradress密码:
server $ ssh -X username @ remotecomputeraddress
username @ remotecomputeraddress密码:
用户名@ remotecomputer:〜>
有没有办法编写一个可以自动执行上述操作的脚本(即执行两个连续的ssh连接)?
提前致谢!
ps:本地和远程计算机都在Linux上运行。
答案 0 :(得分:1)
您可以通过以下方式进行交互式操作:
ssh -t -X username@serveraddress ssh -t -X username@remotecomputeraddress
请注意,它不是管道 - 第二个ssh
是在第一个ssh
创建的连接上运行的命令。 -t
选项是分配交互所需的伪ttys(密码收集以及最终目标 - 远程系统上的交互式会话)所必需的。用expect
作为读者的练习将其包裹起来....; - )
设置正确的私钥/公钥对和ssh-agent
的加分点,以便不需要密码(当然,除非出于安全原因这是不允许的。)
答案 1 :(得分:0)
是的,你可以这样做。
假设你在expect_script
:
cat expect_script | ssh -X username@serveraddress sh -s
在此expect_script中,您必须运行ssh -X username@remotecomputeraddress
。
当然,您可以在两台主机上安装公钥,并使用无密码身份验证。
答案 2 :(得分:0)
我写了一些东西,用一段时间的爆炸路径做到这一点: http://stromberg.dnsalias.org/~strombrg/deep-ssh.html
因此,您需要设置无密码,无密码验证(或使用密码短语代理),例如: http://stromberg.dnsalias.org/~strombrg/ssh-keys.html
然后:
deep-ssh username@serveraddress!username@remotecomputeraddress command
如果bash抱怨!,你可以用反斜杠来逃避它。
旧计时器将认识到这是指定UUCP路径的方式。