分页: 1 / 1

[搭建linux下的工作环境]一.使用ssh与rsync进行数据同步与备份

发表于 : 2009-07-28 14:56
foolegg
我使用了一年半的ubuntu,已经完全把个人的计算机环境转移到linux下。
既然决定了使用linux工作,那么,搭建一个舒适,可靠的工作环境是相当有必要的。

首先要声明,我的工作和计算机基本没关系,哪怕不用计算机照样干活。但是我个人业余爱好比较多,喜欢搞搞编程,画画插画之类的,因此这个工作环境是纯业余配备,专业人士请勿bs.

声明完毕,抄家伙干活。


由于本人最近遭受了重大打击,一块主要硬盘损坏,导致多年积攒的资料,与一年多业余工作的心血尽付东流(谁来可怜下我……),因此这次搭建工作环境,首先考虑的,就是数据安全。

所以,我略过了基本工作环境的搭建,先来解决这个问题。

另外,对于需要在家中和办公室等多个环境工作的人来说,数据同步也需要一个方便快捷的解决方案。

所以,我设计了一个结合ssh与rsync,同时解决数据同步与备份的方案。别看ssh和rsync似乎是网管操的家伙,但经过小小的配置后,使用起来也就是鼠标点一下的事情:]

我的工作环境是这样的:

1.文件服务器,使用淘汰的破笔记本搭建,通过路由器端口映射,可以从公网访问。

2.台式机,新配的台机,是主要工作用机。

3.淘来的二手thinkpad x41t,我把它当做绘图板和移动工作用机。

三台计算下各有一个文件夹workspace,顾名思义,就是我保存我工作数据的地方,我要做的,就是在三台计算机间,方便快捷地同步这个文件夹。

下面,来说说怎么做。

首先,ubuntu默认安装了rsync和ssh-client,我唯一需要另外安装的,就是服务器上的ssh-server(怎么安装我就不说了)

安装完后,ssh-server就默认启动了,我们需要做的,是强化一下ssh的安全性。

我要做的,是使用密钥代替密码进行ssh登录。

密钥,好高深哦,用得着玩这个么?

我本来也认为没有这个必要,结果,文件服务器放在公网上13个小时后,日志里出现了11w条试图登录的记录,我承认,我被吓住了。

而且使用密钥可以省略输入密码这一步,使用起来也更方便一些。

下面跟我做 (以下所有命令,如无特别说明,都是在我台式机home目录下执行)

代码: 全选

cd .ssh #如果你没有这个文件夹,自己建一个
ssh-keygen -t rsa -C "mykey" # -t rsa 指定使用rsa加密方式, -C "mykey" 是密钥注释,可以省略
如果你是刚开机就做这一步,系统可能会提示你熵过小,也就是系统随机数生成池太小,这时你就继续用一会计算机,ls看看,cd来回几次,鼠标随便点点,或者该干嘛干吗去,过一会再来:]

回到正题,输入上面的命令后,屏幕显示

代码: 全选

Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #询问你创建的密钥文件名,直接回车就使用默认文件名id_rsa
Enter passphrase (empty for no passphrase): #解开密钥所用的密码,为了使用方便,我直接回车留空,对安全有更高要求的可以输入自己的密码
Enter same passphrase again: #再输一次密码
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
好了,等屏幕闪完,.ssh下就多了两个文件,id_rsa和id_rsa.pub,前者是私钥,后者是公钥,然后,使用ssh-copy-id将公钥上传到服务器上

代码: 全选

ssh-copy-id -i id_rsa.pub username@192.168.1.1 # -i id_rsa.pub 指定上传的公钥,user和192.168.1.1请更换成你自己的用户名和服务器ip
随后,你就可以使用私钥登录了

代码: 全选

ssh -i id_rsa username@192.168.1.1
如果你生成密钥的时候没有输入密码,这时你就不需要密码,可以直接登陆了:]

如果你对安全性有要求,就编辑一下服务器的/etc/ssh/sshd_config(注意,如果你是ssh到服务上编辑的话,这时是没有gedit给你用的,会vi的操vi,不会vi的推荐nano,操作比较大众化)
找到下面几行

代码: 全选

PermitRootLogin yes # 允许root登录,no掉吧
PasswordAuthentication yes # 允许使用密码登录
UsePAM yes # 如果密钥认证失败,允许再使用密码登录
关于后面两条,如果你需要在别人的机器上(没有私钥),从公网访问服务器,那就不要no,但个人不推荐这么做,很不安全。

这样,你的ssh就配置好了,但是,下面的路……不长了。(不许丢番茄!)

因为rsync不需要配置,你没看错,因为rsync可以使用ssh进行远程同步,即安全,也不需要起动rsync服务,更不需要配置,实在是方便的很

你只要创建这么两个脚本
workspace.push

代码: 全选

rsync -P -a -v -u -z --delete --rsh="ssh -i /home/username/.ssh/id_rsa -l username" ~/workspace/ 192.168.1.1:/home/username/workspace/
workspace.pull

代码: 全选

