转
http://blog.chinaunix.net/u1/56880/showart_1685376.html实验环境:
A:192.168.1.66(changzi.fedora)做为ssh服务器用来备份。操作系统为fedora10。
B:192.168.1.63(changzi.centos)做为ssh的客户端。操作系统为CentOS5.1。
实验目的:将客户端(B)中的内容同步到ssh服务器(A)中。
软件要求:Open SSH,rsync。
实验说明:
这个实验分为三个部份:ssh无密码登录;
rsync;
crontab。
把数据从B推到A中去。
实验步骤:
一,建立无密码的ssh
1,在ssh服务器端(A)建立新用户changzi,此用户用来进行与ssh客户端(B)建立ssh连接。
# useradd -u 100 -g 48 changzi
# passwd changzi
同样在ssh客户端(B)建立changzi用户
当然这一步可以直接使用root用户,出于安全考虑不使用root用户,而使用sudo受权。
2,为客户端(B)创建密钥
# su changzi
$ mkdir /home/changzi/.ssh
$ cd /home/changzi/.ssh
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/changzi/.ssh/id_rsa):(默认路径即可)
Enter passphrase (empty for no passphrase): (密钥保护,保留为空,否则使用ssh时将要求输入)
Enter same passphrase again: (密钥保护,保留为空,否则使用ssh时将要求输入)
Your identification has been saved in /home/changzi/.ssh/id_rsa.
Your public key has been saved in /home/changzi/.ssh/id_rsa.pub.
The key fingerprint is:
7a:04:16:36:ab:bf:21:94:5a:2f:ef:90:2a:d1:bc:fb changzi@changzi
$ ls
id_rsa id_rsa.pub
查看一下,后面的那个是密钥的公共部分
$ cat id_rsa.pub
ssh-dss AAAAB3NzaC1kc3MAAACBANpHI8d8ZdHYabfYnlPa9xyBkkfuYR7QSF8fcWvevBs8N6w+tiNXNnLc38cFxN5N4+JuDELb2qmbGTxSwg3+speF4XQA7MOz5P4IbK6/36NDwoMLh7v1yw8bOYBLt+vUOhfH5fnpnOaUpJk0uwKOytfpOI/WOl73OXjVXcmsc3nbAAAAFQDwPoXyvgbUNlIdud4qbU3C/AaLIQAAAIAKcKKJa4yN0J9jcOIdqoGu66uNr/QwzxGflhew8K2s9i7Y6QR4PBV7GbN9+UAVacim4abJfdHI3fepIj0c6Kl6rir7rjJ18t9HfHv/ooWPwfiB4FR4kqcWtgR6fP94NvlgBnXSaJ/Lc3Wj+YSrm82jF9IBdzmFjyrDkN9SwNeanwAAAIEA2jV3hvZjUV0oktQGIFRwu+MkrPx0S/ANd7fje2i3KomcNZg0RMEHOz34J/2Ie18oseL2x01N6SHFJqi89pRUs+YllVX2UGz8wV7RVGocT9swPS+HI1fo9aDtQ2KQFJ/MhfnVJGWGN5ZQhf4DXAkvZjRftKZSRf9AyXfVhCuTl6U= changzi@changzi
看有的书上写过可以在id_rsa.pub的第一行加入一些限制,如加入下面一行代码:
from="192.168.1.63",no-X11-forwarding,no-agent-forwarding,no-port-forwarding
只允许地址为192.168.1.63的用户,不允许X11或代理转发,不能使用ssh传输来传递发往ssh服务器上别一个UDP或IP端口的IP通信。
本实验尚未考虑到安全的一些配置。(未测试)
3,接下来将上密钥的公共部份(id_rsa.pub)复制到ssh服务器(A)中
这一步就省了,用什么方法复制都行,scp或者控制台的粘贴功能,再或者用U盘考过去。
放到目录中/home/changzi/.ssh/authorized_keys2
authorized_keys2就是id_rsa.pub更名。
$ cat authorized_keys2
ssh-dss AAAAB3NzaC1kc3MAAACBANpHI8d8ZdHYabfYnlPa9xyBkkfuYR7QSF8fcWvevBs8N6w+tiNXNnLc38cFxN5N4+JuDELb2qmbGTxSwg3+speF4XQA7MOz5P4IbK6/36NDwoMLh7v1yw8bOYBLt+vUOhfH5fnpnOaUpJk0uwKOytfpOI/WOl73OXjVXcmsc3nbAAAAFQDwPoXyvgbUNlIdud4qbU3C/AaLIQAAAIAKcKKJa4yN0J9jcOIdqoGu66uNr/QwzxGflhew8K2s9i7Y6QR4PBV7GbN9+UAVacim4abJfdHI3fepIj0c6Kl6rir7rjJ18t9HfHv/ooWPwfiB4FR4kqcWtgR6fP94NvlgBnXSaJ/Lc3Wj+YSrm82jF9IBdzmFjyrDkN9SwNeanwAAAIEA2jV3hvZjUV0oktQGIFRwu+MkrPx0S/ANd7fje2i3KomcNZg0RMEHOz34J/2Ie18oseL2x01N6SHFJqi89pRUs+YllVX2UGz8wV7RVGocT9swPS+HI1fo9aDtQ2KQFJ/MhfnVJGWGN5ZQhf4DXAkvZjRftKZSRf9AyXfVhCuTl6U= changzi@changzi
$ chmod 600 authorized_keys2
下面可以从客户端(B)进行连接至服务器
$ ssh 192.168.1.66
Last login: Sun Dec 7 20:30:15 2008 from changzi.centos
$
在服务器(A)端可以看一下日志
# tail secure
Dec 7 20:31:36 changzi sshd[5020]: Accepted publickey for changzi from 192.168.1.63 port 3593 ssh2
Dec 7 20:31:36 changzi sshd[5020]: pam_unix(sshd:session): session opened for user changzi by (uid=0)
两个机器的时间差一点,在实验中就不考虑这个了。
4,接下来可以直接复制数据了,客户端和服务器端均以changzi用户登录
在客户端(B)家目录中建立一个测试文件
$ echo "only test">file1
$ cat file1
only test
$ scp file1 192.168.1.66:/home/changzi/file2
file1 100% 10 0.0KB/s 00:00
$
在服务器端(A)可以看到
$ ls
file2
$ cat file2
only test
$
以上第一部分完毕。即建立起ssh无密码登录。
这一个过程如果用root进行的话很方便,包括后面进行传输数据时可以对所有文件进行备份而不用考虑权限。
总结:在客户端上产生的id_dsa和id_dsa.pub是一对密钥,只有用私钥id_dsa才能解开公钥id_dsa.pub。现在你把公钥存在服务器上,你登录服务器的时候,服务器会给提供经过公钥id_dsa.pub(其内容存在authorized_keys2里)加密的数据让你解密,你的机器上用id_dsa这把私钥,去解密,解开之后服务器放行。而别人的机器上没有id_dsa这个私钥,自然无法解密,从而无法无密码登录了。
当然,你要保证你机器上的私钥的安全。否则,如果别人取得了你的私钥,就好比别人取得了你房间的钥匙,然后就可以拿去开你家房门了。
二,rsync
这一步要在ssh客户端创建一些文件来,使用rsync程序和刚才建立的changzi用户将它们复制到ssh服务器上。
1,在客户端(B)建立测试文件
$ pwd
/home/changzi/docs
$ cd docs/
$ ls
Fedora-10-Installation-Configration-FAQ.pdf fhs-2.3.pdf
Fedora_10_Installation_Guide_Chinese.pdf
2,将客户端的srync服务启动
# chkconfig --list rsync
rsync off
# chkconfig rsync on
# chkconfig --list rsync
rsync on
3,进行复制,此步在客户端进行
$ rsync -avlR --delete -e ssh /home/changzi/docs/ 192.168.1.66:/home/changzi/backupdocs
building file list ... done
/home/
/home/changzi/
/home/changzi/docs/
/home/changzi/docs/Fedora-10-Installation-Configration-FAQ.pdf
/home/changzi/docs/Fedora_10_Installation_Guide_Chinese.pdf
/home/changzi/docs/fhs-2.3.pdf
sent 13121660 bytes received 126 bytes 8747857.33 bytes/sec
total size is 13119594 speedup is 1.00
$
现在已经将客户端的文件复制到了服务器端。
一些选项的意思
-v 进行细节操作
-a 复制源目录的所有文件和目录
-l 符号链接
-R 保留相对路径
--delete 删除在客户端上不再存在的备份服务器上的文件
-e ssh 使用ssh来进行传输
/home/changzi/docs/源目录(B)
192.168.1.66:/home/changzi/backupdocs目标目录(A)
还有一些参数
-z 压缩数据
--bwlimit 通过internet相连的话,用来指定每秒最大几K。
更多参数请man rsync
注意:将要进行备份的目录给予权限,因为我这里并不是用root进行的。
要进行备份的目录不止一个的话最好装备份的命令写入脚本。
这里如果没有设置防火墙相应的规则的话暂且因实验先停掉防火墙。
# service iptables stop
三,crontab
将上面的可执行脚本添加到cron中,即可自动化完成备份任务。
参考:Linux企业集群,[美] Karl Kopper.
google了一些相关资料。