SSH远端传入实现内网穿透

Refer:

场景:


隧道/端口转发

感觉mobaxterm这个功能更好用直观些

xshell

  1. 在主机B上安装xshell

  2. 使用xshell连接主机C,新建会话,填写自己的外网主机IP和端口,和用户身份验证,注意重新连接需要填写。

  1. 打开日志,点击跟踪,勾选协议事件

  2. 点击隧道,点击添加,按如下图填写转移规则

  1. 使用主机C访问主机A

经过上面操作,打开新建的会话时会有如下提示

此会话bwg即是主机C,在主机C上

ssh localhost -p 6634,按照提示输入yes和主机A的密码即可访问主机A

主机D如何直接访问主机A

在主机C上配置sshd配置转发

  1. 在主机C上编辑sshd配置文件/etc/ssh/sshd_config
GatewayPorts yes
  1. 然后重启sshd
sudo systemctl restart sshd
  1. 在其它主机D可以直接 ssh 主机C的IP(95.49.4.*) + 监听的端口(6634) 访问主机A

保持活跃连接

不太管用呢?还需探索,如果有知道的麻烦评论赐教

设置保持活动状态

设置连接-重新连接反而会导致建立过多连接,出现ssh卡顿或连不上。 (不确定是不是这个原因)

Mobaxterm

  1. 选择tunnel-remote port forward

  2. 参照提示填写ip和端口

  3. 开启密钥连接,自动重连和保持连接

其他方法配置过程(比较繁琐,效果不好)

Refer:Linux下ssh反向隧道进行内网穿透

场景一致,容易断连

ssh反向代理实现内网穿透

公网服务器a,公网ip为IPa,开放ssh转发的端口Pa,用户名accountA

内网服务器b,无法访问外网,用户名account

连接内网和外网的工位机c

一、内网服务器配置ssh代理

如果服务器b访问不了公网服务器a的话:

  1. 需要在工位机c上的v2rayN开启允许局域网的连接,确定代理的socks的端口Pc和内网ipIPc

  2. 服务器b设置代理(可选,如果需要服务器b下载的话)

  3. 设置服务器b的ssh代理:

mkdir ~/.ssh
cd ~/.ssh
vi config

添加以下内容,替换IPc,Pc

Host *
    ProxyCommand nc -X 5 -x IPc:Pc %h %p

二、设置ssh反向代理

登录服务器b,输入以下指令:(替换Pa,accountA,IPa

ssh -f -C -N -R Pa:``localhost:22`` -o ServerAliveInterval=60 accountA@IPa

接下来输入密码

若要通过公网服务器a连接的话,在a的shell下:

ssh -p Pa accountB@localhost

三、保持连接

也可以直接安装autossh

  1. 先设置通过公钥登录

  2. 新建一个脚本reverse_ssh.sh,注意替换Pa和第6行

#!/bin/bash
while true;do
RET=`ps ax | grep "ssh -f -C -N -R Pa:localhost:22" | grep -v "grep"`
if [ "$RET" = "" ]; then
echo "restart ssh server"
ssh -f -C -N -R Pa:localhost:22 -o ServerAliveInterval=60 accountA@IPa
fi
sleep 10
done
  1. 设置运行权限
chmod +x reverse_ssh.sh
  1. 保持后台运行即可

一直连接不稳定

可能是工位机的ip不固定,比如经常切换wifi和网线连接

Refer:SSh连接失败,Socket error Event: 32 Error: 10053.

posted @ 2022-06-04 12:38  Doonnie  阅读(312)  评论(0编辑  收藏  举报