ssh简单介绍:
#ssh有两种连接方式
基于口令的方式进行远程连接(通常CRT,xshell一台一台连接的方式),连接比较麻烦,连接不太安全
基于秘钥的方式进行远程连接(从一台管理服务器可以跳转到其他服务器),连接方便,连接比较安全
#基于秘钥连接原理
客户端(管理端) 执行命令创建秘钥对
客户端(管理端) 建立远程连接(口令),发送公钥信息
客户端(管理端) 再次建立远程连接
服务端(被管理端) 发送公钥质询信息(你要是能打开我的锁头)
客户端(管理端) 处理公钥质询信息(钥匙将锁头打开),将质询结果返回给服务端
服务端(被管理端) 接收到质询结果,建立好远程连接
#私钥和公钥作用:
利用私钥和公钥对数据信息进行加密处理
利用公钥和私钥进行用户身份认证
ssh基于秘钥连接部署:
#管理端创建秘钥对信息
ssh-keygen -t dsa -t参数表示type,类型为dsa
#管理端将公钥进行分发
创建秘钥对后,信息都保存在/root/.ssh/目录下,需要将里面的id_dsa.pub进行分发
ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.201
#172.16.1.217服务器上出现authorized_keys表示分发成功
#进行远程连接测试
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