SSH 本地、遠程隧道

Last-Modified: 2019年6月5日15:45:11html

簡介

創建ssh隧道經常使用於, 經過一臺公網的主機或者是你們均可以訪問的主機作跳起色,來訪問內部或者外部不能直接訪問的機器.redis

項目當前用途:vim

因爲服務端上假設架設的redis未設置加密, 所以經過防火牆了屏蔽redis端口(6379), 其餘外網機器須要鏈接到該端口就可使用ssh隧道創建端口轉發繞過防火牆.服務器

參考文章: https://www.cnblogs.com/fbwfb...ssh

我的簡單理解:tcp

  • 本地隧道: 訪問本地指定端口, 經過"中間機器"轉發到"目標機器"的"目標端口", 方向是: 本地 -> 中間 -> 遠程
  • 遠程隧道: 遠程訪問"遠程端口", 經過本機轉發到目標機器的端口, 此時本機是做爲代理, 遠程 -> 本地 -> 目標

本地SSH隧道

ssh -Nf -L {本地端口}:{目標機器}:{目標端口} {中間機器}
# 或
ssh -Nf -L {本地地址}:{本地端口}:{目標機器}:{目標端口} {中間機器}

# -N    不執行遠程指令
# -f    後臺執行ssh命令
# -L    local隧道, [bind_address:]port:host:hostport
# -4    強制使用ipv4地址

{本地地址}未配置, 則默認爲 127.0.0.1, 即只有本機能夠訪問該轉發端口加密

  • {目標機器}若填 「127.0.0.1」, 則指的是直接轉發到中間機器

    ssh -f -N -L 36901:127.0.0.1:3690 root@xx.xx.xx.xx 即創建ssh隧道, 本地訪問36901端口時, 會被轉發到 root@xx.xx.xx.xx的3690端口spa

  • {中間機器} 可指定登錄的用戶名 {user@xx.xx.xx.xx}

示例代理

clipboard.png

目的: A要訪問C, 但被B屏蔽rest

手段: A經過D來間接訪問C

# 如下命令都是在 192.168.0.100 上執行

# 從 192.168.0.100 經過 123.123.123.123 訪問 234.234.234.234
ssh -N -f -L 2121:234.234.234.234:21 123.123.123.123
ftp localhost:2121 # 如今訪問本地2121端口,就能鏈接234.234.234.234的21端口了
  • -N 告訴SSH客戶端,這個鏈接不須要執行任何命令。僅僅作端口轉發
  • -f 告訴SSH客戶端在後臺運行
  • -L 作本地映射端口,被冒號分割的三個部分含義分別是

    • 須要使用的本地端口號
    • 須要訪問的目標機器IP地址(IP: 234.234.234.234)
    • 須要訪問的目標機器端口(端口: 21)

最後一個參數是咱們用來創建隧道的中間機器的IP地址(IP: 123.123.123.123)

-L X:Y:Z的含義是,將IP爲Y的機器的Z端口經過中間服務器映射到本地機器的X端口。

遠程SSH隧道

# 
ssh -Nf -R {遠程端口}:{本地機器}:{本地端口} {遠程機器}
# 或
ssh -Nf -R {遠程綁定地址}:{遠程端口}:{本地機器}:{本地端口} {遠程機器}
  • {本地機器} 不必定是本機, 也能夠是局域網內與本機聯通的主機, 任何訪問{遠程機器}:{遠程端口}的都會被鏈接到 {本地機器}:{本地端口}, 執行上述命令的主機本質上是做爲中轉主機.
  • {遠程綁定地址} 若不填寫, 則默認是 127.0.0.1, 若要容許其餘機器經過 {遠程機器}:{遠程端口} 來訪問該隧道, 則可將該地址配置爲 0.0.0.0(即{遠程機器}上會監聽來自 0.0.0.0:{遠程端口} 的tcp鏈接

{遠程機器} 記得將 sshd 的 GatewayPorts 打開

vim /etc/ssh/sshd_config
# GatewayPorts yes
service sshd reload

示例

clipboard.png

利用 A(內網)-B-D 方向的鏈接 來創建 D-B-A方向的訪問

# 在 192.168.0.100 上執行以下命令
ssh -Nf -R 2222:127.0.0.1:22 123.123.123.123

# 在遠程 123.123.123.123 機器上執行以下命令便可鏈接到 A機器(192.168.0.100)的22端口
ssh -p 2222 localhost

-R 參數

  • 遠程機器使用的端口(2222)
  • 須要映射的內部機器的IP地址(127.0.0.1)
  • 須要映射的內部機器的端口(22)

FAQ

免密碼登錄

配置使用密鑰鏈接

自動重連

隧道可能由於某些緣由斷開,例如:機器重啓,長時間沒有數據通訊而被路由器切斷等等。

能夠經過配置 supervisord, 確保連接斷開時自動重連, 但配置時應去掉 -f參數(不放在後臺執行)

自動重連需配合"免密碼登錄"

supervisord配置示例

[program:ssh_tunel_3690]
command=ssh -N -L 36901:127.0.0.1:3690 publisher@123.59.85.161
numprocs=1
autostart=true
autorestart=true
startretries=10
redirect_stderr=true
stdout_logfile=/data/tmp/supervisord/ssh_tunel_3690.log
supervisorctl update
相關文章
相關標籤/搜索