将 ssh 密钥限制为仅允许 rsync/文件传输?

Ama*_*rus 2 security ssh rsync ssh-keys

我有2个服务器(AB),我需要从rsync的文件A,以Broot身份。允许 root ssh 登录是可能的 ( PermitRootLogin without-password),但我想尽可能地将其锁定。我正在使用 ssh 密钥,并且 (on B) 根 ssh 密钥 (in /root/.ssh/authorized_keys) 仅限于A的 IP 地址 ( from="x.x.x.x ...")。

但是我怎样才能更多地锁定(这个 ssh 密钥)呢?是否可以将该 ssh 密钥限制为仅允许 rsync/文件传输(最好仅限于某个目录)?

对此进行研究将我指向提及scponlyshell 或rrsync来自 rsync 或rssh来自 OpenSSH 的脚本的古老网页。但是我怎么能只为那个键设置它们,而不让我的整个 root 帐户成为rssh

小智 8

rrsync 旨在用作特定键的强制命令,因此它应该正是您想要的。

强制命令是使用command授权密钥文件中的密钥选项设置的,然后无论客户端请求什么命令,只要使用此密钥进行身份验证,它就会始终运行。但是它可以访问请求的命令,因此它可以例如实现它的经过验证的受限版本,这就是它的rrsync作用。

你像这样使用它:

command="/path/to/rrsync -wo /allowed/directory/",restrict,from="a.b.c.d" ecdsa-sha2-nistp521 AAAAE...
Run Code Online (Sandbox Code Playgroud)

此密钥的访问权限仅限于 rsync /allowed/directory/。该-wo(只写)选项意味着rsync将只允许发送远程机器上,-ro只允许读取远程系统中,没有给出选项将允许在两个方向上传输。

在本地,当您提供参数时,rsync您必须提供相对于允许目录的远程路径,因此A您可以执行例如。 rsync -options /local/path root@B:不是 rsync -options /local/path root@B:/allowed/directory/

另请参阅this answer to a different but related question。


小智 -2

对访问类型没有硬性限制,但可能会为您的密钥添加密码,然后使用代理将密钥添加到您的会话中。这样,您只需在会话中解锁一次密钥即可进行无密码 ssh/scp/rsync 访问。如果它被盗,它有一个密码保护它不被使用。

使用密码创建密钥

ssh-keygen -f mykeyfile
#make sure you add a passphrase when asked
Run Code Online (Sandbox Code Playgroud)

在使用 SSH/SCP/RSYNC 之前将密钥添加到代理

ssh-add mykeyfile
#enter password here
Run Code Online (Sandbox Code Playgroud)