如何使用 rsync(使用无密码 ssh),在本地使用 sudo?

kfm*_*e04 6 ssh sudo rsync

使用无密码 ssh 时,此命令对我来说很好用:

rsync -aqve ssh ${user}@${remote_host}:/etc/bind /tmp/etc/bind
Run Code Online (Sandbox Code Playgroud)

由于我想使用 root 权限直接 rsync 到我自己的本地 /etc/bind,我尝试了:

sudo rsync -aqve ssh ${user}@${remote_host}:/etc/bind /etc/bind
Run Code Online (Sandbox Code Playgroud)

但是现在,我收到密码提示(这很糟糕)。

如何修复此行以在没有密码提示的情况下直接复制到我的本地 /etc/bind?

Jen*_*y D 9

当您使用自己的用户执行此操作时,您将使用自己$HOME/.ssh/目录中的 SSH 密钥。当您以 root 身份执行此操作时sudossh将在 root 的主目录中查找该.ssh目录 - 而您的密钥不在那里。

以下是解决此问题的四种方法 - 其中任何一种都应该有效:

  1. 以 root 身份authorized_keys为远程服务器上的用户创建新的 ssh 密钥并将公共部分添加到
  2. 将您自己的 SSH 密钥复制到根.ssh目录。(确保不要覆盖任何现有的密钥!)
  3. 授予您自己的用户对目标目录的写访问权限。在选择此方法之前,请考虑安全隐患!
  4. 正如 Chris Down 所说,通过使用命令使用您现有的 SSH 密钥

    $ sudo rsync -aqve 'ssh -i ~user/.ssh/id_rsa' \
         ${user}@${remote_host}:/etc/bind /etc/bind
    
    Run Code Online (Sandbox Code Playgroud)

  • 另一种选择是使用`rsync -e 'ssh -i ~user/.ssh/id_rsa' [...]` 或类似的。这避免了必须复制密钥。 (5认同)