SSH 到多个服务器

SSH 到多个服务器

我需要编写一个脚本通过 ssh 从家里远程连接到我的大学服务器,然后从服务器终端 ssh 连接到虚拟机来处理一些数据。这可能吗?

这是我到目前为止所尝试过的:

#!/usr/bin/expect
set login "myuser"
set addr "test.ac.uk"
set addr2 "t002"
set pw "mypassword"

spawn ssh -o StrictHostKeyChecking=no $login@$addr 
expect "$login@$addr\'s password:"
send "$pw\r"
expect "#"
spawn ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22
expect "$login@$addr2\'s password:"
send "$pw\r"
expect "#"
send "cd /developer\r"
interact

错误: ssh: 连接到主机 t002 端口 22: 连接被拒绝

这是我目前从家里成功手动登录的方式:

~/Desktop # ssh host

提示输入密码。

一旦登录成功。

-bash-4.2$ ssh user@t002

提示再次输入密码。

编辑:我按照迈克的建议更新了第二条 ssh 线。

从:

spawn ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22

到:

send "ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22\r"

现在脚本返回拒绝访问,但同时它确实将我登录到服务器而不是虚拟机。

答案1

这是一个常见的问题,您想要访问无法从外部互联网直接访问的服务器,但它可从公开的中间主机访问。 (中间宿主称为跳箱.)

由于这个问题如此普遍,OpenSSH 自然会提供方便的方法来简化 Jumpboxes(或 Jumpboxen?)的使用。有两种方法,一种是旧方法,另一种是新方法。旧方法仍然有效,但新方法更直观,并且对跳转盒上可用的应用程序做出的假设更少。

使用问题中提到的示例机器,可以像这样完成:

ssh -o StrictHostKeyChecking=no -o [email protected] myuser@t002

或者,我认为不是等价的。-o [email protected]-W [email protected]

无论哪种方式,该方法都需要足够新的 OpenSSH 版本。如果您遇到旧版本的问题,您需要执行以下操作:

ssh -o StrictHostKeyChecking=no -o ProxyCommand='ssh [email protected] "nc %h %p"' myuser@t002

旧方法假设您已在 Jumpbox 上安装了 netcat。

新方法的另一个好处是您不需要在 Jumpbox 上保留私钥。 ProxyJump 足够聪明,可以尝试使用您本地拥有的私钥。因此,如果跳转盒受到损害,它不需要能够损害跳转盒后面的任何内容。

现在,您可能厌倦了每次都写出那么长的命令。您使用 ssh 的次数越多,您就越有动力建立$HOME/.ssh/config.在该文件中,您可以为远程主机提供别名,并将特定配置与这些主机相关联。

对于您的示例,ssh_config 将像这样设置:

Host jumpbox
User myuser
Hostname test.ac.uk
StrictHostKeyChecking=no

Host t002
User myuser
StrictHostKeyChecking=no
ProxyJump jumpbox

完成该配置后,您现在应该能够使用更简单的命令登录 t002:

ssh t002

使用 ssh_config 还可以做很多其他很酷的事情。man ssh_config当您了解有关 ssh 的更多信息时,请时不时地查看并重新访问它。你会不断发现更酷的事情可以做:)

设置 ssh 配置的介绍性演练示例是https://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/

答案2

你生成一个新的 ssh。尝试:

send "ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22\r"

答案3

我只需在脚本中使用命令来减少输入,然后输入用户信用!

#!/bin/bash
ssh -o StrictHostKeyChecking=no [email protected] 'ssh -o StrictHostKeyChecking=no myuser@t002'

根据您的需求量身定制..

ssh -o StrictHostKeyChecking=no [email protected] 'ssh -tt -o StrictHostKeyChecking=no myuser@t002'

将密钥从第一台服务器复制到您的电脑并像这样引用它:

ssh -o StrictHostKeyChecking=no [email protected] 'ssh -tt -o StrictHostKeyChecking=no -i /ssh/1stserverkey myuser@t002'

相关内容