如何設定自動 SSH 隧道

如何設定自動 SSH 隧道

我一直在使用 SSH 的遠端轉送功能將遠端主機上的 Unix 網域套接字的連線轉送到example.com本機上的 Unix 網域套接字。兩台機器都運行Linux。命令如下:

ssh -N -n -R /home/guest/daemon.sock:/var/run/daemon.sock [email protected]

我想自動執行此操作,以便每次我的電腦啟動時都會自動建立隧道。我已將文件/etc/ssh/ssh_host_rsa_key.pub 從本機複製到遠端電腦中/home/guest/.ssh/id_rsa.pub,並將以下行附加到/etc/ssh/ssh_config本機上:

Host example.com User guest IdentityFile /etc/ssh/ssh_host_rsa_key RemoteForward /home/guest/daemon.sock /var/run/daemon.sock

出於安全原因,我還想限制遠端電腦上的使用者「guest」只能建立隧道,僅此而已。因此,我/etc/ssh/sshd_config在遠端主機上附加了以下幾行:

match User guest AllowTcpForwarding yes X11Forwarding no AllowAgentForwarding no ForceCommand /bin/false

問題是:我的本機電腦啟動時沒有任何反應。我確信我錯過了一些重要的東西,但找不到什麼。有任何想法嗎?

答案1

ssh_config檔案對於自動化 SSH 連線完全沒有任何作用。

它的存在只是為了允許定義預設選項– 每當您執行 時ssh example.com,都會尋找對應的「主機」部分並將所有選項新增至命令列。 (您可以說它類似於 shell 別名。)每個使用者~/.ssh/config更常用於相同目的。

但實際上仍然取決於你跑步指令ssh,例如透過 systemd .service 單元、/etc/init.d 腳本或 cron 作業。 (不要忘記在服務中定義它需要在配置網路後啟動。)

(你可能繼續使用 ssh_config,但這裡沒有用,只會使常規的連接example.com煩人。只需直接在服務文件中指定相同的選項即可。


雖然不違法,但重複使用主機金鑰進行客戶端身份驗證有點奇怪。最好使用 產生專用密鑰對ssh-keygen

正如 @Paul 在評論中指出的那樣,受信任的金鑰必須列在其中authorized_keys- SSH 伺服器不關心任何文件id_*

相關內容