記< >


場景: 在家連接公司的內網服務器.

需求: 不用設置端口映射在家用putty登錄公司內網服務器.

條件: 有一台公網服務器做轉發,有開放端口的控制權.(公網服務器可以是阿里雲ECS, 騰訊雲主機這樣的公網服務器.也可以是你家的linux路由器,前提是路由器外網IP是固定的,或者看起來是"固定"的(搜索花生殼).)

探索: 早有耳聞ssh端口轉發的強大功力,一直未研究.今日有上述需求,所以摸索了一番,得此文,謹做備忘記錄.

  公司的網絡管理員不可能給我開一個端口轉發,只能自己動手, 然后我就想起了這篇文章[實戰 SSH 端口轉發].

  看完后我的理解是本地轉發 就是:ssh client開個端口轉發數據給ssh server.  遠程轉發 就是:ssh server開個端口轉發數據給ssh client.

  公司機器在內網啊, 我的ECS服務器連不上,不可能做ssh server. 那就只能當做ssh client咯.  用遠程轉發讓ECS開個端口轉發數據給ssh client.

  於是在公司機器上執行:

   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端口.

  然后我在家里用putty設置IP為ECS的x.x.x.x 端口為2333, 順利連上了公司的機器 ,並且ssh登錄成功.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM