使用 SSH 进行 Rsync 时提示输入远程密码

使用 SSH 进行 Rsync 时提示输入远程密码

我已经关注以下指南在本地计算机和远程服务器之间设置使用 SSH 的 Rsync:

我以 root 身份执行了下列操作:

  1. rsync -avz -e ssh /home/user/dir [email protected]::Backup/dir-> 提示输入密码

  2. ssh-keygen-> 密钥已生成

  3. ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.200.10-> 确认密钥已被复制

  4. ssh 192.168.200.10-> 无需输入密码即可访问远程服务器

  5. rsync -avz -e ssh /home/user/dir [email protected]::Backup/dir-> 提示输入密码

我可以通过 SSH 进入远程服务器而不需要输入密码,但使用 rsync 时却需要输入密码,这难道不奇怪吗?

我可以.ssh/authorized_keys在远程服务器上看到。

我哪里做错了?

答案1

您正在混合两种独立的连接模式:使用远程 shell(-e ssh)和不使用远程 shell,通过rsync daemon(由双冒号标识)。

手册状态:

连接到 RSYNC 服务器

也可以使用没有远程 shell 的 rsync 作为传输。在这种情况下,您将连接到在 TCP 端口 873 上运行的远程 rsync 服务器。

...... 您可以使用双冒号 :: 而不是单冒号将主机名与路径分隔开,或者使用 rsync:// URL。

.......远程服务器上的某些路径可能需要身份验证。如果是这样,那么当您连接时,您将收到密码提示。您可以通过将环境变量 RSYNC_PASSWORD 设置为要使用的密码或使用 --password-file 选项来避免密码提示。这在编写 rsync 脚本时可能很有用。

对您来说,获得无密码身份验证的最简单方法可能是修改上述命令,如下所示:

   rsync -avz -e ssh /home/user/dir [email protected]:/absolute/path/to/Backup/dir

答案2

您的本地帐户的用户名可能不是root,这是您在 Rsync 中使用的用户名。

ssh remotehost

…实际上等同于:

ssh localUserName@remotehost

抱歉,我没有注意到您已经说过您以 root 身份运行。

我也没有注意到您::在远程主机名后使用了带有两个冒号 ( ) 的模块语法。我不认为您所遵循的指南介绍了以这种方式连接到 Rsync,并且如果您使用单冒号语法就应该没问题,例如:

rsync -avz -e ssh /home/user/dir [email protected]:/some/path/backups/dir

答案3

我也遇到过这个问题 - 希望这能有所帮助。对我来说,问题在于备用端口 ssh 所需的语法。以下是两个有效示例:

从目标备份机器执行此操作,从源备份拉到目标备份:

rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' [email protected]:/home/user/Server/ /home/user/Server/

从源机器执行此操作,从源机器向目标机器发送备份:

rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' /home/user/Server/ [email protected]:/home/user/Server/

此解决方案假设您已经使用 交换了您的公钥和/或目标交换了您的公钥ssh-copy-id -p 59333。如果您使用端口 22,则不需要这种奇怪的语法,在这种情况下,您可以使用标志i,它将从 中的默认位置获取公钥~/.ssh/id_rsa.pub。这是一个没有备用端口的示例,也可以正常工作:

从目标备份机器执行此操作,从源备份拉到目标备份:

sudo rsync -avi --delete [email protected]:/var/www/ /media/sdb1/backups/www/

从源机器执行此操作,从源机器向目标机器发送备份:

sudo rsync -avi --delete /media/sdb1/backups/www/ [email protected]:/var/www/

如果仍然提示您输入密码,则需要检查 ssh 配置/etc/ssh/sshd_config并验证源和目标中的用户是否各自拥有对方的公共 ssh 密钥。我留下了这么多细节,因为上面另外两个人留下的语法对我来说仍然不起作用。

答案4

我总是用我的私钥登录并连接到我的授权密钥所在的服务器

像这样

/usr/bin/rsync -avz --delete  -e "ssh -i /root/.ssh/marcel_id_rsa" root@localhost:/opt/ /backup/1-Zondag

它从 cron 开始工作。nu passwd 询问

如果由于远程服务器拒绝而无法正常工作...这肯定有效

sshpass -p "我的密码" /usr/bin/rsync -avz --delete -e ssh root@localhost:/opt/ /backup/1-Zondag

相关内容