如何在UNIX / Linux上使用SSH设置不带密码的Rsync?


19

如何在不提供任何密码的情况下在两个主机之间设置rsync?

linux  ssh  rsync 


Maverick143提供了一个答案,但是这个问题实际上并不属于StackOverflow,因为它与编程无关。SuperUser.com应该会更相关。
马丁

Answers:


30

以下是The Geek Stuff的文章:

1.通过ssh测试rsync(使用密码):

执行rsync以确保它要求您在远程服务器上的帐户密码,然后将文件成功复制到远程服务器。

下面的示例将本地文件夹同步/home/test 到远程文件夹/backup/test(在192.168.200.10服务器上)。

这应该询问您在远程服务器上的帐户密码。

rsync -avz -e ssh /home/test/ user@192.168.200.10:/backup/test/

2. ssh-keygen生成密钥。

现在设置,ssh以便在执行ssh时不要求输入密码。ssh-keygen在本地服务器上使用以生成公钥和私钥。

$ ssh-keygen

输入密码(无密码时为空):

再次输入相同的密码:注意:当要求您输入密码时,只需按Enter键,并且在此处不输入任何密码。

3. ssh-copy-id将公钥复制到远程主机

使用ssh-copy-id,将公钥复制到远程主机。

ssh-copy-id -i ~/.ssh/id_rsa.pub user@192.168.200.10

注意:以上内容将询问远程主机上用户帐户的密码,并将公钥自动复制到适当的位置。如果ssh-copy-id对您不起作用,请使用我们前面讨论的方法来设置ssh密码(少登录)。

4.在没有密码的情况下通过ssh执行rsync

现在,您无需输入密码就可以ssh到远程主机。

ssh user@192.168.200.10

再次执行rsync,这一次不应要求您输入任何密码。

rsync -avz -e ssh /home/test/ user@192.168.200.10:/backup/test/


5
thegeekstuff.com/2011/07/rsync-over-ssh-without-password清除副本并粘贴,您应参考原始作者。
劳伦斯·谢罗内

如果需要使用其他用户,可以在执行ssh-copy-id时使用:ssh-copy-id -i〜/ .ssh / id_rsa.pub user@192.168.200.10
Finni McFinger

1

生成ServerA中的公钥

$ ssh-keygen
$ Enter passphrase (empty for no passphrase):
$ Enter same passphrase again:

公钥将生成并存储在

~/.ssh/id_rsa.pub

将公钥复制到远程主机

ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.100

要么

  • 打开id_rsa.pub,复制内容
  • 在rsync命令中使用同一用户登录到ServerB
  • 在ServerB中,将内容附加到~/.ssh/authorized_keys。创建文件(如果不存在)。确保文件模式为700。

0

所有这些rsync建议在2017年8月的Ubuntu 16.04 LTS上使用最新版本失败。他们中没有一个能工作。

它们还共享要求在文件服务器上运行rsync守护程序的缺陷。

此答案适用于通用Linux NAS

这里是步骤:
1)使用rsync,如下所示。(到您创建的/ mnt或/ media下的目录或挂载的设备上的目录。这无关紧要)2)如下所示,使用scp传输文件。FileZilla也将起作用。

所有这些(FileZilla除外)都可以在cron中运行而无需输入密码。


此设置效果很好。唯一需要密码的时间是设置初始ssh-copy-id来设置RSA无密码登录名时。然后,将其编程到FileZilla中一次。此后,每天都不会出现密码提示。这很容易。最好的部分是您可以使用rsync程序的所有好处。

此答案说明了如何在没有密码的情况下使用rsync本身。

而且,无需在两个系统上都安装另一个守护程序(rsync)。

如果您还没有这样做,请执行以下操作:

ssh-keygen
ssh-copy-id -i ~/.ssh/id_rse.pub NASserver

并用以下方法进行测试:

ssh NASserver

也许是这样的:

scp myfile myusername@NASserver:Documents

我有第二个硬盘驱动器,所以我使用rsync将启动驱动器复制到sdb1上的子目录(挂载在/ mnt下,并从rsync中排除)。

如果您没有物理硬盘驱动器,并且有足够的可用空间,则只需在/ mnt(或/ media)下创建一个子目录并使用它。

只要目录被排除,它是否在单独的驱动器上都没有关系。

这是备份脚本:

cls
echo "EMPTYING TRASH"
rm ~/.local.share/Trash/*
echo "====================================================================="
echo "         BEGINNING rsync from root to /mnt/full/sysbkp"
echo "====================================================================="
time sudo rsync -aAXv / --delete --ignore-errors --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /mnt/full/mysystem

在rsync之后使用脚本:

我总是在目标NAS服务器上创建一个新目录:/ mnt / fullsys / mysystem,因此仅传输相关文件。

ssh -e"mv /mnt/fullsys/mysystem mysystem.bak" myusername@NASserver
ssh -e"mkdir /mnt/fullsys/mysystem" myusername@NASserver
scp -r /mnt/full/mysystem myusername@NASserver:/mnt/fullsys/mysystem

瞧!这需要一段时间,但随后就完成了。

这两个脚本在cron中都可以正常工作。


替代方法是使用FileZilla手动将其发送给NAS服务器。

由于可能存在删除,因此我总是make a new directory and enter it通过目标1TB HDD上的FileZilla 进行删除,因此仅传输相关文件。

仅当传输完成后,才删除旧版本。

瞧 成功。


-1

标记用户的地址会更好

ssh-copy-id -i ~/.ssh/id_rsa.pub <user_in_server>@192.168.1.100

2
虽然这可以回答问题,但是如果您可以提供解释为什么会这样做会更好。
DavidPostill

还有语法。我相信这是作为一个命令替换是这样的: rsync -aAVx $(ssh-copy-id -i /home/myusername/.ssh/id_rsa.pub)那么所有的excludes--delete等。我还没有做出它尚未工作,但是这是我见过的最接近。据说你要做到这一点,即使你已经可以sshscp到目标服务器,rsync进程需要被运行,因为它不使用正常SFTP格式。我还在搜寻。
SDsolar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.