centos通过ssh建立主机互信及ssh常用命令

  • 主节点IP:192.168.8.21 hostname:rancher
  • 从节点IP:192.168.8.25 hostname:ds1

下面将讲解三种建立互信的案例

  • root正常登录下的互信
  • root禁用登录且证书访问情况下建立互信

一、root正常登录下的互信

1.1 主从节点都生成证书

[root@rancher ~]$ $ ssh-keygen
[root@ds1 ~]$ $ ssh-keygen

1.2 用ssh-copy-id将公钥复制到远程机器中(方法一)

###rancher节点
[root@rancher ~]$ $ ssh-copy-id -i .ssh/id_rsa.pub  root@192.168.8.25
###ds1节点
[root@ds1 ~]$ $ ssh-copy-id -i .ssh/id_rsa.pub  root@192.168.8.21

1.2 用scp将公钥复制到远程机器中(方法二)

###rancher节点
[root@rancher ~]$ $ mv /root/.ssh/id_rsa.pub /root/.ssh/id_rsa_21.pub
[root@rancher ~]$ $ scp  id_rsa_21.pub root@192.168.8.25:/root/.ssh
###ds1节点
[root@ds1~]$ $ mv /root/.ssh/id_rsa.pub /root/.ssh/id_rsa_25.pub
[root@ds1 ~]$ $ scp  id_rsa_25.pub root@192.168.8.21:/root/.ssh
###rancher节点
[root@rancher ~]$ cd /root/.ssh/
[root@rancher.ssh]$ cat id_rsa_25.pub >> authorized_keys
[root@rancher .ssh]$ chmod 600 authorized_keys 
[root@rancher.ssh]$  chmod 700 ~/.ssh
[root@rancher .ssh]$ service sshd restart
###ds1节点
[root@ds1 ~]$ cd /root/.ssh/
[root@ds1 .ssh]$ cat id_rsa_21.pub >> authorized_keys
[root@ds1 .ssh]$ chmod 600 authorized_keys
[root@ds1 .ssh]$  chmod 700 ~/.ssh
[root@ds1 .ssh]$ service sshd restart

1.3 登录验证

###rancher节点
[root@rancher ~]$ ssh root@192.168.8.25
###ds1节点
[root@ds1 ~]$ ssh root@192.168.8.21

二、root禁用登录且证书访问情况下建立互信

因为root禁用了并且需要证书登录,如果使用ssh命令,则会出现如下报错

Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

2.1 两台服务器执行生成秘钥命令

[root@rancher ~]$ $ ssh-keygen
[root@ds1 ~]$ $ ssh-keygen

2.2 公钥文件分别通过sz和rz命令传到服务器中

2.3 添加证书互信和文件权限

###rancher节点
[fox@rancher ~]$ cd /root/.ssh/
[fox@rancher.ssh]$ cat id_rsa_25.pub >> authorized_keys
[fox@rancher .ssh]$ chmod 600 authorized_keys 
[fox@rancher.ssh]$  chmod 700 ~/.ssh
[fox@rancher .ssh]$ service sshd restart
###ds1节点
[fox@ds1 ~]$ cd /root/.ssh/
[fox@ds1 .ssh]$ cat id_rsa_21.pub >> authorized_keys
[fox@ds1 .ssh]$ chmod 600 authorized_keys
[fox@ds1 .ssh]$  chmod 700 ~/.ssh
[fox@ds1 .ssh]$ service sshd restart

2.4 远程登录认证

###rancher节点
[root@rancher ~]$ ssh root@192.168.8.25
###ds1节点
[root@ds1 ~]$ ssh root@192.168.8.21

三、rsync定时备份命令

Rsync参考地址

3.1 rsync安装

shell>yum install -y rsync

3.2 rsync的基本用法

3.2.1 -r 递归

##首先我们创建两个目录和两个文件
shell>mkdir /data/app/jdk
shell>mkdir /data/app/nginx
shell>echo "jdk1" > /data/app/jdk/jdk.json
shell>echo "nginx1" > /data/app/nginx/nginx.json
###执行递归备份
shell>rsync -r /data/app /tmp
###查看结果
[root@rancher ~]# cat /tmp/app/jdk/jdk.json 
jdk1
###此时我们把nginx.json重新赋值
[root@rancher ~]# echo "nginx2" > /data/app/nginx/nginx.json
[root@rancher ~]# cat /data/app/nginx/nginx.json 
nginx2
###执行递归备份
shell>rsync -r /data/app /tmp
###查看结果,同步成功
[root@rancher ~]# cat /tmp/app/nginx/nginx.json 
nginx2

3.2.2 -a 递归且同步元信息(修改时间、权限)

shell>rsync -a /data/app /tmp

3.2.3 -n 模拟执行

shell>rsync -anv /data/app /tmp

3.2.4 --delete 删除只存在于目标目录、不存在于源目录的文件

shell>rsync -av --delete /data/app /tmp

3.2.5 –exclude 排除文件

###排除尾缀txt的文件
shell>rsync -av --exclude='*.txt' source/ destination
###排序某个目录下的所有文件
shell>rsync -av --exclude 'dir1/*' source/ destination
###多个排除模式
shell>$ rsync -av --exclude 'file1.txt' --exclude 'dir1/*' source/ destination
shell> $ rsync -av --exclude={'file1.txt','dir1/*'} source/ destination
###排除指定文件内容的规则,在文件中每一个模式一行
shell>rsync -av --exclude-from='exclude-file.txt' source/ destination

3.2.6 --include 必须同步文件

往往与--exclude结合使用

shell>rsync -av --include="*.txt" --exclude='*' source/ destination

3.3 远程同步

####从本地同步到服务器
rsync -av -e ssh source/ user@remote_host:/destination
###从服务器同步到本地
rsync -av -e ssh user@remote_host:/destination source/ 

3.4 增量备份

3.4.1 增量备份案例

###在ds1节点创建几个文件夹
[fox@ds1 tmp]$ mkdir -p /tmp/app/nginx /tmp/app/jdk /tmp/app/apache
###全量同步
[fox@ds1 tmp]$ rsync -av /tmp/app fox@192.168.8.21:/tmp
###在ds1和rancher节点分别创建2个不同的文件
[fox@ds1 tmp]$ mkdir /tmp/app/jdk_ds1 /tmp/app/apache_ds1
###此时我们以ds1节点,使用增量备份同步,rancher节点创建的内容需要删除
###$ rsync -a --delete --link-dest /compare/path /source/path /target/path

3.4.2 增量备份脚本

#!/bin/bash

# A script to perform incremental backups using rsync

set -o errexit
set -o nounset
set -o pipefail

readonly SOURCE_DIR="fox@192.168.8.21:/tmp"
readonly BACKUP_DIR="/data/app/backups"
readonly DATETIME="$(date '+%Y-%m-%d_%H:%M:%S')"
readonly BACKUP_PATH="${BACKUP_DIR}/${DATETIME}"
readonly LATEST_LINK="${BACKUP_DIR}/latest"

mkdir -p "${BACKUP_DIR}"

rsync -av --delete \
  --link-dest "${LATEST_LINK}" \
  "${SOURCE_DIR}/" \
  --exclude=".*" \
  "${BACKUP_PATH}"

rm -rf "${LATEST_LINK}"
ln -s "${BACKUP_PATH}" "${LATEST_LINK}"

3.4.3 定时删除

查看命令及定期删除参考文档

shell>find /tmp  -name "*.txt" -mtime +3 -exec rm -rfv {} \;
shell>rm -rf $(find /tmp  -name "*.txt" -mtime +3 )