我正在设置一个 Ubuntu 服务器来接收来自客户端的 ssh 连接,这样我就能够连接回他们的机器(反向 SSH 隧道)。我搜索了一种方法来禁止客户端在服务器上执行任何操作,并且找到了不同的解决方案,但似乎没有一个解决方案像通过添加以下内容来配置服务器上特定客户端的authorized_key那么简单:
command="sleep x seconds"
我是否错过了一些重要的事情,导致该解决方案不是一个好的解决方案?
答案1
如果限制是针对多个用户的,我会Match
在 中设置一个块/etc/sshd_config
,以对该组用户应用限制。如果限制是针对特定的 ssh 密钥,我会考虑采用您建议的路线并阻止文件中的命令~/.ssh/authorized_keys
。
Match
阻止/etc/sshd_config
阅读 的文档Match
,并像往常一样在更改连接子系统(如)的ssh
工作方式时,确保您在远程系统上具有可用的根登录名以恢复或调整任何更改。
# Add users to the UNIX group "restrictedusers"
Match Group restrictedusers
AllowTCPForwarding yes
X11Forwarding no
AllowAgentForwarding no
ForceCommand echo No logins permitted
键入~/.ssh/authorized_keys
command
通过将访问控制选项添加到现有或新的密钥条目中,不仅可以强制执行,还可以禁用 X11Forwarding、代理转发等。确保您可以在远程系统上登录以恢复或调整对文件的任何更改。
restrict,port-forwarding,command="echo No logins permitted" ssh-ed25519 ed25519-public-key-code-goes-here...
在这两种情况下,一旦设置完毕,调用者就需要为您设置反向回调。例如,这个将remoteHost
的本地端口连接50123/tcp
到调用者的本地端口123/tcp
ssh -fN -R 50123:localhost:123 remoteHost
最重要的是,这一切都可以在调用者的~/.ssh/config
for中准备好remoteHost
,这样他们就只需要ssh remoteHost
启动回调即可:
Host remoteHost
ForkAfterAuthentication yes
SessionType none
# listenPort targetHost:targetPort
RemoteForward 50123 localhost:123