我有 PC1 和 PC2,都在 Ubuntu 下,具有活动的 SSH 服务器,并且位于同一路由器后面。为了清楚起见,我将使用不同的 bash 提示符。我可以使用本地 IP 从 PC1 ssh 到 PC2。
[user@PC1]$ ssh [email protected]
/user@PC2/$ logout
Connection to PC2 closed.
[user@PC1]$ ssh [email protected]
/user@PC2/$ logout
Connection to PC2 closed.
[user@PC1]$ dig +short myip.opendns.com @resolver1.opendns.com
<External IP>
[user@PC1]$ ssh [email protected]
/user@PC2/$ dig +short myip.opendns.com @resolver1.opendns.com
<External IP>
如何使用外部 IP 进行 ssh(两者相同?
[user@PC1]$ ssh user@<External IP> ... etc?
如果 PC1 和 PC2 位于不同的路由器后面,该过程是否会有所不同?
请注意,我打算学习如何执行此操作,因为我手头有两台 PC,并为将来我不在时的情况准备 PC2。
答案1
如何使用外部 IP 进行 ssh(两者相同?
你不能;你有一外部IP,正如你所说,并且你有一端口 22。您的路由器无法知道您指的是哪一台电脑。
你可以做两件事:
- 将两个不同的外部端口转发到 PC1:22 和 PC2:22,例如端口 2211 和 2222。
- 在路由器上设置一个 SSH 服务器并将其用作“跳转主机”(请参阅
-J
中的选项man ssh
);然后你可以。ssh -J externalIP [email protected]
如果 PC1 和 PC2 位于不同的路由器后面,该过程是否会有所不同?
是的,因为它们有不同的公共 IP。
答案2
感谢收到的评论以及对这些指南的进一步研究,我得出以下结论:
如何使用外部 IP(两者相同)进行 ssh?
这涉及几个步骤,有些是强制性的,有些是方便的。
强制的。配置转发端口在路由器中。使用以下参数添加端口转发服务(这因路由器而异):
- 自定义名称:例如,SSH端口23
- 服务类型:TCP/UDP(通常从菜单中选择)
- 内部端口:PC2 中的端口号(监听连接),例如 22(默认)。
- 起始/结束端口
ssh
: PC(客户端)中命令中使用的端口号。到目前为止,我只能成功地对两者使用相同的值,例如 23。 - 服务器IPv4:PC2的本地IP,例如
192.168.0.30
。
强制的。通过以下任一方式连接
[user@PC1]$ ssh user@<External IP> -p 23 [user@PC1]$ ssh ssh://user@<External IP>:23
选修的。设置动态 DNS,因此不需要知道
<External IP>
.选修的。为PC2设置固定IP,这样端口转发服务就不会错过目标。
笔记:
像往常一样,人们可以设置一个不同的内部端口,例如 PC2 中的 5901。检查
/etc/ssh/sshd_config
,ufw
, 等增加安全措施可以考虑。/etc/ssh/sshd_config
使用 line 进行编辑Port 5901
,而不是默认的 commented#Port 5901
。- 设置防火墙规则
$ sudo ufw allow 5901/tcp
。 - 重新启动
$ sudo service ssh restart
。 - 改变内部端口在路由器端口转发。
通过设置相应的设置,人们可能可以 ssh 到同一路由器后面的多台 PC转发端口服务。
如果 PC1 和 PC2 位于不同的路由器后面,该过程是否会有所不同?
我还没有尝试过,但我怀疑它是完全相同的。使用时[user@PC1]$ ssh user@<External IP> -p 23
,我认为我的路由器不知道(或关心)我正在从实际上通过自身连接到互联网的 PC1 进行 ssh'ing。