最近应公司要求,需要对文件数据进行远程传输与备份操作,特此写了一篇文章记录下了关于ssh、scp以及rsync的应用配置全过程,可能过程太过罗嗦,但主要就是想在不遗漏每个过程的情况下对此进行阐述,希望大家能够体谅。当然类似的文章还有很多,本文仅以个人的名义来写的,不喜勿喷!如果文章中有什么错误的地方还请各位大神多多指点!万分感谢!
一、ssh在文件共享里面的应用
这个ssh可不仅仅是一个远程登录的一个服务,其实呢!它包括了几个组件:ssh(远程登录)、sftp(文件共享【类似FTP】)、scp(文件共享【类似cp拷贝】)。所以大家在听到ssh的时候可千万不要认为这个软件包在用的时候只能实现远程登录,别的什么事情都干不了,实际上不是这样的。希望大家明白!
首先我们先来看一下SSH远程登录的事情,我们正常使用的客户端的远程登录管理工具(如:SecureCRT、Xshell等..)来做登录管理的控制,但是,
如果我们想从一台Linux服务器登录到另一台Linux服务器的话,我们应该怎么处理?
我们可以使用ssh命令【ssh远程登录:ssh 用户名@远程主机IP地址】进行登录,但是我们登录的时候要注意以下规则:
a.不能使用空密码登录
b.不能使用root用户身份登录(具体根据centos版本来,目前centos版本中多数都是默认是允许root用户登录,这里只是作为例外考虑,为了安全问题,一般我们建议搭建不要使用root用户登录,因此建议搭建使用root用户去授权普通用户去进行日常操作)
下面来看一下ssh命令具体的使用方式:
ssh远程登录:ssh 用户名@远程主机IP地址
常用选项:
-2 强制使用第二代ssh协议(ssh发展的两个版本,这里建议大家使用ssh2,因为它的安全性会更高点,我这里为了便于演示,有些可能就直接默认登录,在此声明一下,我们现在使用的ssh版本都是这个openssh它,它同时支持了ssh1和ssh2)
-p 端口号
例如:
ssh -2 formal@192.168.1.18
案例:
我这边准备两台Centos服务器,信息如下:
机器一:192.168.1.17 已存在普通用户:formal
机器二:192.168.1.18 已存在普通用户:formal
例如我这里从17服务器远程登录到18服务器:
--登录17服务器,切换为普通用户,如图1:
su - formal


--使用ssh命令从17服务器远程登录到18服务器,提示你是否继续连接登录,直接输入yes即可,如图2:
ssh formal@192.168.1.18


由于我们没有对formal用户设置密码,因此我们直接回车.就会发现,请求被拒绝。这是因为登录的时候centos系统默认是不能使用空密码登录。因此,我们在这里将两台服务器的普通用户同时设置一个密码,以备后面使用,如图3:


//设置密码(这里要特殊说明一下,使用普通用户直接设置密码的时候,可以直接使用passwd命令进行设置,但是要求密码不能过于简短与简单,要包含特殊字符,否则不让你设置成功。如果使用root用户设置密码,可以使用passwd 用户名,进行设置,使用root用户设置密码时候可以使用简单的密码。为了便于测试,我这里直接使用root用户设置密码.),这里密码为:formal
passwd formal
//删除密码(root用户删除方式:passwd -d formal;普通用户删除方式:passwd -d此处要说明一下,用root用户为普通用户创建的密码只能用root用户删除)

--好了,既然用户密码我们已经设置好了,那就继续登录试试,输入密码,登录成功。如图4:
ssh formal@192.168.1.18


--接下来为大家介绍一下ssh的常用配置。这里主要为大家介绍一下怎么禁止root用户登录,还有就是怎么样改变ssh的端口号。
--使用root用户,编辑18服务器的/etc/ssh/sshd_config文件,我们可以看到PermitRootLogin yes这句话是注释掉的,默认情况下都是可以使用root用户登录的因此这句话注释掉与不注释掉都是可以使用root用户登录的.如图5,5-1:
ssh root@192.168.1.18


