记<>

场景: 在家链接公司的内网服务器.linux

需求: 不用设置端口映射在家用putty登陆公司内网服务器.shell

条件: 有一台公网服务器作转发,有开放端口的控制权.(公网服务器能够是阿里云ECS, 腾讯云主机这样的公网服务器.也能够是你家的linux路由器,前提是路由器外网IP是固定的,或者看起来是"固定"的(搜索花生壳).)服务器

探索: 早有耳闻ssh端口转发的强大功力,一直未研究.今日有上述需求,因此摸索了一番,得此文,谨作备忘记录.
网络

  公司的网络管理员不可能给我开一个端口转发,只能本身动手, 而后我就想起了这篇文章[实战 SSH 端口转发]. ssh

  看完后个人理解是本地转发 就是:ssh client开个端口转发数据给ssh server.  远程转发 就是:ssh server开个端口转发数据给ssh client.阿里云

  公司机器在内网啊, 个人ECS服务器连不上,不可能作ssh server. 那就只能当作ssh client咯.  用远程转发让ECS开个端口转发数据给ssh client.spa

  因而在公司机器上执行: rest

   ssh -gfnNTR x.x.x.x:2333:localhost:22 root@x.x.x.x -o ServerAliveInterval=300
  Note: x.x.x.x是个人ECS服务器公网IP  localhost是指ssh client本身的127.0.0.1 .

  -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.     容许非本机地址(任何公网IP)链接x.x.x.x的2333端口.{see man sshd_config(5)}.     这个选项很是重要, 要让这个选项生效须要在x.x.x.x服务器(ssh server)上编辑/etc/ssh/sshd_config 添加一行GatewayPorts yes 而后保存退出并 service ssh restart.

 

  整个命令这样理解: 公司机器告诉ECS说 你给我监听一下你的IP的2333端口,把这个2333端口的全部数据都发到我这的127.0.0.1的22端口.code

  而后我在家里用putty设置IP为ECS的x.x.x.x 端口为2333, 顺利连上了公司的机器 ,而且ssh登陆成功.server

相关文章
相关标签/搜索