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

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

如何在不提供任何密码的情况下在两个主机之间建立 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

相关内容