如果我们要想阻止root用户登录,只要将PermitRootLogin yes这句话中的yes改为no表示不允许使用root用户登录即可,改完后后我们重启ssh服务,然后再17服务器上使用root用户登录测试,即可发现18服务器禁止了我们使用root用户远程登录服务器,如图6,6-1:
vi /etc/ssh/sshd_config
service sshd restart


ssh root@192.168.1.18

--接下来我们看一下怎么改变ssh登录的端口号。
正常情况,我们使用ssh命令远程登录另一台服务器的时候都会使用默认的22端口登录,如果我们想改变登录的端口号,我们可以更改/etc/ssh/sshd_config文件中Port 22属性,将22改为你要修改登录的端口号,例如我这里将18服务器登录端口改为10022,重启ssh服务登录,在17服务器登录18服务器,这时候登录指令需要我们加上-p来指定登录端口号。测试结果,如图7-1,7-2,7-3:
ssh -p10022 root@192.168.1.18


关于ssh远程登录,就说这些,对于sftp一般用的少,这里就不再多说,有兴趣的童鞋自己可以找度娘查查相关资料。
紧接着,我们来介绍一下scp的应用。说起scp的应用,其实很简单,正常我们在应用的过程中,我们可以非常方便的将本机文件拷贝到远程主机,当然也可以将远程主机上的文件拷贝到本机。关于scp的使用如下:
本机文件拷贝到远程主机
scp 本地文件 用户名@远程主机IP地址:远程主机目标目录
scp -r 本地目录 用户名@远程主机IP地址:远程主机目标目录
远程主机文件拷贝到本机
scp 用户名@远程主机IP地址:远程主机文件 本地目录
scp -r 用户名@远程主机IP地址:远程主机目录 本地目录
常用选项:
-p(小写) 保持原有文件属性(把一个文件备份到另一个地方的时候相当于相当于创建一个目录,例如时间就会改变,如果我们想让相关属性不便加这个属性即可)
-r 复制目录
-P(大写) 指定端口
注意:大小写是为了区分属性与端口冲突
提醒:我们再使用scp命令的时候,必须有个有效的用户身份,而且这个用户必须是远程主机目标目录有写权限的,例如:你不能使用xushouwei用户拷贝文件到/root目录下。所以一般来讲,都是写到对用户有写权限的目录。这里需要注意一下。
举个例子:
scp /home/formal/xushouwei.properties formal@192.168.1.18:/root/ 使用该命令拷贝,将会提示Permission denied(权限拒绝),如图8:


--从17服务器拷贝文件到18服务器(上传),如图9:
scp /home/formal/xushouwei.properties formal@192.168.1.18:/home/formal


拷贝前后18服务器变化,如图9-1:


--从17服务器拷贝目录到18服务器(上传),如图10:
scp -r /home/formal/com/ formal@192.168.1.18:/home/formal


拷贝前后18服务器变化,如图10-1:


--从18服务器拷贝文件到17服务器(下载),如图11:
scp formal@192.168.1.18:/home/formal/xushouwei.properties /home/formal/


--从18服务器拷贝目录到17服务器(下载),如图12:
scp -r formal@192.168.1.18:/home/formal/com/ /home/formal/


//所以这个scp拷贝,使用起来非常的简单,是我们比较推荐使用的一种方式,而且它正果文件传输的过程中数据式加密传输的,要比其他传输方式安全性要更高一些。在使用上也比较方便..因此我们可以方便的周期性的从远程主机到本地以及从本地到远程主机实现备份与拷贝,但这里有一个问题,就是执行命令的时候要执行密码,那执行密码的话就没办法实现自动化的备份与拷贝任务,我们之后就会为大家介绍通过信任主机的建立来实现自动化的备份.
--对称秘钥加密(例如:我们家里使用的"锁")如图13:
特点:加密与解密使用统一秘钥
优势:速度快
缺点:秘钥本身需要交换


