我有一个服务器设置为需要使用带有密码的密钥进行 ssh 访问的公钥身份验证。有没有办法设置一个无密码密钥,仅在通过 ssh 执行 rsync 时才允许使用,同时仍然需要密钥和密码才能进行所有其他 ssh 访问?
答案1
创建一个单独的 RSA 密钥仅供 rsync 使用。不要在该密钥上设置密码。为其指定一个唯一的名称,例如id_rsa_rsync
私钥和id_rsa_rsync.pub
公钥。
在服务器上,将公钥安装在新行上~/.ssh/authorized_keys
,如下所示:
(server)$ cat << EOF >> .ssh/authorized_keys
command="rsync",no-pty,no-port-forwarding (paste your public key here)
EOF
检查生成的文件以确保它看起来像这样:
(server)$ tail -1 .ssh/authorized_keys
command="rsync",no-pty,no-port-forwarding ssh-rsa AAAAB3..blah..blah..HhcvQ== [email protected]
当您想要rsync
从本地计算机到服务器时,您需要添加-e 'ssh -i ~/.ssh/id_rsa_rsync'
以告诉rsync
使用您刚刚设置的新密钥:
rsync -av -e 'ssh -i ~/.ssh/id_rsa_rsync' local/files* server:/remote/path/
通过文件中的一些巧妙条目~/.ssh/config
,您可以简化rsync
命令行:
# this entry is used for normal logins to "server":
Host server
IdentityFile ~/.ssh/id_rsa
# this entry is used for rsyncing to "server" without a passphrase:
Host server-rsync
Hostname server
IdentityFile ~/.ssh/id_rsa_rsync
该Hostname server
行需要指定有效的 DNS 名称或/etc/hosts
条目。有了该配置条目,您的rsync
命令行就变成了:
rsync -av local/files* server-rsync:/remote/path/