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

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

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

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

就像 GitHub 一样。

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

我可以通过使用来获得它ForceCommand some-script

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

NoTTYsshd_config 中也许还有其他类似选项?

- - 更新 - -

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

答案1

设置脚本的方法是正确的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

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

% ssh localhost fortune 
Q:   How much does it cost to ride the Unibus?
A:      2 bits.

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

% ssh localhost
Valid commands are: date, fortune, rev
Connection to localhost closed.

编辑:可以禁用终端授权密钥使用密钥认证时:

command="/usr/local/bin/restricted.sh",no-pty ssh-rsa AAA...

答案2

如果只想允许命令,请使用以下命令git将用户的 shell 设置为:git-shell

usermod -s /usr/bin/git-shell <USERNAME>

git-shell是 git 包的一部分。

如果你想允许任意命令,mgorven 的回答是正确的做法。

答案3

看一下sshd本节中的手册页AUTHORIZED_KEYS FILE FORMAT。我认为您正在寻找no-pty选项。

答案4

看一下这个脚本:

http://lists.fusionforge.org/pipermail/fusionforge-general/2012-May/001795.html

这是一个限制命令的 perl 脚本......

相关内容