我有一台安装了 KVM 的服务器,并且在同一台机器上安装了两个客户机。我已将它们设置为直接使用网络端口。它们处于在线状态,我甚至可以通过端口转发或从网络上的任何其他计算机远程访问我的 ownCloud(安装在其中一个客户机上)。
我的问题是,即使它们位于同一子网,我也无法从主机通过 ssh 进入任一客户端。
主机 IP:10.1.10.220
ownCloud 访客:10.1.10.221
访客 2:10.1.10.222
ping -c 2 10.1.10.221
PING 10.1.10.221 (10.1.10.221) 56(84) bytes of data.
From 10.1.10.220 icmp_seq=1 Destination Host Unreachable
From 10.1.10.220 icmp_seq=2 Destination Host Unreachable
先感谢您。
答案1
我认为这可能是您正在寻找的答案:
http://sshmenu.sourceforge.net/articles/transparent-mulithop.html
透明多跳 SSH
通常需要通过一台主机 SSH 才能访问另一台主机。本文将指导您配置 SSH,以便中间步骤透明。示例网络
您希望从家里的计算机登录到办公室 LAN 上名为“tongariro”的主机。进入办公室 LAN 的所有连接都必须通过防火墙主机“aoraki”。防火墙主机将只接受来自堡垒主机“ruapehu”的连接。手动执行
以下是我们计划自动化的步骤:
要连接到“tongariro”,您必须先通过 ssh 连接到“ruapehu”。由于您是通过互联网连接的,因此连接时需要指定完整域名。您还需要使用“-A”来启用“代理转发”(如下所述):
ssh -A ruapehu.example.com
现在您已登录到“ruapehu”上的 shell 提示符,您需要连接到“aoraki”。要允许无密码登录,您需要将家用计算机中的公钥安装到沿途每台主机的 ~/.ssh/authorized_keys 中。当您执行以下命令时,“aoraki”上的 SSH 服务器将请求密钥,此请求将通过“ruapehu”转发回家用计算机上运行的代理,并授予访问权限:
ssh -A aoraki
最后,你就可以连接到目标主机‘tongariro’了:
ssh -A tongariro
快速而粗略的自动化
上面概述的手动步骤使用三个链式 SSH 连接来穿过两个中间主机。您可以将这三个命令链接在一起形成一个庞大的命令行(可能在 shell 脚本或 shell 别名中):
ssh -A -t ruapehu.example.com ssh -A -t aoraki ssh -A tongariro
除了 -A 启用代理转发之外,我还添加了 -t 以强制分配伪终端。通常,当您的 ssh 命令指定要在目标主机上运行的命令时,不会分配伪终端。如果您希望命令运行然后退出,那么这很好,但如果您想要一个交互式 shell 会话,那么您将需要一个伪终端。使用 SSHMenu 实现快速自动化
您可以将相同的怪物命令行分配给 SSHMenu 上的主机连接: SSHMenu 主机对话框
更好的方法
通过中间主机自动进行连接的另一种方法是将“ProxyCommand”设置添加到您的 SSH 配置文件中。要使此方法有效,您必须在中间主机上安装“netcat”包。
首先编辑您的 SSH 配置文件(可能尚不存在):
gedit ~/.ssh/config
并添加以下几行:
Host ruapehu
HostName ruapehu.example.com
Host aoraki
ProxyCommand ssh -q ruapehu nc -q0 aoraki 22
Host tongariro
ProxyCommand ssh -q aoraki nc -q0 %h 22
第一个条目定义了一个主机名别名,以便您可以 ssh 到“ruapehu”,而不必输入“ruapehu.example.com”。
第二项设置了用于连接到“aoraki”主机的代理命令。通常,ssh 会与目标主机上的端口 22 建立自己的 TCP 连接,但使用此设置后,它将使用代理命令建立连接。示例中的代理命令将与中间主机(“ruapehu”)建立正常的 SSH 连接,然后使用“nc”命令将连接扩展到“aoraki”上的端口 22。
现在代理命令已设置,您只需输入以下内容即可连接到“aoraki”主机:
ssh aoraki
第三条在此基础上,通过在代理命令中使用新近可访问的“aoraki”主机来扩展与最终目标“tongariro”的连接。请注意,在此命令中,“%h”用作主机名。这只是一个简写,告诉 SSH 将目标主机名(来自上面的行)插入到 %h 的位置。如果您想连接到办公室 LAN 上的其他主机,您可以复制最后两行,只需在一个地方更改主机名即可。那么为什么这样更好呢?
完成上述配置后,您现在可以使用以下命令通过 SSH 直接连接到“tongariro”主机:
ssh tongariro
您可以直接将文件复制到“tongariro”(或从“tongariro”),而不必担心中间步骤:
scp path/to/local/file tongariro:path/to/remote/file
您可以启用 X-forwarding,这意味着您在“tongariro”上启动的任何 GUI 程序都将显示在您的工作站上:
ssh -X tongariro xclock
在网络连接较慢的情况下,GUI 应用程序的性能会很差,但本地计算机上的某些 GUI 应用程序现在可以使用 SSH 与远程主机通信。例如,如果您正在运行 GNOME,则可以使用 Nautilus 中的“ssh”URL 浏览远程主机上的文件。(KDE 提供同等功能): SSHMenu 主机对话框
如果右键单击文件并选择“使用文本编辑器打开”,GNOME 文本编辑器程序将在您的本地机器上运行,但将使用 SSH 从远程主机读取/写入文件。
要想通过 SSH 连接以更强大的方式编辑文件,您可能需要研究 bcvi。
许多其他熟悉的工具也将能够使用透明 SSH 连接。例如,您可以通过 SSH 访问版本控制存储库(CVS、Subversion、Git 等)。您还可以在 SSH 连接上使用端口转发,从您的工作站访问内部网服务器或办公室 LAN 上的 HTTP 代理。重用连接
透明多跳连接非常有用,但您可能会发现建立每个连接需要一两秒钟。如果这种情况经常发生(例如:每次从文本编辑器保存文件时),这种延迟可能会很烦人。
好消息是,如果您可以配置 SSH 以重用现有连接。这意味着,例如,如果您正在运行 SSH shell 会话,则 SCP 的新连接可以跳过连接设置阶段。需要两个步骤:
首先,您必须创建一个目录(或“文件夹”),SSH 将使用它来跟踪已建立的连接:
mkdir ~/.ssh/tmp
接下来,在 ~/.ssh/config 的开头添加这两行(确保使用您的用户名代替“YOUR-NAME”):
ControlMaster auto
ControlPath /home/YOUR-NAME/.ssh/tmp/%h_%p_%r
如您所见,只需花一点时间设置 SSH 配置就可以获得便利。