SSH 密钥或用户仅限于创建 SOCKS 代理

Lev*_*ets 3 ssh authentication socks-proxy ssh-tunnel

我喜欢使用如下命令创建一个充当 SOCKS 代理的 SSH 隧道:

ssh -i ~/.ssh/some_key -N -D 8000 someuser@remote.server.com

这允许我设置本地程序,例如访问的专用网络curl中的资源:remote.server.com

curl --proxy socks5h://localhost:8000 192.168.10.10:9000

我可以制作~/.ssh/some_key一种特殊的密钥,它只具有创建此 SOCKS 代理隧道的权限,但无法登录或执行其他任何操作吗?或者,我可以创建someuser一种特殊的用户,接受 SSH SOCKS 隧道连接,而不接受其他 SSH 连接吗?

Ken*_*ter 6

OpenSSH客户端可以通过和选项ssh进行两种类型的转发。这两种类型的转发在客户端的工作方式不同,但它们使用相同的 SSH 协议功能和相同的 SSH 服务器功能。换句话说,它们对于 SSH 服务器来说“看起来”是一样的。-L-D

您可以配置服务器将会话限制为端口转发,但不能专门将它们限制为通过 SOCKS 进行端口转发。服务器并不明确知道特定的转发请求与 SOCKS 相关联。

您可以通过将密钥的公共部分放置在SSH 服务器上的authorized_keys文件中来启用 SSH 密钥。您可以向每个键添加指令来控制如何使用该键。

看起来指令限制,端口转发应该完成你想要的。您可能还需要添加指令command="/bin/false"以阻止用户运行命令。还有一个PermitOpen指令限制用户可以转发到哪些端口,但这对于基于 SOCKS 的端口转发不太有用。

_authorized_keys_ 文件的相关行最终看起来像这样:

restrict,port-forwarding,command="/bin/false" ssh-rsa AAAAB3NzaC1...
Run Code Online (Sandbox Code Playgroud)