利用AutoSSH建立SSH隧道,实现内网穿透

利用AutoSSH建立SSH隧道,实现内网穿透

1. 公网服务器配置

修改公网主机 B 的 SSH 配置文件/etc/ssh/sshd_config

GatewayPorts yes

开启转发

ssh -fCNL *:2006:127.0.0.1:2005 root@47.108.84.25

这样可以把监听的端口绑定到任意 IP 0.0.0.0 上,否则只有本机 127.0.0.1 可以访问。

ps: 这一步可以忽略,经测试,不加这句,直接访问B:2005一样可以使用,便不需多此一举

重启 sshd 服务 sudo service sshd restart

2. 安装 AutoSSH 服务

在内网主机 A 上,执行以下命令安装 AutoSSH: yum install autossh

3. 断线免密登录自动重连

ssh 反向链接会因为超时而关闭,如果关闭了那从外网连通内网的通道就无法维持,为此我们需要结合免密码登录及 AutoSSH 来提供稳定的 ssh 反向代理隧道。

  1. 修改配置文件 /etc/ssh/sshd_config
# 为了避免远程连接时会自动断开连接, 需要发送心跳包
TCPKeepAlive yes
ClientAliveInterval 30
ClientAliveCountMax 3

重启 sshd 服务

sudo service sshd restart
  1. 在内网主机 A 上产生公钥和私钥 ssh-keygen

然后按三次回车执行默认选项生成公钥和私钥。会生成密钥文件和私钥文件 id_rsa,id_rsa.pubid_dsa,id_dsa.pub

  1. 拷贝秘钥 在内网主机 A 上继续执行如下命令,将内网主机 A 上的秘钥文件 copy 到公网主机 B 中。
ssh-copy-id username@ip

其中username是公网主机 B 的用户名,ip 为公网主机 B 的 ip,然后按照提示输入公网主机 B 的密码就完成了。

4. 利用 AutoSSH 实现端口转发

在内网主机 A 上,利用 AutoSSH 建立一条 SSH 隧道

autossh -fCNR -M 4010 -NR 80:localhost:4000 username@xxx.xxx.xxx.xxx <-p xx>

# 参数说明
# f:后台运行
# C:启用gzip压缩
# N:仅转发端口,不执行命令
# R:反向代理

# -M 4010 意思是使用内网主机 A 的 4010 端口监视 SSH 连接状态,连接出问题了会自动重连
# 这里 -M 其实也可以不加,如果不加就会在A B各分配一个没用的端口,不建议忽略
# -N 意思是不执行远程命令
# -R 意思是将远程主机(公网主机 B)的某个端口转发到本地指定机器的指定端口

80:localhost:4000意思是将内网主机 A 的 4000 号端口转发至公网主机 B 的 80 号端口上
username@xxx.xxx.xxx.xxx意思是公网主机 B 的用户名和 IP
-p xxxx意思是公网主机 B 的 SSH 端口,如果是默认的 22 号端口,则可以不输入.

5. 监听端口检查

分别检查本地主机 A 及公网主机 B 的端口监听情况,出现如下进程则为正常。

本地主机 A:

[root@localhost ~]# lsof -i:4010
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 6710 lixl 5u IPv6 0x15699cecfe8a4995 0t0 TCP localhost:altserviceboot (LISTEN)
autossh 46984 lixl 3u IPv4 0x15699cece41d5e95 0t0 TCP localhost:altserviceboot (LISTEN)

远程主机 B:

[root@localhost ~]# lsof -i:8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 9762 root 10u IPv4 473994 0t0 TCP *:webcache (LISTEN)
sshd 9762 root 11u IPv6 473995 0t0 TCP *:webcache (LISTEN)

6. 开启自启动

rc.local 方式

配置 AutoSSH 开机自启动,编辑 /etc/rc.d/rc.local

添加内容:

autossh -M 4010 -fCNR 80:localhost:4000 username@xxx.xxx.xxx.xxx (-p xxxx)

centos7 之后,修改/etc/rc.d/rc.local 启动脚本需要重新赋予可执行权限

chmod +x /etc/rc.d/rc.local

systemctl 方式

创建文件 /lib/systemd/system/pv-autossh.service

[Unit]
Description=pv-autossh
Wants=network-online.target
After=network-online.target

[Service]
Type=Forking
ExecStart=/usr/lib/autossh/autossh -M 2004 -CNR 2005:localhost:22 root@47.108.84.25

[Install]
WantedBy=multi-user.target

设置开机启动 systemctl ensble pv-autossh.service

至此完成了端口转发,在相应的应用(如浏览器)中输入公网服务器 B 的 IP+端口即相当于直接访问内网主机 A 的相应服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值