Sathvik K S Asked: 2019-04-10 02:25:57 +0800 CST2019-04-10 02:25:57 +0800 CST 2019-04-10 02:25:57 +0800 CST 如何防止用户通过ssh 手动登录? 772 我有一个使用密钥连接到远程服务器的脚本。但是我不希望人们通过键入 ssh 命令登录到服务器,但脚本应该可以工作。 编辑:脚本启动远程端口转发。它包含带有所有必需参数的普通 ssh -R 命令,还设置了一个伪终端 -t 在远程服务器中启动脚本并传递一些变量。远程服务器中的脚本检查通过 -t 发送的变量并决定是接受端口转发连接还是关闭 ssh 连接。 ssh linux 3 个回答 Voted xenoid 2019-04-10T03:37:30+08:002019-04-10T03:37:30+08:00 您或许可以将脚本替换为可动态解密密钥的二进制文件。这将使为其他目的捕获密钥变得更加困难(但并非不可能)。 如果服务器上只有一件事要运行,您可以尝试将其设为定义为登录 shell 的脚本。 但是恕我直言,编写一个在服务器上运行操作的小型 web 服务器更安全,本地脚本curl调用它。 Best Answer Daniel B 2019-04-11T04:19:19+08:002019-04-11T04:19:19+08:00 如果您希望用户只能使用端口转发,您应该在服务器上设置限制。 就像在 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:62222. ssh必须用-N(“不要执行远程命令。”)调用,否则ForceCommand会生效并终止连接。 如果你想要远程端口转发,你需要使用PermitListen而不是PermitOpen和一个合适的GatewayPorts选项。 Davey 2019-04-10T10:29:10+08:002019-04-10T10:29:10+08:00 另一种解决方案是限制您用来连接的 ssh 用户的访问量。所以即使他们真的联系上了,他们也无能为力。您可以通过创建一个新用户并为此连接设置正确的权限来完成此操作。此外,您可以在服务器上为该用户设置一个与服务器其余部分隔离的虚拟环境。如果您不设置虚拟环境,则需要对您的文件进行安全审核,以确保该用户可以使用的文件/目录没有任何“所有人”权限。
您或许可以将脚本替换为可动态解密密钥的二进制文件。这将使为其他目的捕获密钥变得更加困难(但并非不可能)。
如果服务器上只有一件事要运行,您可以尝试将其设为定义为登录 shell 的脚本。
但是恕我直言,编写一个在服务器上运行操作的小型 web 服务器更安全,本地脚本
curl
调用它。如果您希望用户只能使用端口转发,您应该在服务器上设置限制。
就像在 Ubuntu Stack Exchange 上讨论的那样:
UNIX 组中的用户
some-group
将只能使用端口转发到localhost:62222
.ssh
必须用-N
(“不要执行远程命令。”)调用,否则ForceCommand
会生效并终止连接。如果你想要远程端口转发,你需要使用
PermitListen
而不是PermitOpen
和一个合适的GatewayPorts
选项。另一种解决方案是限制您用来连接的 ssh 用户的访问量。所以即使他们真的联系上了,他们也无能为力。您可以通过创建一个新用户并为此连接设置正确的权限来完成此操作。此外,您可以在服务器上为该用户设置一个与服务器其余部分隔离的虚拟环境。如果您不设置虚拟环境,则需要对您的文件进行安全审核,以确保该用户可以使用的文件/目录没有任何“所有人”权限。