我喜欢使用以下命令创建一个充当 SOCKS 代理的 SSH 隧道:
ssh -i ~/.ssh/some_key -N -D 8000 [email protected]
这使我能够设置本地程序,例如访问 的私有网络curl
中的资源:remote.server.com
curl --proxy socks5h://localhost:8000 192.168.10.10:9000
我可以制作~/.ssh/some_key
一种特殊的钥匙吗仅有的有权创建此 SOCKS 代理隧道,但无法登录或执行其他任何操作?或者,我可以创建someuser
一种特殊的用户,仅有的接受 SSH SOCKS 隧道连接,但不接受其他 SSH 连接?
答案1
OpenSSHssh
客户端可以通过-L
和-D
选项执行两种类型的转发。这两种类型的转发在客户端中的工作方式不同,但它们使用相同的 SSH 协议功能和相同的 SSH 服务器功能。换句话说,它们对 SSH 服务器来说“看起来”相同。
您可以配置服务器将会话限制为端口转发,但不能通过 SOCKS 明确限制它们进行端口转发。服务器并不知道特定的转发请求与 SOCKS 相关联。
您可以通过将密钥的公共部分放在授权密钥SSH 服务器上的文件。您可以向每个密钥添加指令,以控制密钥的使用方式。
看起来像指令限制、端口转发应该可以实现你想要的效果。你可能还需要添加指令命令=“/bin/false”阻止用户运行命令。还有一个许可证开放指令限制了用户可以转发到的端口,但对于基于 SOCKS 的端口转发来说这可能没用。
_authorized_keys_ 文件的相关行最终看起来像这样:
restrict,port-forwarding,command="/bin/false" ssh-rsa AAAAB3NzaC1...