我如何区分 ssh 连接和 sftp 连接?

我如何区分 ssh 连接和 sftp 连接?

我正在尝试限制 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 它就不起作用。

相关内容