--非对称秘钥加密(公开密钥加密)如图14:
特点:使用时候生成两个秘钥,一个公开存放,为公钥;一个私人持有,为私钥;用户用其中一个秘钥加密的数据只有用另一个秘钥才能解密.
用公钥加密,私钥解密->加密文件
用私钥加密,公钥解密->数字签名
优势:安全性好
缺点:速度慢


//我们的信任主机就是采用非对称秘钥加密的原理来实现的,当前我们从一台主机登录到另外一台主机重要输入密码,这太麻烦了,能不能想一个办法来告诉对方主机,只要是我这个用户登录你就建立一个信任关系,不需要密码,那么这要有一个方法,一台主机吧公钥生成,发给另外一台主机,另外一台主机把公钥判断为可认证的公钥,这个时候使用ssh登录的时候就不需要密码了,看一下原理15图:


--既然原理都已经说了,我们就在实战操作一下。。。
我这里定义:主机一的ip为192.168.1.17,用户为非root用户formal,主机二的ip为192.168.1.18,用户为非root用户formal。
--在17服务器上使用formal用户生成秘钥对:
ssh-keygen -t rsa
这时候就会提示你建议一个公钥和一个私钥然后还会告诉你这个秘钥保存的位置,默认位置是放在:/home/formal/.ssh/目录下.紧接着回车就会提示你认证,输入密码认证,这个设置我这里直接回车,接着又会提示你输入密码认证,继续回车即可。整个过程如图16,其中Your public key has been saved in /home/formal/.ssh/id_rsa.pub.这句话就是告诉你你刚才使用命令生成的公钥位置:


--紧接车我们把刚才生成的公钥拷贝到主机二上的/home/formal目录下。输入如下命令并输入密码即可,如图17:
scp /home/formal/.ssh/id_rsa.pub formal@192.168.1.18:/home/formal/


//你看现在我们执行拷贝或者登录还是需要密码的,我们的目的就是让他不需要密码,接下来我们就需要对主机二进行操作了.
--登录主机二并切换到formal用户,如图18:我们可以看到在/home/formal目录下有个id_rsa


//我们可以看到在/home/formal目录下有个id_rsa.pub文件,对了,这个就是我们刚才使用主机一生成并拷贝过来的秘钥。我们所要进行的操作就是把这个公钥文件处理一下生成一个信任秘钥文件。因此我们需要在主机二上进行如下几步操作:
这里需要提醒一下,每个用户的ssh信息都保存在自己宿主目录的.ssh目录里面,但这个目录并不是每个系统都会自动创建(没有的话需要手工进行创建,使用命令:mkdir .ssh),但是在centos6.7系统下这个目录默认是隐藏的,我们可以使用ls -la查看宿主目录内容,如图19所示:
ls -la


--把当前目录下的id_rsa.pub文件输出重新生成到.ssh目录下,创建一个新的认证文件,这个认证文件名称为:authorized_key(固定),生成并查看,如图20:
cat id_rsa.pub >> .ssh/authorized_keys
ls -l .ssh/


//然后再当前用户的宿主目录的.ssh目录下我们就生成了这个认证文件建立了一个信任关系。其实这个原理非常的简单,就上我们刚才讲的非对称秘钥的数字签名一样,换句话说你想让别人知道这是你登录的,对你建立信任关系,怎么建立信任关系?首先你得把你的公钥给人家,人家用公钥去验证是不是你登录的,是你登录的话就让你登录,对你建立信任建立数字签名。正常在很多linux版本中走到这个步骤就结束了。但是在新的linux中对权限要求非常严格,它要求在你的用户宿主目录下的.ssh目录下的文件必须是700,也就是说只有这个普通用户才有权限,其他用户没有权限而且要求这个权限控制文件的权限必须是600,也就是说我们在使用的过程中只有这个formal用户有读写权限。这里要提醒一下,这个权限一定要改,因为在新版linux中对权限要求非常严格。因此我们需要执行如下命令进行操作,如图21所示:
chmod 600 .ssh/authorized_keys
chmod 700 .ssh


