如何为rsync ssh命令传递密码

liy*_*ysd 100 passwords ssh rsync

我需要通过ssh进行rsync并且想要自动执行它而无需手动为ssh传递密码.

Raj*_*dra 87

使用"sshpass"非交互式ssh密码提供程序实用程序

在Ubuntu上

 sudo apt-get install sshpass
Run Code Online (Sandbox Code Playgroud)

命令到rsync

 /usr/bin/rsync -ratlz --rsh="/usr/bin/sshpass -p password ssh -o StrictHostKeyChecking=no -l username" src_path  dest_path
Run Code Online (Sandbox Code Playgroud)

  • 如果您不能使用密钥文件,但又不想在命令中包含密码,则可以将其写入临时文件并包含如下:`sshpass -p \`cat .password \`ssh [... ]`.然后通过`chmod 400 .password`保护你的`.password`文件,以确保只有你的用户可以阅读它. (7认同)
  • 为了完整性,在ssh到远程服务器的情况下,`src_path`应该是server:path,如下所示:`server01.mydomain.local:/ path/to/folder` (5认同)
  • 我知道这不是最好的做法,但我有一个带有残缺的SSHD的NAS,它不会做基于密钥的身份验证.这个答案是我自动备份拼图的缺失部分.所以+1为最后的答案 (4认同)
  • @sneaky,如果您使用“sshfs”在本地挂载远程目标文件夹,您甚至可以在远程没有可用的“rsync”的情况下执行此操作。这不是最佳的,但它有效。 (2认同)

Mad*_*ist 44

对于脚本化的ssh登录,您应该使用没有密码的密钥文件.这显然是一种安全风险,请注意密钥文件本身是否足够安全.

设置无密码ssh访问的说明

  • 在命令文本中输入密码是不可能的? (8认同)
  • 不容易,ssh中没有选项 (3认同)
  • 尽管一开始这可能看起来很麻烦,但这是正确的答案。密码是敏感信息,不应明文存储或在程序中随意使用。这就是密钥文件的用途;只需了解[身份文件、`rsync -e` 和 `ssh -i`](https://unix.stackexchange.com/a/127355/45354)。 (3认同)

Dex*_*ter 24

通过将环境变量RSYNC_PASSWORD设置为要使用的密码或使用--password-file选项,可以避免rsync命令上的密码提示.

  • 仅在目标服务器运行rsync守护程序时才有效 (36认同)
  • 尽管除非使用rsync守护程序,否则这个答案无济于事,谷歌让我来到这里,这正是我所需要的.对我来说,我需要直接rsync到rsyncd,没有ssh.我刚刚使用了密码文件选项,并且完美地用于脚本. (4认同)

kai*_*jow 13

如果您不能使用公钥/私钥,您可以使用expect:

#!/usr/bin/expect
spawn rsync SRC DEST
expect "password:"
send "PASS\n"
expect eof
if [catch wait] {
    puts "rsync failed"
    exit 1
}
exit 0
Run Code Online (Sandbox Code Playgroud)

您需要将SRC和DEST替换为正常的rsync源和目标参数,并用您的密码替换PASS.只需确保此文件安全存储!

  • 我的`Red Hat Enterprise Linux Server 5.11版(Tikanga)`上没有这些命令 (3认同)

小智 8

我这样算:

sshpass -p "password" rsync -ae "ssh -p remote_port_ssh" /local_dir  remote_user@remote_host:/remote_dir
Run Code Online (Sandbox Code Playgroud)


Gui*_*ois 7

使用ssh密钥:

看看ssh-keygenssh-copy-id.

之后,您可以这样使用rsync:

rsync -a --stats --progress --delete /home/path server:path
Run Code Online (Sandbox Code Playgroud)

  • 如果将密钥放入.ssh目录并为其指定标准名称(通常为id_rsa / id_rsa.pub),则rsync会自动将其拾取。 (2认同)

xhu*_*dik 6

另一个有趣的可能性:

  1. 生成RSA或DSA密钥对(如前所述)
  2. 将公共密钥托管(如前所述)
  3. 跑:
rsync --partial --progress --rsh =“ ssh -i dsa_private_file” host_name @ host:/ home / me / d。

注意:-i dsa_private_file是您的RSA / DSA私钥

基本上,这种方法与@Mad Scientist描述的方法非常相似,但是您不必将私钥复制到〜/ .ssh。换句话说,它对于临时任务(一次无密码访问)很有用。


mar*_*rio 6

以下对我有用:

SSHPASS='myPassword'
/usr/bin/rsync -a -r -p -o -g --progress --modify-window=1 --exclude /folderOne -s -u --rsh="/usr/bin/sshpass -p $SSHPASS ssh -o StrictHostKeyChecking=no -l root"  source-path  myDomain:dest-path  >&2
Run Code Online (Sandbox Code Playgroud)

我必须安装 sshpass

  • -a 已经暗示了 -rlptgoD 并且一般来说,在这里减少命令行会更有帮助。 (2认同)

oem*_*905 6

当我第一次访问时,官方解决方案(和其他解决方案)是不完整的,所以几年后我回来发布了这个替代方法,以防其他人在这里打算使用公钥/私钥对:

从目标备份计算机执行此操作,将源备份拉至目标备份

rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' user@10.9.9.3:/home/user/Server/ /home/keith/Server/

从源计算机执行此操作,将备份从源发送到目标

rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' /home/user/Server/ user@10.9.9.3:/home/user/Server/

而且,如果您没有使用 ssh 的备用端口,请考虑下面更优雅的示例:

从目标备份计算机执行此操作,将源备份拉至目标备份:

sudo rsync -avi --delete user@10.9.9.3:/var/www/ /media/sdb1/backups/www/

从源计算机执行此操作,该计算机将备份从源发送到目标:

sudo rsync -avi --delete /media/sdb1/backups/www/ user@10.9.9.3:/var/www/

如果仍然提示您输入密码,则需要检查您的 ssh 配置,/etc/ssh/sshd_config并通过使用ssh-copy-id user@10.9.9.3.

(同样,这是使用没有密码的 ssh 密钥对作为替代方法,而不是通过文件传递密码。)