我正在尝试运行 rsync 来复制文件(Centos 5.2 -> Centos 5.2),我需要使用 nohup 来运行它,这样它才能在我断开 ssh 会话后运行。问题是我无法让 rsync 不提示输入密码,也无法让 nohup 很好地处理密码提示。
rsync -v -r -x --password-file=/root/password.txt /sourcedir/ [email protected]:/destdir
我尝试将 RSYNC_PASSWORD 变量设置为密码并使用--password-file创建一个包含密码的文件,但在这两种情况下我仍然会收到要求输入密码的提示。
我如何为 rsync 输入所需的密码才能使其顺利运行?
答案1
您可以使用公钥/私钥验证。
生成一对公钥/私钥
ssh-keygen -t rsa
然后将 dsa.pub 复制到目标主机主目录中的 .ssh/authorized_keys 文件中。
答案2
问题是 RSYNC_PASSWORD 和 --password-file 仅在直接连接到 rsyncd 服务器时适用,在使用远程 shell(如 ssh)生成 rsync 时不适用。根据要传输的数据,您可以选择设置无密码 ssh 密钥或开始使用 rsyncd 守护程序。
(请注意,如果您直接连接到 rsyncd,那么您的数据将以未加密的形式传输。)
答案3
或者,你可以使用 screen 代替 nohup。它的工作原理如下:
- 类型
screen
- 你将看到一个新的终端
- 启动将永远运行的命令,在你的情况下是 rsync 命令。
- 使用 断开与 screen 终端的连接
ctrl-a
,然后按 d - 您现在可以退出或做其他事情,您的屏幕终端将继续做您的事情
- 您可以通过键入重新连接到屏幕
screen -r
,这也可以在另一个 tty 或 ssh 连接或其他任何连接上工作。
答案4
只要通过 ssh 服务器进行,rsync 就会继续提示输入密码,最好的选择是为 ssh 添加公钥身份验证。因此,首先:
在源服务器上 -
$ ssh-keygen
$ Enter passphrase (empty for no passphrase):
$ Enter same passphrase again:
现在复制 ssh 公钥至
~/.ssh/id_rsa.pub
到远程主机:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
或者您也可以安装 ssh-pass 并运行:
SSHPASS='myPassword'
/usr/bin/rsync -a -r -p -o -g --progress -s -u --rsh="/usr/bin/sshpass -p $SSHPASS ssh -o StrictHostKeyChecking=no -l root" /sourcedir/ [email protected]:/destdir >&2