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