用于自动执行两个连续ssh连接的脚本

时间:2012-08-29 18:50:44

标签: linux ssh

我知道可以编写一个shell脚本,将您的硬编码密码传递给ssh连接身份验证(使用expect)。然而,我需要的是稍微复杂一些。

在我的大学,我有一台台式电脑给我。我可以通过首先与某个服务器建立ssh连接,然后从该服务器到我指定的台式计算机进行另一个ssh连接,远程连接到这台计算机。这就像:


localuser @ localcomputer:〜$ ssh -X username @ serveraddress

username @ serveradress密码:

server $ ssh -X username @ remotecomputeraddress

username @ remotecomputeraddress密码:

用户名@ remotecomputer:〜>


有没有办法编写一个可以自动执行上述操作的脚本(即执行两个连续的ssh连接)?

提前致谢!

ps:本地和远程计算机都在Linux上运行。

3 个答案:

答案 0 :(得分:1)

您可以通过以下方式进行交互式操作:

ssh -t -X username@serveraddress ssh -t -X username@remotecomputeraddress

请注意,它不是管道 - 第二个ssh是在第一个ssh创建的连接上运行的命令。 -t选项是分配交互所需的伪ttys(密码收集以及最终目标 - 远程系统上的交互式会话)所必需的。用expect作为读者的练习将其包裹起来....; - )

设置正确的私钥/公钥对和ssh-agent的加分点,以便不需要密码(当然,除非出于安全原因这是不允许的。)

答案 1 :(得分:0)

是的,你可以这样做。

假设你在expect_script

中有你的except脚本
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路径的方式。