如何在不提供任何密码的情况下在两个主机之间建立 rsync?
答案1
以下文章来自极客的东西:
1. 通过 ssh 测试 rsync(使用密码):
执行 rsync 以确保它要求输入远程服务器上的帐户密码,并成功将文件复制到远程服务器。
以下示例将本地文件夹同步
/home/test
到远程文件夹/backup/test
(在192.168.200.10
服务器上)。这应该会要求您输入远程服务器上的帐户密码。
rsync -avz -e ssh /home/test/ [email protected]:/backup/test/
2. ssh-keygen 生成密钥。
现在进行设置
ssh
,以便在执行 ssh 时不要求输入密码。ssh-keygen
在本地服务器上使用以生成公钥和私钥。$ ssh-keygen
输入密码(无密码则为空):
再次输入相同的密码:注意:当它要求您输入密码时,只需按回车键,不要在这里输入任何密码。
3. ssh-copy-id 将公钥复制到远程主机
使用
ssh-copy-id
, 将公钥复制到远程主机。ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
注意:以上命令将询问远程主机上的用户帐户密码,并自动将公钥复制到相应位置。如果 ssh-copy-id 对您不起作用,请使用我们之前讨论的方法设置 ssh 无密码登录。
4. 通过 ssh 执行无需密码的 rsync
现在,您应该能够无需输入密码就通过 ssh 连接到远程主机。
ssh [email protected]
再次执行 rsync,这次它不会要求您输入任何密码。
rsync -avz -e ssh /home/test/ [email protected]:/backup/test/
答案2
在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。
答案3
在 Ubuntu 16.04 LTS 上使用 2017 年 8 月的最新版本时,所有这些 rsync 建议都失败了。它们没有一个起作用。
它们还都存在一个共同的缺陷,就是需要在文件服务器上运行 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 来传输相关文件。
仅当传输完成时,我才会删除旧版本。
瞧!成功了。
答案4
在地址中标记用户会更好
ssh-copy-id -i ~/.ssh/id_rsa.pub <user_in_server>@192.168.1.100