如何阻止用户手动通过ssh登录?

如何阻止用户手动通过ssh登录?

我有一个使用密钥连接到远程服务器的脚本。但是我不希望人们通过键入 ssh 命令登录服务器,但该脚本应该可以工作。

编辑:该脚本启动远程端口转发。它包含常规 ssh -R 命令及其所有必需参数,还使用 ​​-t 设置伪终端,在远程服务器中启动脚本并传递一些变量。远程服务器中的脚本检查通过 -t 发送的变量并决定是否接受端口转发连接或仅关闭 ssh 连接。

答案1

如果您希望用户只能使用端口转发,则应该在服务器上设置限制。

喜欢讨论在 Ubuntu Stack Exchange 上

Match Group some-group
   #AllowTcpForwarding yes
   X11Forwarding no
   PermitTunnel no
   GatewayPorts no
   AllowAgentForwarding no
   PermitOpen localhost:62222
   ForceCommand echo 'This account can only be used for port forwarding'

然后, UNIX 组中的用户some-group将无法执行任何操作,只能使用端口转发localhost:62222ssh必须使用-N(“不执行远程命令。”)进行调用,因为否则ForceCommand将生效并终止连接。

如果您想要远程端口转发,您需要使用PermitListen而不是PermitOpen和适当的GatewayPorts选项。

答案2

您或许可以用一个可以即时解密密钥的二进制文件来替换该脚本。这样一来,捕获密钥用于其他目的就变得更加困难(但并非不可能)。

如果服务器上只有一项需要运行,那么您可以尝试将其定义为登录 shell 的脚本。

curl但恕我直言,编写一个小型 Web 服务器来运行服务器上的操作,并使用本地脚本对其进行调用,这样更安全。

答案3

另一个解决方案是限制您用于连接的 ssh 用户的访问量。这样,即使他们连接了,他们也无法执行任何操作。您可以通过创建新用户并仅为此连接设置正确的权限来实现此目的。此外,您还可以在服务器上为该用户设置一个与服务器其余部分隔离的虚拟环境。如果您不设置虚拟环境,则需要对文件进行安全审核,以确保此用户对文件/目录没有任何“所有人”权限。

相关内容