2

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

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


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

用户名@服务器地址密码:

服务器$ ssh -X 用户名@远程计算机地址

用户名@远程计算机地址密码:

用户名@远程计算机:~>


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

提前致谢!

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

4

3 回答 3

1

您可以通过以下方式交互地执行此操作:

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

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

设置正确的私钥/公钥对的奖励积分,ssh-agent因此不需要密码(当然,除非出于安全原因不允许这样做)。

于 2012-08-29T19:38:35.317 回答
0

是的,你可以这样做。

假设你有你的 except 脚本expect_script

cat expect_script | ssh -X username@serveraddress sh -s

在这个 expect_script 中,您必须运行ssh -X username@remotecomputeraddress.

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

于 2012-08-29T19:07:56.260 回答
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 路径的方式。

于 2012-08-29T23:18:07.570 回答