Ssh
遠端 SSH 隧道不適用於證書
我需要通過 SSH 將埠反向轉發到我的伺服器,以便在伺服器上我可以連接到 localhost 埠,然後使用 SSH 隧道將其轉發到我的本地伺服器。
我的本地系統是windows,遠端系統是Linux。當使用 plink 和標準密碼驗證打開隧道時,它工作得很好:
>plink.exe -R *:62050:127.0.0.1:9000 username@host.com
遠端機器上的結果看起來不錯,轉發也可以正常工作。
[user@host ~]$ netstat -an | grep 62050 tcp 0 0 127.0.0.1:62050 0.0.0.0:* LISTEN tcp 0 0 ::1:62050 :::* LISTEN
但是,我想在我的 IDE 中使用它作為預調試命令來建立隧道,所以我想使用我的私鑰:
>plink.exe -R *:62050:127.0.0.1:9000 user@host.com -i C:\Users\abcdefg\.ssh\id_my.ppk
連接也很好用,我沒有被要求輸入密碼並且連接成功。但是,沒有打開埠:
[user@host ~]$ netstat -an | grep 62050
只返回一個空結果。使用 putty 圖形界面時,我可以進行相同的觀察。遠端隧道使用普通密碼驗證就像一個魅力,只要我引入一個私鑰文件,連接就建立了,但反向隧道沒有。
我該如何解決這個問題?
-v 選項將為您提供有關客戶端的更多資訊。
plink.exe -v -R *:62050:127.0.0.1:9000 user@host -i ./np.ppk Looking up host "host" Connecting to 135.x.x.x port 22 Server version: SSH-2.0-OpenSSH_5.1 Using SSH protocol version 2 We claim version: SSH-2.0-PuTTY_Release_0.63 ... Opened main channel Requesting remote port *:62050 forward to 127.0.0.1:9000 Remote port forwarding from *:62050 enabled <---<<< Allocated pty (ospeed 38400bps, ispeed 38400bps) Started a shell/command ...
如果您無法使用 plink 詳細模式找到答案。在另一個埠上以調試模式打開sshd(或要求 root 管理員這樣做)。
無需停止正常的 sshd 守護程序。
# /usr/sbin/sshd -dd -p 2222 debug2: load_server_config: filename /opt/ssh/etc/sshd_config debug2: load_server_config: done config len = 514 debug2: parse_server_config: config /opt/ssh/etc/sshd_config len 514 debug1: Config token is port debug1: Config token is protocol debug1: Config token is hostkey debug1: Config token is hostkey ....
然後使用 plink 選項 -P 連接到該 sshd 實例
plink.exe -v -P 2222 -R *:62050:127.0.0.1:9000 user@host -i ./np.ppk
您將獲得兩端的調試資訊。
編輯
解決方案在
man sshd
“AUTHORIZED_KEYS FILE FORMAT”一章中。很可能 no-port-forwarding 選項已與您的密鑰相關聯,但未設置全域選項。
no-port-forwarding Forbids TCP forwarding when this key is used for authentication. Any port forward requests by the client will return an error. This might be used, e.g. in connection with the command option.
您應該可以訪問您的 home
~/.ssh/authorized_keys
,編輯文件並刪除該選項。有時,authorized_keys 集中在受保護的目錄中,在這種情況下您將無法更改它。