rdist命令同步文件或目录

1、概述
两台Unix机器之间复制文件的方法有很多种:

rcp         remote copy,需要注意权限问题;
scp         secure copy,需要注意权限问题;
rsync      一些OS缺省没有,可以通过rshd或者ssh(rsync -e ssh)作为传输通道;
rdist              类似于rsync,可以通过rshd或者ssh作为传输通道;
tar          使用tar和untar方式,可以通过rshd或者ssh作为传输通道;
本文讨论如何使用rdist同步文件或者目录。

 2、命令行方式格式
# rdist -Rc <filename> remotehost:<Destination>

-R                 将删除目标主机上其它的多于的文件。那些在目标主机目录中的文件,如果在源主机的目录中不存在,将被删除。-R参数用来同步两台主机的目录。
-c                 将使用<filename> remotehost:<filename>命令方式
filename       本地文件或者文件列表
remotehost   远程主机名(/etc/hosts或者DNS需要有对应的地址解析)
Destination   远程主机文件或者目录

3、文件拷贝例子
# rdist -c /home/support/rdistest.tar s70:/home/support/temp/rdistest.tar

rdist: Updating the host s70.
rdist: installing: /home/support/rdistest.tar
将文件/home/support/rdistest.tar 复制到一台名为s70 的远程主机,并且将该文件放在/home/support/temp/ 目录下

4、目录拷贝例子
# rdist -Rc /home/support/scripts s70:/home/support/scripts

将从源主机的/home/support/scripts目录同步到目的主机(s70)的/home/support/scripts目录

5、批量文件方式
# rdist -f distfile

 Distfile常用格式:
[Label:] SourceList -> DestinationList SubcommandList
HOSTS =( host1 host2 )           #定义主机列表(DestinationList)
FILES = ( /bin                           #定义更新的目录和文件(SourceList)
/usr/games                 
/usr/include/{*.h,{stand,sys,vax*,pascal,machine}/*.h}
/usr/man/man?
)

PartLabel:

${FILES} ->${HOSTS}           
       install -R
       except /usr/lib/${EXLIB}  ;
       except /usr/games/lib  ;
       special /usr/sbin/sendmail "/usr/sbin/sendmail.bz"  ;

常用SubCommand:
install Options [OptionalDestName];        这里的install选项替代了rdist中的命令选项,例如install -R和rdist -R的作用一样;
except NameList;                                   表示不同步NameList中的所有文件和目录;
special NameList "String";                       如果NameList文件被同步到远程主机后,在远程主机执行String对应的脚本;

例子
# rdist -R -f distfile
# cat diskfile
HOSTS =( host1 host2 )
FILES = ( /bin
/usr/games
/usr/include/{*.h,{stand,sys,vax*,pascal,machine}/*.h}
/usr/man/man?
)

Part1Label:

${FILES} ->${HOSTS}
       except /usr/lib/${EXLIB}  ;
       except /usr/games/lib  ;
       special /usr/sbin/sendmail "/usr/sbin/sendmail.bz"  ;

Label的作用
       If no name arguments are specified, rdist will update all of the files and directories listed in distfile. Otherwise, the argument is taken to be the name of a file to be updated or the label of a command to execute. If the label and file names conflict, it is assumed to be a label. These may be used together to update specific files using specific commands.

6、rdist的注意事项
需要在目的主机上在 /etc/hosts.equiv或者/.rhosts加对方主机的ip,在/etc/inetd.conf放开rshd服务.例如:

# cat /.rhosts
sourcehost    root
# grep rshd /etc/inetd.conf

shell   stream  tcp6    nowait  root    /usr/sbin/rshd         rshd

7、rdist使用sshd通道
通过-P的参数提供相关的传输通道,命令格式
# rdist -R -P /usr/bin/ssh -f distfile

       必须让接收方主机上的 sshd 信任你正在上面分发文件的主机。要做到这一点,可以为主控机生成一个纯文本的密钥,并保存每台接收方主机上 ~root/.ssh/authorized_keys 文件中的公共部分的副本。

在源主机上创建SSH2的DSA密钥对:
$ ssh-keygen -t dsa

Generating public/private dsa key pair.
Enter file in which to save the key (/home/support/.ssh/id_dsa):
Created directory '/home/support/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/support/.ssh/id_dsa.
Your public key has been saved in /home/support/.ssh/id_dsa.pub.

The key fingerprint is:

4f:c5:00:9a:bf:c7:67:97:87:8c:bf:3a:9c:a6:e7:53 support@hostname

       使用默认的文件路径~/.ssh/id_dsa.输入不同于你帐号密码的passphrase,再输入一遍以便确认.警告:当提示输入passphrase的时候,可以直接输入回车,不使用passphrase保护DSA密钥.但并不推荐这么做.无保护的DSA密钥对使得获得你帐号权限的入侵者能够进入到所有罗列在~/.ssh/id_dsa文件中的机器.公钥被写入到~/.ssh/id_dsa.pub文件.私钥被写入到~/.ssh/id_dsa文件.切记不要把私钥给任何人.

改变~/.ssh文件的权限
$ chmod 755 ~/.ssh

修改~/.ssh/authorized_keys文件
      将源主机文件~/.ssh/id_dsa.pub文件的内容拷贝到目标主机的~/.ssh/authorized_keys.如果目标主机上已经存在~/.ssh/authorized_keys文件,将~/.ssh/id_dsa.pub的内容追加到~/.ssh/authorized_keys.

修改目标主机上authorized_keys文件的权限
$ chmod 600 ~/.ssh/authorized_keys 

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