我正试图限制一个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,我就不明白为什么它不起作用。