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