环境是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
。