我正在尝试限制 ssh 用户通过远程主机的 ssh 执行不需要的命令。为此,我在 authorized_keys 文件中使用强制命令,该命令将允许 ssh 用户仅执行特定命令。
如果我没有设置这个,我可以通过 ssh 和 sftp 登录。
如何在 shell 脚本中区分远程连接是通过 ssh 还是 sftp 发出的?
我期望的命令如下,这两个命令都应该起作用:-
ssh ssh-用户@主机名 test_scripts.sh
sftp ssh-用户@主机名
我使用变量 $TERM 来区分 ssh 和 sftp。如果是 sftp,则 $TERM 将返回“dumb”。但是当我们通过 ssh 传递命令时,$TERM 也会返回 dumb。有什么想法可以区分吗?
为问题添加更多细节:-
如果 [ $TERM = 'dumb' ]; 那么
$SSH_ORIGINAL_COMMAND #如果是 sftp,则执行此操作
别的
echo "This is ssh" #如果是 ssh,则执行此操作
菲
上述脚本是通过强制命令调用的。当我通过 ssh 进行远程连接时,我收到了预期的消息“This is ssh”
ssh ssh-user@hostname 这是 ssh
当我尝试通过 sftp 连接时,正如预期的那样,if 条件变为真,并且我收到了 sftp 提示。
sftp ssh-用户@主机名 sftp>
但是当我传递 ssh 命令的同时传递命令时,$TERM 被设置为 dumb。因此 if 条件成立。
ssh ssh-用户@主机名 ls
我需要区分上述脚本中的后两种方法。有人能帮我吗?
答案1
看一下限制性猛击- 通常在 /bin/rbash。我最近用它实现了与你尝试做的事情类似的效果(在使用 chroot jails 后,我尝试了各种方法,但都没有取得任何进展)。
对于我想要限制的用户,我将他们的终端设置为 /bin/rbash,将他们的 PATH 设置为 ${HOME}/bin。然后,我创建了一个符号链接,指向我希望允许他们在 ${HOME}/bin 目录中运行的任何命令。我不认为它 100% 万无一失,但它对我的用户来说确实有效。
我还没有对作为 SSH 命令行的一部分发送的命令进行测试,但我不明白为什么只要用户的 shell 设置为 rbash 它就不起作用。