--至此,我们整个信任主机的建立过程就改完了。现在我们测试一下对不对。
--从主机一远程登录到远程主机二(这个过程不在提示你输入密码),如图:22:
ssh formal@192.168.1.18


--从主机一拷贝文件到远程主机二(这个过程不在提示你输入密码),如图:23:
scp xushouwei.properties formal@192.168.1.18:/home/formal/


注意:整个过程需要特别注意信任关系的认证原理用户对应关系(一个用户建立一个信任主机关系),这里需要大家特别注意一下【完全备份】。
至此,有没有人会问有没有增量备份?因为很多时候,我们在做完全备份的时候备份的时间可能会比较长,备份的时候占用的系统时间和资源都会比较不理想,那么这个时候我们选择增量备份是比较快的,直接把一个改动的文件做一个更新。这里面我推荐大家使用另外一个工具【rsync】,如果你想远程同步的话就要使用该工具,下面我对该工具的特点简要的为大家介绍一下:
a.方便增量备份实现
b.可镜像保存整个目录树和文件系统
c.保持文件的权限、时间、软硬链接等
d.文件传输效率高
e.可以使用ssh加密通道
可能,很多人都会觉得看一些关于rsync资料的时候就是特别的复杂,其实我们使用最常用的方法就行了,不用把它想象的多么复杂,我这里就把它最常用的应用给大家走一遍。rsync这个服务默认在linux系统里面都是使用xinetd(关于xinetd的知识请大家自行问度娘)来进行托管的,而且在所有的linux里面默认都是安装的,所以我们首先就要启动这个服务。
--查看rsync文件位置,如图24:
ls /etc/xinetd.d/


