文章目錄
- 需求: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
即可