« 上一篇下一篇 »

用rsync复制时的shell-clean问题和自动登录问题

Rsync 增量、远程复制的一般用法:(从远程server复制到本机)


rsync -avzu -e "ssh -p 22222"  root@192.168.1.10:/src_on_remote  /dest_on_local_client

                             rsync -avzu  root@192.168.1.10:/src_on_remote  /dest_on_local_client

(前者是利用非标ssh端口加密传送;-a 所有属性、-u 只复制新增和更新了的文件)


但是实际使用中有几个问题


问题一,rsync客户端提示shell不clean,无法继续完成操作:

rsync 客户端登录服务端时,会以非终端类型(非交互式)的ssh登录验证,

此时如果 .profile .bashrc 有输出(通常都或多或少有些输出的呀),

有、可、能、导致客户端收到不能理解的字符串,从而验证失败,rsync客户端提示:shellclean

解决方法:

在服务器端的这几个脚本文件里增加判断:是否是交互式登录?

( 如果是交互式,则 $- 参数里含有字符i。可用正则表达式判断,注意方括号里的空格)

    if [[  $-  =~  'i'  ]]; then

    ...原先的内容...

    fi

如果是交互式登录,则输出原先的设置,

如果不是交互式登录,则不含 字符,直接退出.bashrc、.profile 等等

 

问题二,登录时需要输入密码,导致无法以crontab方式自动完成:

1. 通常 通过ssh执行rsync 需要密码)

通过ssh帐户(需要密码)执行rsync,将文件同步到远程服务器或从远端同步回本地机器。

但是,我们可以:

2. 使用ssh-keygen生成密匙

设置ssh,以便在执行ssh操作时不需要密码。

    $ ssh-keygen

    Enter passphrase (empty for no passphrase):

    Enter same passphrase again:

当提示输入密码时,只需输入两次回车键即可。

3.使用 ssh-copy-id 将本机的公匙传到远程主机

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

执行以上操作时,会提示输入远程主机帐户和密码,然后就会自动将公匙拷贝至远程目录。

4.无需输入远程主机密码以ssh来执行rsync

现在不需要密码就可以ssh连接到远程主机啦

执行一下rsync试试看,直接完成了操作,不用输入密码了。

rsync -avzu  root@192.168.1.10:/src_on_remote   /dest_on_local_client