实现SSH内网穿透

实际情况:两台服务器:inner - 内部服务器,无公网IP, outter - 有公网IP

目标:实现任何地点都能ssh连接到inner服务器

解决方案: inner机器做反向代理,outter做正向代理,最终由outter对外提供inner的服务

代理参数说明

反向代理:ssh -fCNR

正向代理:ssh -fCNL

参数:(大小写敏感)

-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
-p 指定远程主机的端口
 

示例:

一 在inner机器建立反向代理

建立inner机器到outter机器的反向代理,具体指令为
ssh -fCNR [outter_IP或省略]:[outter_port]:[inner_IP]:[inner_port] [登陆outter机器的用户名@服务器IP]
在这里我使用了outter机器的8887端口,以及inner机器的22端口,按照上面的指令就是这样子的操作
令 inner_ip = 192.168.3.17 outter_ip = 1.2.3.4
ssh -fCNR 8887:127.0.0.1:22 root@1.2.3.4
注意 127.0.0.1 不要使用localhost,不然可能导致 channel 2: open failed: connect failed: Connection refused 错误

检测进程是否启动成功:

 ps -ef | grep ssh

最好设置为开机启动,将命令 ssh -fCNR 8887:127.0.0.1:22 root@1.2.3.4 & 添加到 /etc/rc.local,同时需要将inner机器设置为免密登陆outter机器,具体做法参照另一篇博文 设置免密传送门

同时outter机器的 8887 端口已经启动成功

二 在outter机器建立正向代理,用来做转发

具体指令为
ssh -fCNL [inner_IP或省略]:[inner_port]:[outter_IP]:[outter_port] [登陆outter机器的用户名@outter_IP]
监听outter的8888端口,然后转发到本机的8887端口,注意8888端口需要开放出来,不然外部无法访问到该端口
ssh -fCNL *:8888:127.0.0.1:8887 127.0.0.1

查看进程 ps -ef | grep ssh

查看端口 ss -tnl | grep 88

一切正常

任意机器远程ssh:

ssh -p8888 outter_username@outter_Ip

大功告成!

进阶:

此时虽然能链接成功,但是会存在经常掉线的问题,我们需要将ssh命令替换为autossh

inner机器下载autossh

debain版本:apt-get insatll autossh

Linux版本: yum insatll autossh

inner机器运行命令

autossh -M 8886 -fCNR 8887:127.0.0.1:22 root@1.2.3.4 &

命令加入开机启动:将此命令替换掉原本添加到 /etc/rc.local中的 ssh -fCNR 8887:127.0.0.1:22 root@1.2.3.4 &

与ssh命令不同的是多了一个-M 参数,该参数会使outter机器多启动一个8886端口用来检测是否链接正常,若链接出现异常则会自动重新连接

其中碰到的小问题:

有时候用跳板机访问目标服务器的时候,明明端口都是起着的,从外网telnet跳板机器端口是可以ping通的,但是无法ssh连接成功,通过 ssh username@跳板机IP -p 端口 -v 参数可以看到ssh_exchange_identification: Connection closed by remote host,出现这种问题的原因可能是跳板机的ssh连接数满了,因为默认ssh链接数为10,将 /etc/ssh/sshd_config中的MaxStartups 值设置大一点比如100,然后检查 /etc/hosts.deny 和/etc/hosts.allow 是否有异常ip,如无特殊需求则全部注释掉

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值