--使用之前首先判断rsync这个软件有么有安装,正常情况下所有的linux默认都是安装的,如果没有安装的话自行下载并安装(
下载:wget http://pkgs.repoforge.org/rsync/rsync-3.1.1-1.el6.rfx.x86_64.rpm 安装:rpm -ivh rsync-3.1.1-1.el6.rfx.x86_64.rpm或者使用yum安装:yum install -y rsync xinetd)一下即可,如图25:
rpm -q rsync


--使用root用户修改/etc/xinetd.d/rsync配置文件,将disable属性设置为no,重启service xinetd restart启动rsync服务.如图26-1,26-2:
vi /etc/xinetd.d/rsync


service xinetd restart


//至此,关于rsync的配置到这个步骤就可以了。那么接下来怎么样来使用rsync?
案例情景:每天凌晨两点做一下备份将18(主机二)上的宿主目录(/home/formal/)目录下的com目录备份到17(主机一)上的宿主目录(/home/formal/)目录下。如图27:
使用非root用户formal用户进行操作:
crontab -e
0 2 * * * /usr/bin/rsync -arHz --progress --delete formal@192.168.1.18:/home/formal/com /home/formal


--当然我们为了操作方便可以直接进行手动备份,手动备份之前我们先看一下主机一宿主目录下的所有目录文件.如图28:
ll


--使用如下命令进行手动备份文件操作,如图29:


--再次查看主机一宿主目录下的所有目录文件,这时候主机一宿主目录下多了个com目录.如图30:
ll


//好了,到现在为止,我们已经学会了使用rsync工具进行文件的增量备份。下面我们对备份进行分析一下。如图31:

至此,rsync的应用就讲到这里...

Centos下关于ssh、scp与rsync设置与应用的更多相关文章

  1. ios – Xcode警告:“没有处理文件的规则”和“找不到目录”

    重命名我的项目文件夹后,我收到以下错误消息:什么可能出错?解决方法关于第一个警告,您可以在项目设置中的“构建阶段”中检查XCode,即头文件不会出现在“编译源”列表中.

  2. 你如何将xcode项目转换为cocoapod?

    我有一段代码,我发现我在多个不同的项目中重复使用,所以我想把它变成一个cocoapod并使用私人cocoapod仓库.我的问题是如何将xcode项目设置为cocoapod?它应该是一个静态库还是一个带有appdelegate的空“项目”?

  3. ios – 如何将文件添加到主包的/ Library / Sounds目录中?

    根据Apple’sdocumentation,/Library/Sounds中的声音文件将在尝试播放声音时由系统搜索.如何将声音文件添加到此文件夹?适用于iOS的正确文档应为here总之,您只需将声音文件作为应用程序包的非本地化资源添加到项目中.

  4. ios – 资产目录与文件夹参考:何时使用其中一个?

    我可以将文件放入Assets.xcassets,或者我可以将文件放入文件夹引用.我何时会选择一个而不是另一个?

  5. ios – 从icloud备份中限制sqlite-wal和sqlite-shm

    我是第一次使用coredata,我必须从文档目录中的iCloud备份限制sqlitedb文件,我使用下面的代码完成了它//阻止iCloud备份文档目录文件夹现在我不明白的是,我们还需要从icloud备份中限制sqlite-wal和sqlite-shm文件,如果是,那么如何从icloud备份限制sqlite-wal和sqlite-shm文件我想要一个解决方案,而无需从文档目录文件夹中更改sqlitedb位置…

  6. iOS:如何从文档目录中删除具有特定扩展名的所有现有文件?

    当我更新我的iOS应用程序时,我想删除Documents目录中的任何现有sqlite数据库.现在,在应用程序更新时,我将数据库从软件包复制到文档目录,并通过附加软件包版本来命名它.因此,在更新时,我还想删除可能存在的任何旧版本.我只是希望能够删除所有sqlite文件,而无需循环浏览并查找以前版本的文件.是否有任何方法可以对removeFileAtPath:方法进行通配符?解决方法那么,你想要删除所有*.sqlite文件?

  7. osx – 无法创建目录/ var / teamsserver

    OpenSSH_6.2p2,OSSLShim0.9.8r8Dec2011debug1:Readingconfigurationdata/etc/ssh_configdebug1:/etc/ssh_configline20:Applyingoptionsfor*debug1:Connectingto1.2.3.4[1.2.3.4]portPORT.debug1:Connectionestablished.Couldnotcreatedirectory‘/var/teamsserver/.ssh’.debug

  8. ios – Xcode Server 4.0 git从构建触发脚本推送

    我为一个托管在github上的项目安装了一个XcodeBot.我按照步骤和设置机器人来使用我现有的SSH密钥.验证成功,项目结算和建立.然后,我在预触发器操作中添加了一个shell脚本,它增加了plist中的版本,将其标记,并将该更改提交到github.但是当我尝试从shell脚本执行gitpush时,我得到:–推送到git@github.com:spex-app/spex-ios.git权限被拒

  9. .dylib在Debug中链接,在XCode中找不到适用于iPhone的版本

    所以我已经将libxml2.2.dylib库包含在我的iPhoneXCode项目中,以创建一些Xml和XPath解析实用程序.当我编译并运行在模拟器和设备的调试模式时,我没有问题,但是,当我切换到发布模式我得到…

  10. ios – 从文件目录加载UIImage

    我正在尝试从文件目录加载一个UIImage,并将其设置为UIImageView,如下所示:但是,每当我尝试以上,图像从不加载.该图像在Documents/MyAppCustomDirectory/school.png中.以上是否正确从该目录加载?我也尝试了其他几个:UIImageimageWithContentsOfFile,以及基于SO响应的其他方法.解决方法要获取您应该使用的文档目录:我不太清

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部