是否可以使用 ssh 隧道或其他机制连接这些机器?

是否可以使用 ssh 隧道或其他机制连接这些机器?

我实际位于防火墙后面的一台机器上,无法通过 ssh 连接。我们将其称为 PC。PC 可以连接到两台机器,一台在 AWS 上,另一台是 vpn 连接的一部分,分别称为 A 和 V。A 和 V 不能直接相互通信。我需要经常在 A 和 V 之间移动文件,并且一直通过 scp 到 PC 然后从 PC scp 来完成此操作。有没有更好的方法?A 和 V 是 Linux,但 PC 有 cygwin。

答案1

是的,可以做到。

1)确保三台机器上都设置了无密码 ssh,IE,使用加密密钥;

2) 在机器 PC 上下载 autossh 包;然后创建一个名为 auto1 的文件,内容如下:

 #!/bin/sh
 /usr/lib/autossh/autossh -M 6521 -f -p SSH_PORT_OF_A -2 -N -D -R 8100:localhost:SSH_PORT_OF_PC Your_Name@A's_IP_Address -i /path/to/A's/private/key

另一个名为 auto2 的文件具有相同的内容:

 #!/bin/sh
 /usr/lib/autossh/autossh -M 6521 -f -p SSH_PORT_OF_V -2 -N -R 8100:localhost:SSH_PORT_OF_PC Your_Name@A's_IP_Address -i /path/to/A's/private/key

使这两个文件可执行,

  chmod 755 auto1
  chmod 755 auto2

现在将以下行添加到 /etc/rc.local:

 /PATH/TO/auto1
 /PATH/TO/auto2

它的作用是在启动时启动autossh一个智能程序,如果 ssh 断开连接,它会不断重新启动 ssh;ssh 连接是一个反向隧道,A 和 V 上到 localhost:8100 的所有连接都会自动转发到 PC 的端口,我称之为 SSH_PORT OF_PC,您应该用您的值替换它以及 SSH_PORT_OF_A、SSH_PORT_OFV。

小心:您必须已经通过 ssh 连接到这两台机器,IE肯定已经交换了钥匙。

3)将 A 和 V 的私钥放入 /home/Your_Name/.ssh。

4)现在您可以通过以下方式从 A(或 V)连接到 PC

 ssh  Me_at_PC@localhost -p 8100 -i /path/to/PC'sPrivateKey

5)但您也可以通过 PC 从 A 跳转到 V,如下所示:

ssh  -t Me_at_PC@localhost -p 8100 -i /path/to/PC'sPrivateKey ssh -t Me_at_V@V's_IP_address -p SSH_PORT_OF_V -i /home/My_name_On_VG/.ssh/PrivateKeyOfV

and viceversa, 

ssh  -t Me_at_PC@localhost -p 8100 -i /path/to/PC'sPrivateKey ssh -t Me_at_A@A's_IP_address -p SSH_PORT_OF_A -i /home/My_name_On_VG/.ssh/PrivateKeyOfA

6)这可以简化,要么通过为这两个长命令分配别名,要么通过学习如何使用 ssh 的 ProxyCommand 选项。

7) 虽然此配置对我来说完全可行,但这可能是因为我的系统中有一些我认为理所当然的东西,而您的系统中却缺少这些东西。准备进行一些调试。

相关内容