允许 ssh,但只能执行特定脚本

use*_*866 6 ssh authorization

可能的重复:
创建一个只执行一个命令的 UNIX 帐户

有一个必须通过现有用户帐户 XXX 执行的 shell 脚本。现在我有各种其他用户,它们也只能执行此脚本而无需访问用户帐户 XXX。有没有办法创建一个 ssh 命令(可能通过密钥或其他任何东西),它只允许在不知道 XXX 密码的情况下执行用户 XXX 的这个特定的 shell 脚本?

Jen*_*y D 9

如果运行脚本是您希望其他用户能够做的唯一事情,那么我会使用 ssh 密钥。

每个用户都应该有自己的 ssh 密钥,这样当有人不再需要访问时,您就不会遇到麻烦。密钥的公共部分应该放入

~scriptuser/.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)

并在实际键之前,您应该添加文本 command="/path/to/script"

下面是一个例子:

from="10.23.5.32",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/path/to/script"  ssh-dss A........
Run Code Online (Sandbox Code Playgroud)

这限制了可以使用此密钥的 ip 地址,并限制了可以进行的转发类型,并确保在使用此密钥时不能授予任何 pty,并且每当用户使用此密钥连接时脚本将运行,不会发生任何其他事情。

要添加环境变量,您只需将其添加到密钥中:

from="10.23.5.32",environment="MYVARIABLE=whatever",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/path/to/script"  ssh-dss A........
Run Code Online (Sandbox Code Playgroud)

但是,为了使其工作,您必须PermitUserEnvironment在 sshd 配置文件中将指令设置为“是”。如果你不能做到这一点,你可以改为将行更改为:

from="10.23.5.32",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="export MYVARIABLE=whatever; /path/to/script"  ssh-dss A........
Run Code Online (Sandbox Code Playgroud)