ssh简单介绍:

#ssh有两种连接方式

基于口令的方式进行远程连接(通常CRT,xshell一台一台连接的方式),连接比较麻烦,连接不太安全

基于秘钥的方式进行远程连接(从一台管理服务器可以跳转到其他服务器),连接方便,连接比较安全

#基于秘钥连接原理

客户端(管理端)            执行命令创建秘钥对

客户端(管理端)            建立远程连接(口令),发送公钥信息

客户端(管理端)            再次建立远程连接

服务端(被管理端)         发送公钥质询信息(你要是能打开我的锁头)

客户端(管理端)            处理公钥质询信息(钥匙将锁头打开),将质询结果返回给服务端

服务端(被管理端)         接收到质询结果,建立好远程连接

#私钥和公钥作用:

利用私钥和公钥对数据信息进行加密处理

利用公钥和私钥进行用户身份认证


ssh基于秘钥连接部署:

#管理端创建秘钥对信息

ssh-keygen  -t  dsa                  -t参数表示type,类型为dsa

SSH秘钥分发_服务端

#管理端将公钥进行分发

创建秘钥对后,信息都保存在/root/.ssh/目录下,需要将里面的id_dsa.pub进行分发  

ssh-copy-id    -i   /root/.ssh/id_dsa.pub    root@172.16.1.201   

SSH秘钥分发_ssh秘钥分发_02

#172.16.1.217服务器上出现authorized_keys表示分发成功

SSH秘钥分发_服务器_03

#进行远程连接测试

ssh   172.16.1.217                  不用输入密码信息可以直接连接 


免交互式分发:

在上述过程中,期间有交互式的输入yes/no,输入系统密码,如果有大量机器需要批量分发,不可能一个一个点的,所有有了免交互式分发

如何免交互式分发?

需要借助一个ssh的工具:sshpass ,需要先下载工具 yum  -y  install  sshpass

#不需要交互输入密码信息

sshpass  -p123456   ssh-copy-id   -i /root/.ssh/id_dsa.pub  root@172.16.1.217            -p表示password

#不需要输入yes或no的确认信息(-o   StrictHostKeyChecking=no表示不用再问了,什么都同意,都是yes)

ssh-copy-id   -i  /root/.ssh/id_dsa.pub  root@172.16.1.217  "-o   StrictHostKeyChecking=no"

#将以上结合起来得出最终命令

sshpass   -p123456   ssh-copy-id  -i  /root/.ssh/id_dsa.pub  root@172.16.1.217  "-o  StrictHostKeyChecking=no"


脚本批量分发:

#需要提前创建秘钥对:ssh-keygen  -t  dsa

vim  fenfa_public_key.sh                 如下内容可以直接复制粘贴,注意变量和目录的变化

#!/bin/bash

#判断sshpass命令是否存在,不存在则yum下载

[ -f $(which sshpass) ]  && echo "sshpass command exists!" || yum install -y sshpass

#需要提前将准备好的IP地址放入/server/scripts/ip.txt文件中

for ip in $(cat /server/scripts/ip.txt)

do  

       {

       echo "===== host $ip pub-key  start  fenfa ====="

       sshpass   -p123456   ssh-copy-id   -i  /root/.ssh/id_dsa.pub  root@$ip  "-o                          StrictHostKeyChecking=no"  &>/dev/null

       [  $? -eq 0 ]  && echo "===== host $ip fenfa  succuss=====" || echo "$ip fenfa  failed " ;               continue  

       }&

done

wait