我有 2 台服务器 ( A
& B
),我需要以 root 身份从 rsync 文件A
到B
。允许 root ssh 登录是可能的 ( PermitRootLogin without-password
),但我希望尽可能地锁定它。我正在使用 ssh 密钥,并且 (在B
) root ssh 密钥 (在/root/.ssh/authorized_keys
) 仅限于A
的 IP 地址 ( from="x.x.x.x ..."
)。
但是我如何才能进一步锁定(此 ssh 密钥)?是否可以限制该 ssh 密钥以仅允许 rsync/文件传输(最好限制在某个目录)?
研究这个问题让我找到了一些古老的网页,上面提到了scponly
shell、rrsync
rsync 脚本或rssh
OpenSSH。但我该如何设置它们,只使用那个密钥,而不让我的整个 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