2012-08-29 88 views
1

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

在我的大学我有一台桌面电脑任命给我。我可以通过首先与某个服务器建立ssh连接,然后再从该服务器到我指定的台式计算机建立另一个ssh连接,从而远程连接到这台计算机。这是这样:


localuser @ localcomputer:〜$的ssh - X的用户名@ serveraddress

用户名@ serveradress密码:

服务器$的ssh - X的用户名@ remotecomputeraddress

用户名@ remotecomputeraddress密码:

用户名@ remotecomputer:〜>


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

在此先感谢!

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

回答

1

你可以用交互做到这一点:

ssh -t -X [email protected] ssh -t -X [email protected] 

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

用于设置适当的私钥/公钥对的奖励分数和ssh-agent以便密码不是必需的(除非,当然,这是出于安全原因而被禁止的)。

+0

尊敬的twalberg, 我已经尝试过您的方法。我得到了第一个SSH连接。在此之后,我的脚本暂停,只有当我退出第一个SSH连接时才会继续。我能做些什么才能使其正常工作。我已经加入我下面的脚本: --- #在/ usr/bin中/期望 产卵的ssh -t -X remoteuser表@ serveraddress的ssh -t -X remoteuser表@ remotecomputer 期望“remoteuser表@ serveraddress的密码:\ r “ 发送‘MY_PASSWORD’ 互动 期望‘remoteuser表@ remotecomputer的密码:\ R’ 发送‘MY_PASSWORD’ 互动 --- – Aeronaelius

+0

谢谢twalberg,我设法与-t选项的组合和使用,达到我的目标无密码键。 – Aeronaelius

+0

在这里,我想扩大这个问题。有没有机会使用rsync传输文件;比如说让服务器1通过服务器2到服务器3?谢谢。 – Vijay

0

是的,你可以做到这一点。

假设你有你的,除了在expect_script脚本:

cat expect_script | ssh -X [email protected] sh -s 

在这个expect_script您必须运行ssh -X [email protected]

当然,您可以在两台主机上安装公钥并使用无密码身份验证。