一、ssh远程登录
-
SSH原理
C/S架构,监听端口tcp协议22号端口,所有数据加密传输,登录时认证方式有密码和秘钥对,它是telnet的替代软件。 -
linux系统中的openssh软件提供ssh的服务,支持ssh协议(远程登录),sftp(安全ftp),scp(远程拷贝数据)
-
ssh在linux系统一般默认已经安装,可直接使用:
-
linux的ssh客户端程序用法
- 远程登录:ssh 用户@服务端ip地址
- 远程拷贝:
scp 用户@服务端ip地址:目标目录/文件 本地目录
scp 本地文件 用户@服务端ip地址:目标目录/文件 - 远程ftp:
sftp 用户@服务端ip地址
-
注:若服务端更改了ssh协议的默认端口号,那么则使用ssh、scp命令式需要指定-p服务端的端口号
-
-
windows的客户端
- xmanager:收费的ssh远程管理套件,提供xftp、ssh、远程linux桌面功能
- CRT:提供远程ssh的管理
- putty:远程登录工具
- winscp:远程拷贝,linux和windows之间数据传输
-
优化ssh的服务端配置
vi /etc/ssh/sshd_config
Port 22 ##指明端口号
ListenAddress 192.168.100.101 ##指定监听的ip地址
PermitRootLogin no ##禁用root登陆
GSSAPIAuthentication no ##禁用GSSAPI的认证,使用密钥或密码认证,加快登陆速度
GSSAPICleanupCredentials no ##同上
UsePAM no ##禁用PAM认证,增加速度
UseDNS no ##禁止将IP逆向解析为主机名,加快解析速度
ClientAliveCountMax 3 ##探测3次客户端是否为空闲会话,↓3*10分钟后断开连接
ClientAliveInterval 10 ##空闲会话时长,每10分钟探测一次
AllowUsers admin ##明确指定登陆用户,多个用户用空格隔开
PubkeyAuthentication yes ##使用公钥认证,推荐使用安全高效!
PermitEmptyPasswords no ##不允许空密码登录,这个太危险啦。
PrintLastLog no ##不打印最后登陆信息,减少恶意登陆者获取的信息量,防止被恶意利用。
TCPKeepAlive yes ##保持长连接,加快连接速度,优化性能
-
ssh的秘钥对方式验证登录
- 秘钥对必须在客户端上生成,拷贝共要到服务端对应的目录下。注:客户端用户必须要有私钥,服务端用户必须要有公钥。
- 配置
ssh-keygen-t rsa #客户端创建秘钥对,一路回车,秘钥对存放在~/.ssh目录中,id_rsa为私钥,id_rsa.pub为公钥 ssh-copy-id root@ip地址 #上传公钥到目标主机中(必须使用22号端口),且导入到目标主机的用户家目录中,~/.ssh/authorized_keys文件中,如若上传失败,使用scp进行拷贝并导入:scp .ssh/id_rsa.pub 用户@目标主机ip地址 ssh root@ip地址 #验证不需要密码可直接进行登录 注:同一台客户端实现无密码登录服务器的多个用户时,只需将公钥上传至服务端的多个用户的家目录下即可;
二、Tcpwrapper访问控制
- 原理
通过libwrapper.so或者tcpd程序来实现对一些缺乏自身安全机制的服务进行保护,通过/etc/hosts.deny或/etc/hosts.allow两个文件来进行控制; - 匹配流程
先hosts.allow允许,后hosts.deny拒绝,如果没有明确拒绝,则允许; - 查看服务是否支持tcpwrapper
ldd $(which 服务主程序)|grep wrap #若有输出则代表支持,无输出则不支持
- 配置tcpwrapper
/etc/hosts.deny或/etc/hosts.allow的语法规则(允许优先)
程序: 客户端地址[选项]
程序:必须是支持tcpwrapper的程序,如sshd、vsftpd、telnet等,也可以使用ALL表示所有支持tcpwrapper的程序,多个服务以逗号隔开;
客户端地址:可以为ip、FQDN、域名、网段(192.168.)、ALL表示所有客户端地址,多个ip以逗号隔开、LOCAL代表本机地址;
常用的选项:spawn(调用其他命令);
- 实例
vi /etc/hosts.deny
sshd:192.168.100.1
vsftpd:ALL : spawn echo "1" >> /var/log/telnet.log
vi /etc/hosts.allow
vsftpd:all EXCEPT 192.168.100.102/255.255.255.0:deny
三、rsync远程同步
-
rsync(rsync快速异地备份工具)的功能
支持增量备份:可在不同主机之间同步数据;同步过程可以保持权限,连接且压缩传输,适合做镜像服务器; -
rsync的角色;
- 发起端:使用rsync的主机;
- 备份源:响应发起端的主机;
-
rsync同步方向:
- 上行同步
上传,数据在发起端,备份源提供目录,远程用户必须对备份源目录拥有写入权限,发起端登录的用户必须要对数据用户读取权限; - 下行同步
下载,数据灾备份院上,发起端提供目录,发起端登陆的用户必须对目录用户写入权限,远程用户必须对备份源的数据有读取权限;
- 上行同步
-
语法
rsync 选项 原始位置 目标位置
常用选项:-a 归档模式、保留文件权限、时间、链接、归属、特殊文件
-v 输出详细信息
-z 压缩传输
-H 保持硬链接
-r 递归模式,递归子文件及子文件夹
--delete 删除目标目录有,原始位置没有的文件
常用选项组合:-av -avzH --delete
-
本地复制文件语法:rsync -av /源文件 /目标目录/
注:当源文件为例/tmp时,那么将复制tmp整个目录及目录下的文件;
当源文件为例/tmp/时,那么将复制tmp目录下的所有文件,不包含tmp目录本身;
可同时复制多个文件,中间用空格隔开; -
清空本地目录语法
rsync -av --delete /空目录/ /目标目录/
注:删除目标目录有,空目录中没有的目标目录中的文件,空目录可以自己创建,则此就达到了删除的目的;
- 远程复制文件语法
上行同步:rsync -avzH 本地数据 用户@备份源ip地址:备份目录
下行同步:rsync -avzH 用户@备份源ip地址:备份目录 本地备份目录
四、rsync和inotify实时同步
- inotify作用:内核模块,监控文件和目录的变化,通过inotify-tools工具提供inotify-wait(持续监控)和inotify-watch(短期监控)两个模块进行监控;
- 优化内核参数:
max_queued_events #最大的时间列队
max_user_instances #最大的实例
max_user_watchs #最大的监控文件数量 -
案例:上行同步
- 安装inotify-tools,发起端192.168.100.101
[root@localhost ~]# tar zxvf inotify-tools-*.tar.gz -C /usr/src/ [root@localhost ~]# cd /usr/src/inotify-tools-*/ [root@localhost ~]# ./configure &&make &&make install [root@localhost ~]# ls /usr/local/bin/inotify*
- inotify的使用:发起端192.168.100.101
[root@localhost ~]# vi /etc/sysctl.conf fs.inotify.max_queued_events = 16384 ##监控事件队列数 fs.inotify.max_user_instances = 1024 ##监控实例数 fs.inotify.max_user_watches = 1048576 ##监控的文件数量 [root@localhost ~]# sysctl -p
- 测试inotify命令;发起端192.168.100.101
[root@localhost ~]# mkdir /root/data [root@localhost ~]# inotifywait -mrq -e modify,create,attrib,move,delete /root/data 选项注解:-m持续监控,r递归目录,q简化输出,-e指定监控事件:modify修改、create创建、attrib权限修改、move移动、delete删除;在其他终端操作文件,查看变化
- 编写脚本:发起端192.168.100.101
[root@localhost ~]# vi /root/rsync_inotify.sh ##实时同步脚本 #!/bin/bash RSYNC="rsync -avzH /root/data/ root@192.168.100.102:/tmp/ --delete" INT_CMD="inotifywait -mrq -e modify,create,move,delete,attrib /root/data/" $INT_CMD |while read DIRECOTRY EVENT FILE;do $RSYNC done [root@localhost ~]# chmod +x rsync_inotify.sh [root@localhost ~]# /root/rsync_inotify.sh & ##启动脚本
- 生成密钥对;发起端192.168.100.101
[root@localhost ~]# ssh-keygen -t rsa [root@localhost ~]# ssh-copy-id root@192.168.100.102
- 测试验证,发起端创建测试文件。发起端192.168.100.101
[root@localhost ~]# cd /root/data [root@localhost ~]# touch 1.txt
- 备份源验证文件是否同步;备份端192.168.100.102
[root@localhost ~]# ls /tmp/