如何在不提示输入密码的情况下进行 rsync,而不使用公钥身份验证?

Dor*_*Dor 76 password ssh rsync

我需要执行rsync,而不提示我输入密码。

我在rsync联机帮助页中看到它不允许将密码指定为命令行参数。
但我注意到它允许通过变量指定密码RSYNC_PASSWORD

所以我尝试导出变量,但rsync一直要求我输入密码。

export RSYNC_PASSWORD="abcdef"
rsync root@1.2.3.4:/abc /def
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

请考虑:

换句话说,我需要让RSYNC_PASSWORD方法起作用!:-)

Gra*_*eme 99

如果rsync守护进程没有在目标机器上运行,并且您不关心向本地机器上的每个人公开密码(为什么有人不应该在命令行中使用密码?),您可以使用sshpass

 sshpass -p "password" rsync root@1.2.3.4:/abc /def
Run Code Online (Sandbox Code Playgroud)

请注意命令开头的空格,在bashshell 中,这将阻止命令(和密码)存储在历史记录中。RSYNC_PASSWORD除非绝对必要,否则我不建议使用该变量(根据之前对此答案的编辑),我建议禁止历史存储或至少在之后清除历史记录。此外,您可以使用tput reset清除您的终端历史记录。

  • 你总是可以做这样的事情:`sshpass -p $(cat passFile) ..` 隐藏 bash 历史记录中的清晰传递,以及 passFile 上的 chmod 400 以保护它 (25认同)
  • 虽然将密码添加为明文是不好的,但这是目前唯一相当简单的方法。 (7认同)
  • 我知道这是旧的,但为了新读者,**请**引用密码 - 密码可以包含特殊字符和空格。`-p "$RSYNC_PASSWORD"` (5认同)
  • 你为什么建议在命令上添加密码明文,那是糟糕的 linux admin 101。 (3认同)

brm*_*brm 20

此密码环境变量似乎仅在使用 rsync 协议时使用:

rsync rsync://username@1.2.3.4:/abc /def
Run Code Online (Sandbox Code Playgroud)

为此,您还需要将 rsync 作为守护程序运行(--daemon选项),这通常使用inetd.conf.

使用此协议时,abc应对应于/etc/rsyncd.conf. 用户名应出现在auth users此目标的行中,并且应使用secrets file选项指定密码文件。

正是这个机密文件包含以下格式的用户名和密码之间的映射:

username:password
Run Code Online (Sandbox Code Playgroud)

您可以使用 RSYNC_PASSWORD 环境变量指定此密码。


Edd*_*die 16

您可以使用标准的 ssh 身份进行无密码登录。如果您有一个~/.ssh/id_rsa或类似的东西,这是默认处理的,但您也可以将自己的路径硬编码到授权密钥对的私钥。

这允许在不暴露密码的情况下进行批处理/脚本编写,并且如果私钥被泄露,可以从目标服务器中删除公钥。

rsync -e"ssh -i /path/to/privateKey" -avR $sourcedir ${ruser}@${rhost}:~/${rdir}/
Run Code Online (Sandbox Code Playgroud)

您还可以添加诸如-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null不强制远程主机密钥验证之类的参数。!注意 - 这会打开中间人的攻击,这是一般的坏习惯!


Aru*_*ius 15

非常有用的脚本是使用--password-file命令行选项。

  • 创建名为 rsync_pass 的空文件
  • 将密码写入此文件(仅此而已)
  • chmod 600 rsync_pass
  • rsync $args --password-file=rsync_pass user@rsynchost::/share localdirectory

这可用于脚本编写,并且比将密码导出到系统变量更安全。

  • 读者注意:这还需要在服务器上运行一个 rsync 守护进程。我真的希望 ssh 密钥足以用于无密码 rsync。 (12认同)

小智 6

这似乎是一个常青话题。因此,我想提出在 Ubuntu 20.04 机器上最适合我的解决方案。

我的目标是在 1blu 云驱动器上创建备份,该驱动器不允许 SSH 密钥登录。

  1. 首先,我创建了该文件~/.rsync_pass并将 SSH 用户的密码写入其中。

  2. 然后我使用sshpass带有参数的命令-f从该文件中读取密码并将其传递给 rsync。

sshpass -f ~/.rsync_pass rsync -av /var/www/folder/ user@example.com:/backup
Run Code Online (Sandbox Code Playgroud)