SSH反向隧道的内网穿透-阿里云开发者社区

开发者社区> 技术小阿哥> 正文

SSH反向隧道的内网穿透

简介:
+关注继续查看

环境如下:

A机器两块网卡eth0(192.168.0.173)、eth1(192.168.100.1),eth0可以上外网,eth1仅仅是内部网络,B机器只有eth1(192.168.100.3),和A机器eth1可以通信互联,外网无法ssh进入B主机,可以使用ssh的反向隧道实现。

A:

1、首先在A 上编辑sshd 的配置文件/etc/ssh/sshd_config,将GatewayPorts 开关打开:


vim /etc/ssh/sshd_config

GatewayPorts yes

2、重启sshd服务,使用修改生效

systemctl restart sshd
ssh -ngfNTR 1222:192.168.100.3:22 root@192.168.0.173 -o ServerAliveInterval=300

-f 表示后台执行
-N 表示不执行任何命令
-R 建立反向隧道
1222 A机用来外面ssh的监听端口
-o ServerAliveInterval=300 的意思是让ssh client每300秒就给server发个心跳,以免链路被RST. 
-f Requests ssh to go to background just before command execution. 让该命令后台运行 . 
-n Redirects stdin from /dev/null (actually, prevents reading from stdin). 
-N Do not execute a remote command. 不执行远程命令 . 
-T Disable pseudo-tty allocation. 不占用 shell . 
-g Allows remote hosts to connect to local forwarded ports.

[root@aiker01 ~]# netstat -antp | grep 1222
tcp        0      0 0.0.0.0:1222            0.0.0.0:*               LISTEN      16182/sshd: root    
tcp6       0      0 :::1222                 :::*                    LISTEN      16182/sshd: root

3、外部主机连接B就直接连接A的1222端口就可以了,1222要被防火墙允许

ssh -p 1222 root@192.168.0.173
root@aiker:/mnt/c/Users/aikera# ssh -p 1222 root@192.168.0.173
Last failed login: Tue Feb 13 11:19:53 CST 2018 from gateway on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Tue Feb 13 10:52:09 2018 from gateway
[root@aiker03 ~]#

4、A上查看端口的监听状态:

[root@aiker01 ~]# netstat -antp | grep 1222
tcp        0      0 0.0.0.0:1222            0.0.0.0:*               LISTEN      16182/sshd: root    
tcp        0      0 192.168.0.173:1222      192.168.0.190:60738     ESTABLISHED 16182/sshd: root    
tcp6       0      0 :::1222                 :::*                    LISTEN      16182/sshd: root    

5、保持连接

我们需要这个隧道能够一直保持连接状态,在需要的时候可以随时接入,我们需要安装使用autossh

B:

yum install autossh -y

B:

 autossh -p 22 -M 6777 -fNR 1322:127.0.0.1:22 root@192.168.0.173   #-M 参数指定的端口用来监听隧道的状态,与端口转发无关;同时需要在A防火墙打开1322端口主机之间可以使用不用密码的key

The authenticity of host '192.168.0.173 (192.168.0.173)' can't be established.
ECDSA key fingerprint is d5:1c:36:d7:57:64:3d:5b:8a:e8:aa:93:54:1d:8c:22.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.173' (ECDSA) to the list of known hosts.
Enter passphrase for key '/root/.ssh/id_rsa': 

A:


[root@aiker01 ~]# netstat -antp | grep 1322
tcp        0      0 0.0.0.0:1322            0.0.0.0:*               LISTEN      16798/sshd: root    
tcp6       0      0 :::1322                 :::*                    LISTEN      16798/sshd: root    

外面ssh B:

root@aiker:/mnt/c/Users/aikera# ssh -p 1322 root@192.168.0.173

root@192.168.0.173's password:
Last login: Tue Feb 13 15:29:30 2018 from gateway
[root@aiker03 ~]#

添加服务:

B:

useradd autosshuser
passwd autosshuser
su - autossh
ssh-keygen -t rsa  #生成密匙对,按回车,不使用密码的密匙对
ssh-copy-id root@192.168.0.173  #copy密匙到A

B

创建以autosshuser 用户权限调用autosshd 的service 文件。将下面文本写入到文件/lib/systemd/system/autosshd.service,并设置权限为644:

[Unit]Description=Auto SSH Tunnel
After=network-online.target
[Service]
User=autosshuser
Type=simple
ExecStart=/bin/autossh -p 22 -M 5689 -NR '*1322:127.0.0.1:22' usera@192.168.0.173 -i /home/autossh/.ssh/id_rsa
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
[Install]
WantedBy=multi-user.target
WantedBy=graphical.target
systemctl enable autosshd    #允许自启动
systemctl start autosshd


使用这条反向隧道穿透B 所在的NAT SSH 连接到B

ssh -p 1322 root@localhost

外部:

ssh -p 1322 root@192.168.0.173

C主机:

通过ssh做端口转发代理上网:

ssh -p 1322 -qngfNTD 3128 userb@192.168.0.173

C 是外面的电脑,A 是你的云主机,B 是你公司的电脑。这样做就可以给浏览器设置端口为3128 的sock4 本地(127.0.0.1)代理

浏览公司内网web



本文转自 喵来个鱼 51CTO博客,原文链接:http://blog.51cto.com/m51cto/2071530,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
在外网ssh登录内网设备,不再需要内网穿透了
总所周知,如果家里安装了 home assistant,要想在外面登录树莓派就必须做内网穿透。 首先你得有一个 DDNS 这样才能让你通过一个固定的域名访问到家里的路由器;然后要把电信路由器拨号改为自己的路由器拨号这样才能控制“路由”;再然后要在路由器上设置端口映射,将树莓派的22端口映射成比如8022之类的公开端口;做完这些恭喜你,终于可以在外网登录树莓派了。不过与
2358 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
2782 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4397 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
9406 0
阿里云服务器远程登录用户名和密码的查询方法
阿里云服务器远程连接登录用户名和密码在哪查看?阿里云服务器默认密码是什么?云服务器系统不同默认用户名不同
403 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
3824 0
使用Holer外网SSH访问内网(局域网)Linux系统
使用Holer外网SSH访问内网(局域网)Linux系统
3229 0
8434
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载