rsync -P -a -v -u  -z --delete --rsh="ssh -i /home/username/.ssh/id_rsa -l username" 192.168.1.1:/home/username/workspace/ ~/workspace/
解释一下
-P 你理解成断点续传就是了,如果这次同步失败,重试时候就可以从上次失败的地方继续来
-a 递归同步所有文件
-v 显示同步进程
-u 只同步更新的文件,比如你笔记本上更新了文件a,然后笔记本同步,服务器上a更新了,这时台式机的a还是旧的。如果你不加这个参数直接用台式机同步,就会用台式机上的旧a覆盖掉新a!加上这个参数,同步时,就不会产生这个问题。你说你笔记本和台式机都改动了a?请去挑选一个svn之类的版本控制软件…… (注1,重要!
-z 压缩传输
--delete 如果目标文件夹里存在源文件夹中没有的文件,删除之
--rsh="ssh -i /home/username/.ssh/id_rsa -l username" 使用ssh进行通讯,这里的前一个username是你客户机上的user,也就是你台式机上私钥的存放路径,后一个username就是你用服务器上的登录用户
随后,就是你同步的源,和目标,两个脚本就是把两者替换一下
第一个把本机文件夹同步到服务器上
第二个从服务器同步到本地

收工。

这样,我在台式机上工作完后,运行一下push脚本,就可以把工作同步备份到服务器。

下次用笔记本时候,运行一下pull,就把服务器上的更新同步下来了。收工后再push一下

我把这两个脚本放到了桌面上,从此以后,两岸三地来回交叉同步备份,只是弹指间事,方便快捷,安全可靠,当真是……(省略废话若干……)

如果你可以从公网访问服务器,那就更方便了,你可以考虑把你办公室的电脑加入这个系统,具体怎么把你的服务器架到公网上,我下次再说@ @...


现在我来发散一下,解决一下别的情况:

Q.我没有服务器,只有一台台式机,一台笔记本,该怎么办?
A.简单,把台式机当服务器来搞,一样操作。

Q.我只有一台电脑,怎么用u盘来同步?
A.你可以省略掉ssh的配置,直接在最后的脚本里,用你u盘的路径地址替换掉服务器地址(而且也不需要ssh了),假设你的u盘路径是/media/disk,脚本就会像这样

代码: 全选

rsync -P -a -v -u -z --delete ~/workspace/ /media/disk/workspace/

代码: 全选

rsync -P -a -v -u -z --delete /media/disk/workspace/ ~/workspace/
Q.我xxxx
A.请你的自己琢磨去……linux玩法很多,很自由,如果你有了更好的办法,希望你也来和大家分享一下:]


注1.由于,这个-u的更新功能,是基于比较文件修改时间来实现的,因此,要正确的使用这个功能,必须保证你工作用的机器间,时间是一致的!
这时你就需要ntp服务。安装完ntp之后,ntp服务自动运行
编辑/etc/ntp.conf
在里面加入
server ntp服务器地址
推荐两个
ntp.fudan.edu.cn,复旦的
time.buptnet.edu.cn,北邮的
如果你的网络连这两个不方便,请自己google一下
你也可以手动校正(ntp服务自动校正是渐进式的,需要花点时间)
sudo /etc/init.d/ntp stop 暂停ntp服务
sudo ntpdate ntp服务器地址
还有,这个对时服务是考虑时区的,如果你对下来发现时间有问题,请检查一下你的时区设置,不过该问题比较少见,遇到的话,请参考这里
http://hi.baidu.com/jessica520/blog/ite ... 8bf58.html

本文参考了以下文章,感谢他们的工作:]:
http://wuwd.blog.ubuntu.org.cn/2007/12/ ... nt-page-1/
http://hi.baidu.com/jessica520/blog/ite ... 8bf58.html
http://wuwd.blog.ubuntu.org.cn/2007/12/ ... %E7%94%A8/
http://solokem.blogbus.com/logs/1806468.html
《Ubuntu Server最佳方案》冷罡华(Hiweed)

Re: [搭建linux下的工作环境]一.使用ssh与rsync进行数据同步与备份

发表于 : 2009-12-12 23:36
coolpk
非常好的一个帖子,我按照楼主的方法也搭建了 openssh / rsync / ntp

下补充一些知识:

1、openssh中的 id_rsa和id_rsa.pub,前者是私钥,后者是公钥,私钥是用来存放在客户端本地的,公钥是用来存放在服务器端的,用ssh-copy-id命令拷贝到服务器上。

2、rsync 还可以用 rsync -Pauv ~/data ~/backup #用于把~/data目录下的所有内容同步到~/backup目录下,这2个目录都是在服务器上的本地,最好是2个不同的硬盘,用于更好的备份资料,这样,就算是一个硬盘坏了,还有一块硬盘也有一模一样的数据。

3、ntp服务一旦启动之后,会自动同步ntp服务器上的时间,一开始我也担心ntp服务多少时间间隔去同步一次时间,后来看了一些资料后发现自己的担心是多余的,ntp服务会有自己一套复杂的算法来保证同步时间的频率和时间的准确性。因此请不要使用crontab之类的定时服务,并用ntpdate命令来同步时间,如果这样,还需要ntp服务干嘛呢?看来我之前的担心是多余的。呵呵。

楼主的帖子这么好,这么长时间了,居然没有一个人表示感谢,实在有点说不过去,对不起楼主啊! :em02

Re: [搭建linux下的工作环境]一.使用ssh与rsync进行数据同步与备份

发表于 : 2009-12-15 16:23
lions
不错,收藏了。。。