自定义 Openssh Shell

自定义 Openssh Shell

环境是Ubuntu Server 12.04

我想在服务器上创建一个用户,该用户只能通过 ssh 进入一个 shell,该 shell 在日志文件上运行 tail -f,并在程序结束后关闭会话(ctrl+c)。

有办法实现这个吗?

答案1

严格地说,不是 ctrl+c,而是SIGHUP(更接近 ctrl+d)来终止应用程序。

基本上,您可以将任何内容放入用户的 shell 中/etc/passwd。只需将用户密码行中的默认值(可能是/bin/bash)替换为另一个程序即可。该程序可以是脚本,例如/usr/bin/tail_log_file,其内容如下,所有者为 root:root,umode 为 0755:

#!/bin/rbash
tail -f /path/to/logfile

您可以使用 rbash 以外的其他解释器,但在这种情况下建议使用受限 shell。

为了更加严格地要求,您应该将脚本的路径添加到/etc/shells,但我通常发现它仍然有效。

还请记住,用户可能会将脚本放在后台,或使用某些选项(ssh username@host bash)并仍然获取 shell。如果您想以这种方式限制用户,良好的文件系统权限是唯一真正的解决方案。

答案2

如果您乐于使用基于密钥对的身份验证,那么 ssh 强制命令就会浮现在您的脑海中。

man authorized_keys
/command=

答案3

您可以配置 ssh 以在使用公钥身份验证登录时运行您选择的命令。为此,请生成一对密钥:

djs@sardinia:~$ ssh-keygen -f restricted-key 
Generating public/private rsa key pair. 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in restricted-key. 
Your public key has been saved in restricted-key.pub. 
The key fingerprint is: b1:8f:26:47:c2:c5:f2:8d:ed:a0:c4:bd:9a:30:9d:08 djs@sardinia 
[...]

restricted-key.pub包含适合放入用户~/.ssh/authorized_keys文件中的行:

ssh-rsa AAAA...UDz47Nl djs@sardinia

但是您可以向其中添加一个命令,然后 ssh 将在使用密钥登录时运行该命令:

command="tail -f /my/interesting/file" ssh-rsa AAAA...UDz47Nl djs@sardinia

然后用户就可以使用 ssh 访问该机器了ssh -i restricted-key

相关内容