如何在不提供任何密码的情况下在两个主机之间设置rsync?
如何在不提供任何密码的情况下在两个主机之间设置rsync?
Answers:
以下是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/
生成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
要么
~/.ssh/authorized_keys
。创建文件(如果不存在)。确保文件模式为700。所有这些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 进行删除,因此仅传输相关文件。
仅当传输完成后,才删除旧版本。
瞧 成功。
标记用户的地址会更好
ssh-copy-id -i ~/.ssh/id_rsa.pub <user_in_server>@192.168.1.100
rsync -aAVx $(ssh-copy-id -i /home/myusername/.ssh/id_rsa.pub)
那么所有的excludes
和--delete
等。我还没有做出它尚未工作,但是这是我见过的最接近。据说你要做到这一点,即使你已经可以ssh
和scp
到目标服务器,rsync进程需要被运行,因为它不使用正常SFTP格式。我还在搜寻。