
我一直在使用 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_*
。