記<>

場景: 在家鏈接公司的內網服務器.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

相關文章
相關標籤/搜索