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
[...]
如果您乐于使用基于密钥对的身份验证,就会想到 ssh 强制命令。
迂腐地说,它不会是 ctrl+c,而是
SIGHUP
(更接近于 ctrl+d)杀死应用程序。您基本上可以将任何您想要的内容放入用户的 shell 中
/etc/passwd
。只需将用户密码行(可能/bin/bash
)的默认值替换为另一个程序即可。该程序可以是一个脚本,例如/usr/bin/tail_log_file
,具有这些内容,由 root:root 拥有,umode 0755:您可以使用 rbash 以外的一些解释器,但在这种情况下建议使用受限的 shell。
为了非常迂腐,您应该将脚本的路径添加到
/etc/shells
,但我通常发现它仍然有效。还请记住,用户可能会将脚本置于后台,或使用某些选项 (
ssh username@host bash
) 并仍然获取 shell。如果您想以这种方式限制用户,良好的文件系统权限是唯一真正的解决方案。您可以将 ssh 配置为在使用公钥身份验证登录时运行您选择的命令。为此,生成一对密钥:
restricted-key.pub
包含适合放入用户~/.ssh/authorized_keys
文件的行:但是您可以向其添加一个命令,ssh 将在使用密钥登录时运行该命令:
然后用户可以使用 ssh 连接到机器
ssh -i restricted-key
。