我需要允许用户运行一组有限的命令。
但不允许他们创建交互式会话。
就像 GitHub 一样。
如果您尝试在没有命令的情况下进行 ssh,它会向您问候并关闭会话。
我可以通过使用来获得它ForceCommand some-script
但是进入 some-script
之后我需要评估用户的输入。
NoTTY
sshd_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 脚本......