在遠端主機上實現 SSH 重定向
我的問題與此處描述的問題類似。我有三個主機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 -l
inssh -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 上的身份驗證(例如跟踪)。