Ssh

在遠端主機上實現 SSH 重定向

  • August 19, 2016

我的問題與此處描述的問題類似。我有三個主機A,B和C。

A是我家裡的電腦。

B 是我們在大學擁有的連接到 Internet 的伺服器。

C是大學辦公室的電腦。與伺服器連接在同一本地網路中。所以我可以從 A -> B 和 B -> C 進行 SSH,但不能從 A -> C。我想要從 A 到 C 的直接連接。

這裡描述了一個很好的解決方案。

但我的問題是該解決方案應用於 A 主機,我更喜歡可以在主機 B 上安裝的解決方案,因為我想讓其他需要相同連接的使用者更容易。我在這裡註意到,大多數使用者是沒有電腦技能的教師。請提供任何幫助。

首先,這裡的解決方案比問題中提供的連結中給出的解決方案更好,因為這個新解決方案不依賴於外部工具,例如netcat

Host C
 ProxyCommand ssh -W %h:%p B

.ssh/config主機A中。使用者不需要具有特定的電腦技能,他們只需要被告知。任何人都可以在一個文件中放入 2 行。

如果這確實是個問題,可以將特定命令添加到.ssh/authorized_keys主機 B 上的文件中:

command="ssh C" ssh-rsa <key_of_the_user_of_host_A>

因此,當使用者這樣做時,主機 B 上的 SSH 伺服器將自動執行(參見 sshd(8) 手冊頁)ssh B,而不是在主機 B 上啟動互動式 shell 。ssh C但是,這將阻止主機 B 上的任何直接登錄,並且任何其他 SSH 命令,例如/bin/bash -lin ssh -t B /bin/bash -l,都將被忽略。正如手冊頁所說:

最初由客戶端提供的命令在 SSH_ORIGINAL_COMMAND 環境變數中可用。

因此,可能有一些改進的空間,要麼在主機 C 上執行提供的命令,要麼在某些條件下在主機 B 上執行它(如果考慮到這個環境變數,也要小心引用)。一個例子是:

command="ssh ${TTY:+-t} C ${SSH_ORIGINAL_COMMAND-$SHELL}" ssh-rsa <key>

如果有,它將在主機 C 上執行提供的命令(如果沒有,它將像往常一樣啟動互動式 shell)。有了這個,scp可能會工作,但在我的機器上它會因為“權限被拒絕”錯誤而失敗。但是效果很好,如果您遇到問題,rsync可以用作替代品。scp

**重要的。**不要選擇在主機 B 上打開(必須是非特權)埠的解決方案。要麼這將不起作用,因為與此類埠的連接被大學的防火牆阻止,要麼這將引入安全問題,因為這將允許使用者通過埠 22 上的 SSH 伺服器繞過主機 B 上的身份驗證(例如跟踪)。

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