如何允许用户通过 ssh 执行命令而不分配伪终端

Dan*_* El 1 linux ssh

我需要允许用户运行一组有限的命令。

但不允许他们创建交互式会话。

就像 GitHub 一样。

如果您在没有命令的情况下尝试 ssh,它会向您致意并关闭会话。

我可以通过使用获得这个 ForceCommand some-script

但是进入 some-script我然后需要评估用户的输入。

也许NoTTYsshd_config 中的任何其他类似选项?

- - 更新 - -

我正在寻找纯SSH/Bash解决方案,而不是 Perl/Python/等。黑客。

mgo*_*ven 5

您在设置ForceCommand脚本方面走在正确的轨道上。然后您需要检查SSH_ORIGINAL_COMMAND环境变量,其中包含用户提供给 SSH 客户端的实际命令。例如:

#!/bin/sh

case "$SSH_ORIGINAL_COMMAND" in
    date)
        date
        ;;
    fortune)
        fortune
        ;;
    *)
        echo "Valid commands are: date, fortune"
        exit 1
        ;;
esac
Run Code Online (Sandbox Code Playgroud)

然后用户可以执行如下命令:

% ssh localhost fortune 
Q:   How much does it cost to ride the Unibus?
A:      2 bits.
Run Code Online (Sandbox Code Playgroud)

如果用户不提供命令,他们应该从脚本中收到错误消息(并且连接终止):

% ssh localhost
Valid commands are: date, fortune, rev
Connection to localhost closed.
Run Code Online (Sandbox Code Playgroud)

编辑:使用密钥认证时,可以在authorized_keys 中禁用终端:

command="/usr/local/bin/restricted.sh",no-pty ssh-rsa AAA...
Run Code Online (Sandbox Code Playgroud)