Ssh

遠端 SSH 隧道不適用於證書

  • February 21, 2014

我需要通過 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 集中在受保護的目錄中,在這種情況下您將無法更改它。

引用自:https://unix.stackexchange.com/questions/115987