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
,不能用其他软件换句话说,我需要让RSYNC_PASSWORD
方法起作用!:-)
Gra*_*eme 99
如果rsync
守护进程没有在目标机器上运行,并且您不关心向本地机器上的每个人公开密码(为什么有人不应该在命令行中使用密码?),您可以使用sshpass
:
sshpass -p "password" rsync root@1.2.3.4:/abc /def
Run Code Online (Sandbox Code Playgroud)
请注意命令开头的空格,在bash
shell 中,这将阻止命令(和密码)存储在历史记录中。RSYNC_PASSWORD
除非绝对必要,否则我不建议使用该变量(根据之前对此答案的编辑),我建议禁止历史存储或至少在之后清除历史记录。此外,您可以使用tput reset
清除您的终端历史记录。
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
命令行选项。
chmod 600 rsync_pass
rsync $args --password-file=rsync_pass user@rsynchost::/share localdirectory
这可用于脚本编写,并且比将密码导出到系统变量更安全。
小智 6
这似乎是一个常青话题。因此,我想提出在 Ubuntu 20.04 机器上最适合我的解决方案。
我的目标是在 1blu 云驱动器上创建备份,该驱动器不允许 SSH 密钥登录。
首先,我创建了该文件~/.rsync_pass
并将 SSH 用户的密码写入其中。
然后我使用sshpass
带有参数的命令-f
从该文件中读取密码并将其传递给 rsync。
sshpass -f ~/.rsync_pass rsync -av /var/www/folder/ user@example.com:/backup
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
290016 次 |
最近记录: |