无密码 rsync,同时需要密钥和密码才能进行所有其他访问

无密码 rsync,同时需要密钥和密码才能进行所有其他访问

我有一个服务器设置为需要使用带有密码的密钥进行 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/

相关内容