自定义 Openssh Shell

Abl*_*lue 8 linux ubuntu ssh shell

环境是Ubuntu Server 12.04

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

有没有办法实现这一目标?

tin*_*ink 10

如果您乐于使用基于密钥对的身份验证,就会想到 ssh 强制命令。

man authorized_keys
/command=
Run Code Online (Sandbox Code Playgroud)


Fal*_*mot 8

为了迂腐,它不会是 ctrl+c,而是SIGHUP(更接近 ctrl+d)杀死应用程序。

您基本上可以将您想要的任何内容放入/etc/passwd. 只需/bin/bash用另一个程序替换用户 passwd 行(可能)上的默认值。该程序可以是一个脚本,例如/usr/bin/tail_log_file,具有以下内容,由 root:root 拥有,具有 umode 0755:

#!/bin/rbash
tail -f /path/to/logfile
Run Code Online (Sandbox Code Playgroud)

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

为了非常迂腐,您应该将脚本的路径添加到/etc/shells,但我通常发现它无论如何都可以工作。

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

  • 你想在`/etc/shells` 中添加一些东西的唯一原因是允许有其他东西作为他们的shell 的用户将他们的shell 设置为这个;超级用户 (`root`) 可以随时将任何人的 shell 更改为他们想要的任何内容。 (2认同)