文章目录
- 需求:A机器是内网机器,B机器是公网服务器,想要从公网,访问A机器的端口
- 方式:端口映射,内网穿透,使用ssh打洞端口:
- 遇到问题:命令执行成功,但是端口转发失败
- 分析:目标服务器ssh配置问题
- 解决:修改ssh配置
需求:A机器是内网机器,B机器是公网服务器,想要从公网,访问A机器的端口
方式:端口映射,内网穿透,使用ssh打洞端口:
- 1:配置config
vim ~/.ssh/config
输入
Host remote_name_B # 自定义B机器名字HostName 10.110.110.1 # B机器ipPort 22 # B机器 ssh登录端口User root # A登录B机器的用户IdentityFile ~/.ssh/id_rsa # A登录B机器的秘钥,要在B机器上提前配置好ServerAliveInterval 10ServerAliveCountMax 3
尝试登录:
ssh remote_name_B # 首次登录,会提示输入 yes
必须登录成功!
- 2:执行命令
ssh -f -N -g -R B机器映射端口:本机ip或者127.0.0.1:本机要映射出去的端口 remote_name_B
例如:将A机器的22端口,映射到B机器的1822端口上
ssh -f -N -g -R 1822:127.0.0.1:22 remote_name_B
- 3:访问
访问B的1822端口,就可以了
ssh -p 1822 root@B_ip 即可
# 登录服务器端口,记得把本机的公钥放到A机器上
# 其他业务服务端口,浏览器直接访问即可
遇到问题:命令执行成功,但是端口转发失败
# 终端输出:
Authorized users only all activities may be monitored and reported
warning: remote port forwarding failed for listen port 1822
分析:目标服务器ssh配置问题
Authorized users only all activities may be monitored and reported
这个是成功的,如果SSH隧道建立失败,会提示“Permission denied”、“Connection closed”等报错信息。
warning: remote port forwarding failed for listen port 1822
问题出在这里~~
解决:修改ssh配置
vim /etc/ssh/ssh_config
# 修改这两个key的值
AllowTcpForwarding yes # 允许远程端口转发
GatewayPorts yes # 如果 GatewayPorts 设置为 no,B 机器只会绑定到 127.0.0.1,导致外部无法访问。
# 重启ssh
systemctl restart sshd
即可