我怎样才能告诉sftp一个SSH连接?

我正试图限制一个SSH用户从远程主机通过SSH执行不需要的命令。 为此,我在authorized_keys文件中使用了强制命令,它允许ssh-user只执行一个特定的命令。

如果我没有设置,我可以通过ssh和sftplogin。

如何区分远程连接是通过ssh或sftp在shell脚本中发出的?

我期待的命令如下,这两个都应该工作: –

ssh ssh-user @ hostname test_scripts.sh

sftp ssh-user @ hostname

我用variables$ TERM来区分ssh和sftp。 如果是sftp,则$ TERM将返回“哑”。 但是当我们通过ssh传递一个命令时,$ TERM也正在返回愚蠢的状态。 任何想法如何区分?

在问题中添加更多细节:

如果[$ TERM ='dumb']; 然后

$ SSH_ORIGINAL_COMMAND#如果sftp,执行此操作

其他

回声“这是SSH”#如果是SSH,执行此操作

科幻

上面的脚本是通过强制命令调用的。 当我通过SSH远程连接,然后我得到的消息如预期的“这是SSH”

ssh ssh-user @ hostname这是ssh

而当我试图通过SFTP连接,然后如预期if条件成为现实,我得到的SFTP提示符。

sftp ssh-user @ hostname sftp>

但是当我和ssh命令一起传递一个命令时,$ TERM被设置为哑。 所以如果条件成立。

ssh ssh-user @ hostname ls

我需要在上面的脚本中区分后两种方法。 任何人都可以帮助我吗?

看看受限制的Bash – 通常在/ bin / rbash。 我最近使用这个来实现类似于你想要做的事情(在用chroot监狱放屁之后并没有真正到达任何地方)。

对于我想限制的用户,我将他们的terminal设置为/ bin / rbash,并将他们的PATH设置为$ {HOME} / bin。 然后,我创build了一个符号链接,以便让我们允许他们在$ {HOME} / bin目录中运行。 我不认为这是100%的万无一失,但它做了我的用户的工作。

我没有对作为SSH命令行一部分发送的命令进行testing,但只要用户的shell设置为rbash,我就不明白为什么它不起作用。