原文鏈接:https://www.yuque.com/tec-nine/architecture/mgxc71
SSH 命令幫助
命令行選項有:
-a 禁止轉發認證代理的連接.
-A 允許轉發認證代理的連接. 可以在配置文件中對每個主機單獨設定這個參數.
代理轉發須謹慎. 某些用戶能夠在遠程主機上繞過文件訪問權限 (由於代理的 UNIX 域 socket), 他們可以通過轉發的連接訪問本地代理.
攻擊者不可能從代理獲得密鑰內容, 但是他們能夠操作這些密鑰, 利用加載到代理上 的身份信息通過認證.
-b bind_address
在擁有多個接口或地址別名的機器上, 指定收發接口.
-c blowfish|3des|des
選擇加密會話的密碼術. 3des 是默認算法. 3des (triple-des) 用三支不同的密鑰做加密-解密-加密三次運算, 被認爲比較可靠.
blowfish 是一種快速的分組加密術(block cipher), 非常安全, 而且速度比 3des 快的多. des 僅支持 ssh 客戶端,
目的是能夠和老式的不支持 3des 的協議第一版互操作. 由於其密碼算法上的弱點, 強烈建議避免使用.
-c cipher_spec
另外, 對於協議第二版, 這裏可以指定一組用逗號隔開, 按優先順序排列的密碼術. 詳見 Ciphers.
-e ch|^ch|none
設置 pty 會話的 escape 字符 (默認字符: ‘~’). escape 字符只在行首有效, escape 字符後面跟一個點 (‘.’) 表示結束連接, 跟一個
control-Z 表示掛起連接(suspend), 跟 escape 字符自己 表示輸出這個字符. 把這個字符設爲 “none” 則禁止 escape 功能,
使會話完全透明.
-f 要求 ssh 在執行命令前退至後臺. 它用於當 ssh 準備詢問口令或密語, 但是用戶希望它在後臺進行. 該選項隱含了 -n 選項.
在遠端機器上啓動 X11 程序的推薦手法就是類似於 ssh -f host xterm 的命令.
-g 允許遠端主機連接本地轉發的端口.
-i identity_file
指定一個 RSA 或 DSA 認證所需的身份(私鑰)文件. 默認文件是協議第一版的 $HOME/.ssh/identity 以及協議第二版的 $HOME/.ssh/id_rsa
和 $HOME/.ssh/id_dsa 文件. 也可以在配置文件中對每個主機單獨指定身份文件. 可以同時使用多個 -i 選項
(也可以在配置文件中指定多個身份文件).
-I smartcard_device
指定智能卡(smartcard)設備. 參數是設備文件, ssh 能夠用它和智能卡通信, 智能卡里面存儲了用戶的 RSA 私鑰.
-k 禁止轉發 Kerberos 門票和 AFS 令牌. 可以在配置文件中對每個主機單獨設定這個參數.
-l login_name
指定登錄遠程主機的用戶. 可以在配置文件中對每個主機單獨設定這個參數.
-m mac_spec
另外, 對於協議第二版, 這裏可以指定一組用逗號隔開, 按優先順序排列的 MAC(消息驗證碼)算法 (message authentication code). 詳情以
MACs 爲關鍵字查詢.
-n 把 stdin 重定向到 /dev/null (實際上防止從 stdin 讀取數據). ssh 在後臺運行時一定會用到這個選項. 它的常用技巧是遠程運行 X11
程序. 例如, ssh -n shadows.cs.hut.fi emacs & 將會在 shadows.cs.hut.fi 上啓動 emacs, 同時自動在加密通道中轉發 X11 連接. ssh
在後臺運行. (但是如果 ssh 要求口令或密語, 這種方式就無法工作; 參見 -f 選項.)
-N 不執行遠程命令. 用於轉發端口. (僅限協議第二版)
-o option
可以在這裏給出某些選項, 格式和配置文件中的格式一樣. 它用來設置那些沒有命令行開關的選項.
-p port
指定遠程主機的端口. 可以在配置文件中對每個主機單獨設定這個參數.
-q 安靜模式. 消除所有的警告和診斷信息.
-s 請求遠程系統激活一個子系統. 子系統是 SSH2 協議的一個特性, 能夠協助 其他應用程序(如 sftp)把SSH用做安全通路.
子系統通過遠程命令指定.
-t 強制分配僞終端. 可以在遠程機器上執行任何全屏幕(screen-based)程序, 所以非常有用, 例如菜單服務. 並聯的 -t 選項強制分配終端,
即使 ssh 沒有本地終端.
-T 禁止分配僞終端.
-v 冗詳模式. 使 ssh 打印關於運行情況的調試信息. 在調試連接, 認證和配置問題時非常有用. 並聯的 -v 選項能夠增加冗詳程度.
最多爲三個.
-x 禁止 X11 轉發.
-X 允許 X11 轉發. 可以在配置文件中對每個主機單獨設定這個參數.
應該謹慎使用 X11 轉發. 如果用戶在遠程主機上能夠繞過文件訪問權限 (根據用戶的X授權數據庫), 他就可以通過轉發的連接訪問本地 X11
顯示器. 攻擊者可以據此採取行動, 如監視鍵盤輸入等.
-C 要求進行數據壓縮 (包括 stdin, stdout, stderr 以及轉發 X11 和 TCP/IP 連接 的數據). 壓縮算法和 gzip(1) 的一樣, 協議第一版中,
壓縮級別 “level” 用 CompressionLevel 選項控制. 壓縮技術在 modem 線路或其他慢速連接上很有用, 但是在高速網絡上反而
可能降低速度. 可以在配置文件中對每個主機單獨設定這個參數. 另見 Compression 選項.
-F configfile
指定一個用戶級配置文件. 如果在命令行上指定了配置文件, 系統級配置文件 (/etc/ssh/ssh_config) 將被忽略. 默認的用戶級配置文件是
$HOME/.ssh/config.
-L port:host:hostport
將本地機(客戶機)的某個端口轉發到遠端指定機器的指定端口. 工作原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口,
一旦這個端口上有了連接, 該連接就經過安全通道轉發出去, 同時遠程主機和 host 的 hostport 端口建立連接.
可以在配置文件中指定端口的轉發. 只有 root 才能轉發特權端口. IPv6 地址用另一種格式說明: port/host/hostport
-R port:host:hostport
將遠程主機(服務器)的某個端口轉發到本地端指定機器的指定端口. 工作原理是這樣的, 遠程主機上分配了一個 socket 偵聽 port 端口,
一旦這個端口上有了連接, 該連接就經過安全通道轉向出去, 同時本地主機和 host 的 hostport 端口建立連接.
可以在配置文件中指定端口的轉發. 只有用 root 登錄遠程主機 才能轉發特權端口. IPv6 地址用另一種格式說明: port/host/hostport
-D port
指定一個本地機器 “動態的” 應用程序端口轉發. 工作原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口,
一旦這個端口上有了連接, 該連接就經過安全通道轉發出去, 根據應用程序的協議可以判斷出遠程主機將和哪裏連接. 目前支持 SOCKS4 協議,
ssh 將充當 SOCKS4 服務器. 只有 root 才能轉發特權端口. 可以在配置文件中指定動態端口的轉發.
-1 強制 ssh 只使用協議第一版.
-2 強制 ssh 只使用協議第二版.
-4 強制 ssh 只使用 IPv4 地址.
-6 強制 ssh 只使用 IPv6 地址.
阿里雲-內網穿透示例
ssh -CqTnN -R 9000:127.0.0.1:8081 aliyun
本地轉發模式原理
創建本地轉發模式的ssh隧道,命令如下
ssh -g -f -N -L forwardingPort:targetIP:targetPort user@sshServerIP
本機上的forwardingPort將會被監聽,訪問本機的forwardingPort,就相當於訪問targetIP的targetPort,ssh隧道建立在本機與sshServer之間
本地轉發模式 - 方案示例一
ServerA:10.1.0.1
ServerB:10.1.0.2
A#
ssh -f -N -L 9906:10.1.0.2:3306 [email protected]
上述命令表示從本機(ServerA)建立一個到ServerB(10.1.0.2)的ssh隧道,使用本地端口轉發模式,監聽ServerA本地的9906端口,訪問本機的9906端口時,通訊數據將會被轉發到ServerB(10.1.0.2)的3306端口。
本地轉發模式 - 方案示例二
ServerAIP:10.1.0.1
ServerBIP:10.1.0.2
ServerCIP:10.1.0.3
ServerA與ServerB上沒有開啓任何mysql服務。
ServerC中開啓了mysql服務,監聽了3306端口。
A#
ssh -f -N -L 9906:10.1.0.3:3306 [email protected]
上述命令表示,從本機(ServerA)建立一條ssh隧道連接到10.1.0.2(ServerB),隧道使用本地轉發模式建立,轉發端口監聽在本地的9906端口上,訪問本機的9906端口時,數據會被ssh隧道轉發到10.1.0.3(ServerC)的3306端口。
遠程轉發模式原理
創建遠程轉發模式的ssh隧道,命令如下
ssh -f -N -R forwardingPort:targetIP:targetPort user@sshServerIP
sshServer上的forwardingPort將會被監聽,訪問sshServer上的forwardingPort,就相當於訪問targetIP的targetPort,ssh隧道建立在本機與sshServer之間。
遠程轉發模式 - 方案示例
B#
ssh -f -N -R 9906:10.1.0.2:3306 [email protected]
上述命令在ServerB中執行,執行後,即可在ServerA與ServerB之間建立ssh隧道,此時,ServerB是ssh客戶端,ServerA是ssh服務端,隧道建立後,ServerA中的9906端口會被監聽。此刻,我們通過外網IP登錄到ServerA,在ServerA中訪問本地迴環地址的9906端口,即可訪問到內網ServerB中的mysql服務。
不過你肯定注意到了,當使用遠程轉發的命令時,我並沒有指定監聽ServerA的外網IP,也沒有使用"-g選項"開啓網關功能,這是因爲,即使你在命令中指定了IP地址,最終在ServerA中還是會只監聽127.0.0.1的9906端口,你可以在ServerB中嘗試一下如下命令
ssh -f -N -R 10.1.0.1:9906:10.1.0.2:3306 [email protected]
即使在ServerB中執行上述命令時指定了IP或者開啓了網關功能,ServerA的9906端口仍然只監聽在127.0.0.1上,當然,如果你一心想要通過別的主機訪問ServerA的9906端口,也可以使用其他程序去反代ServerA的9906端口。
Linux解決ssh tunnels端口不能轉發問題
Linux解決ssh tunnels端口不能轉發問題
我們需要打開公網服務器網管開關/etc/ssh/sshd_config 修改 GatewayPorts yes
參考資料
- SSH隧道、端口轉發和內網穿透 https://www.processon.com/view/link/642b8baa3aff4d5813d424b7
- ssh使用密鑰進行認證 http://www.zsythink.net/archives/2375
- ssh代理轉發 http://www.zsythink.net/archives/2422
- ssh端口轉發:ssh隧道 http://www.zsythink.net/archives/2450
- ssh反向代理實現內網穿透【親測可用】https://blog.csdn.net/liuxingyuzaixian/article/details/128705262