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

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

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

但是我如何才能进一步锁定(此 ssh 密钥)?是否可以限制该 ssh 密钥以仅允许 rsync/文件传输(最好限制在某个目录)?

研究这个问题让我找到了一些古老的网页,上面提到了scponlyshell、rrsyncrsync 脚本或rsshOpenSSH。但我该如何设置它们,只使用那个密钥,而不让我的整个 root 帐户rssh

答案1

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

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

你可以像这样使用它:

command="/path/to/rrsync -wo /allowed/directory/",restrict,from="a.b.c.d" ecdsa-sha2-nistp521 AAAAE...

此密钥的访问权限仅限于 rsync /allowed/directory/-wo(只写)选项意味着rsync只允许发送远程机器-ro只允许读取远程系统不提供任何选项,将允许双向传输。

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

也可以看看这个答案回答一个不同但相关的问题。

答案2

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

使用密码创建密钥

ssh-keygen -f mykeyfile
#make sure you add a passphrase when asked

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

ssh-add mykeyfile
#enter password here

相关内容