反向代理
ssh -fCNR
正向代理
ssh -fCNL
-f 后台執行ssh指令
-C 允許壓縮數據
-N 不執行遠程指令
-R 將遠程主機(服務器)的某個端口轉發到本地端指定機器的指定端口
-L 將本地機(客戶機)的某個端口轉發到遠端指定機器的指定端口
-p 指定遠程主機的端口
1、先在目標機器建立到跳板機的反向代理:ssh -fCNR 7280:localhost:22 root@123.123.123.123
2、服務器建立正向代理:ssh -fCNL *:1234:localhost:7280 localhost
在此1234端口為本地轉發端口,負責和外網進行通信,並將數據轉發的7280這個端口,實現了可以從其他機器訪問的功能。同時,*號表示可以接受任何IP的訪問。
3、此時,就能從外網直接通過1234 端口訪問到內網目標機器了
ssh pi@localhost -p1234
3.1 ssh-keygen -t rsa # 生產ssh密鑰
4、免密登錄在目標機執行(將公鑰發送給目標機器)
ssh-copy-id 目標機用戶名@公網IP -p1234
5、autossh 自動重連
目標機先安裝autossh 安裝命令 apt-get install update, apt-get install upgrade, apt-get install autossh;
autossh -M 5678 -NfR port:localhost:22 root@公網ip # -M參數,這個參數指定一個端口,這個端口是外網的B機器用來接收內網A機器的信息,
如果隧道不正常而返回給A機器讓他實現重新連接。
在跳板機上 netstat -pan |grep port 如果 只監聽127.0.0.1,可以修改/etc/ssh/sshd_config/設置GatewayPorts為yes
目標機代碼如下:
from Base.setting import setting import os def start_autoSSH(): GuardianID = setting.mncode[-4:] GuardianID = str(int(GuardianID)+8000) command = 'autossh -M 5678 -NfR %s:localhost:22 root@%s' % (GuardianID,setting.ssh_server) print(command) os.system(command) start_autoSSH() # ssh -NfR 1011:localhost:22 root@46.96.101.117