如果内部服务器没有公网IP,但你想通过外部服务器访问它,你可以使用SSH隧道(SSH tunneling)来实现。
服务器设置状态:
服务器 | 外部IP | 角色 |
外部服务器 | 189.63.50.77 | 公网IP服务器,跳板机 |
内部服务器 | 192.168.110.110 | 需要登陆的最终的用户主机 |
内部服务器和外部服务器都设置一个相同用户,intuser, 设置相同的uid,gid,
使用ssh-keygen设置内部服务器和外部服务器之间的免密登陆,同时,建议使用chrony之类的设置服务器之间的时间,这里就不多说了。
首先,你需要在外部服务器上创建一个SSH隧道,让它监听一个特定的端口,并将流量转发到内部服务器。假设外部服务器的IP地址是external_server_ip,内部服务器的IP地址是internal_server_ip。
在外部服务器上执行以下命令:
ssh -L 2222:192.168.110.110:22 intuser@189.63.50.77
这将在外部服务器的本地端口2222上创建一个SSH隧道,并将所有流量转发到内部服务器的22端口。
然后,你可以使用SSH客户端连接到外部服务器,并指定端口2222:
ssh -p 2222 intuser@189.63.50.77
这将通过外部服务器的SSH隧道连接到内部服务器。
请确保在外部服务器上的SSH配置文件中允许端口转发功能(PortForwarding)的设置。你可能需要编辑/etc/ssh/sshd_config
文件,并确保以下行没有被注释:
AllowTcpForwarding yes
注意:在这个示例中,你需要将命令中的external_server_ip替换为实际的外部服务器IP地址,internal_server_ip替换为内部服务器的IP地址,user替换为你在外部服务器和内部服务器上的用户名。如果需要,你还可以更改端口号。
在建立SSH隧道时,确保外部服务器和内部服务器之间的通信是安全的,并使用密钥认证来保护连接。
当然,也可以直接都在/etc/ssh/sshd_config
文件编辑
AllowTcpForwarding yes
Match User intuser
ForceCommand ssh -t intuser@192.168.110.110 "bash --login"