一、加快ssh服务访问速度
修改/etc/ssh/sshd_config文件
GSSAPIAuthentication yes–>no 关闭api验证
#UseDNS yes|no–>UseDNS no 去掉注释,启用DNS
重启sshd服务
CentOS6:
service sshd restart
CentOS7:
systemctl restart sshd
二、实验:实现基于key登录认证
在客户端生成一对钥匙:
ssh-keygen -t rsa
交互式输入:
默认路径
输入口令
发送公钥给服务器端:
ssh-copy-id -i /root/.ssh/id_rsa [email protected]
再次连接:
ssh [email protected] 不提示输入密码 ssh [email protected] ‘id’ 远程执行命令
利用基于key不需输入口令登录的特性,我们可小批量的执行一些任务:
先把需要执行任务的服务器IP放入一个文件中:
cat ip.txt 192.168.30.7 192.168.30.12 192.168.30.17 ……
编写一个脚本显示主机名:
vim hostname.sh hostname chmod +x hostname.sh
执行命令:
批量传送脚本 for ip in `cat ip.txt`;do scp -p f1.sh $ip:/data/;done 批量执行脚本显示主机名 for ip in `cat ip.txt`;do ssh $ip “/data/f1.sh”;done
可结合expect实现批量密钥登录方式
三、实验:实现多台机器间互相基于key登录认证
思路:多台机器公用一套钥匙
在A机器上生成一对密钥,并对自己执行ssh-copy-id命令
ssh-keygen ssh-copy-id A
将本机.ssh目录发送给其他所有机器
scp -rp /root/.ssh B:/root/ scp -rp /root/.ssh C:/root/
即可实现多台机器间互相基于key登录
当然,如果我们觉得私钥不加密不安全,我们还可以给私钥重新加密
重设私钥口令:
ssh-keygen -p
私钥加密后,每次连接都要求输入私钥口令,我们可采取代理托管方式省去输入口令这一环节:
注:代理托管重启后失效,需重新设置
启用代理托管口令
ssh-agent bash
ssh-add
四、实验:实现100台机器基于key登录验证
准备ip列表
先把需要执行任务的服务器IP放入一个文件中:
cat ip.txt 192.168.30.x 192.168.30.xx 192.168.30.xxx ……
编写将公钥推送到其他100台机器上的脚本
#!/bin/bash #安装expect包 rpm -q expect &> /dev/null || yum install expect -y #生成一对密钥,如需加密密钥可在-P之后写上密码 ssh-keygen -P “” -f “/root/.ssh/id_rsa” #服务器登录密码 password=centos while read ipaddr;do expect <<EOF set timeout 10 spawn ssh-copy-id $ipaddr expect { “yes/no” { send “yes\n”;exp_continue } “password” { send “$password\n” } } expect eof EOF done < ip.txt
运行脚本,将公钥推送到其他100台机器上
实现基于密钥验证无密码登录