如何设置自动 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_*

相关内容