免交互sshpass
1.安装sshpass
[root@m01 ~]# yum install -y sshpass
2.使用sshpass命令
[root@m01 ~]# sshpass -p 1 ssh root@10.0.0.7
[root@m01 ~]# sshpass -p 1 ssh -o stricthostkeychecking=no root@10.0.0.7
Warning: Permanently added '10.0.0.7' (ECDSA) to the list of known hosts.
Last login: Thu Dec 5 12:13:08 2019 from 10.0.0.61
[root@web01 ~]#
[root@m01 ~]# sshpass -p 123456 ssh root@10.0.0.51
[option]
-p:指定密码
-f:从文件中取密码
-e:从环境变量中取密码
-P:设置密码提示
跳板机
1.创建秘钥对
ssh-keygen
选项:
[-P old_passphrase] [-N new_passphrase] [-f keyfile]
-P 密码
[-t dsa | ecdsa | ed25519 | rsa | rsa1]
-t 秘钥类型
[-f output_keyfile]
-f 输出的秘钥文件
-q 静默执行命令
[root@m01 ~]
ssh-keygen -P '' -qf /root/.ssh/id_rsa
2.分发公钥到其他主机
手动推送公钥
[root@m01 ~]
[root@m01 ~]
1、在其他主机家目录下创建.ssh目录,授权为700
mkdir ~/.ssh -p
chmod 700 ~/.ssh/
2、在.ssh目录下编辑 authorized_keys,内容为m01的公钥 id_rsa.pub
vim authorized_keys
[root@m01 ~]
免交互分发公钥
yum -y install sshpass
选项:
-p 密码
ssh-copy-id 命令
参考网站: https://www.jianshu.com/p/d111d6c36d9b
选项:
-i 指定公钥文件
-p port 指定端口
-f 强制模式
-o StrictHostKeyChecking=no
echo 'root@172.16.1.'{7,8,31,51}|xargs -n1 sshpass -p 1 ssh-copy-id -o StrictHostKeyChecking=no
创建一个需要分发公钥的主机列表文件
cat > /root/host.txt << EOF
172.16.1.7
172.16.1.8
172.16.1.31
172.16.1.41
172.16.1.51
EOF
编辑分发公钥脚本
vim mian.sh
for ip in $(cat /root/host.txt)
do
sshpass -p 1 ssh-copy-id -o StrictHostKeyChecking=no "root@$ip"
done
3.使用脚本实现简单跳板机
[root@m01 ~]
lb01=10.0.0.5
lb02=10.0.0.6
web01=10.0.0.7
web02=10.0.0.8
web03=10.0.0.9
nfs=10.0.0.31
backup=10.0.0.41
db01=10.0.0.51
m01=10.0.0.100
zabbix=10.0.0.71
menu(){
cat <<-EOF
+-------------------------+
| 1) lb01 |
| 2) lb02 |
| 3) web01 |
| 4) web02 |
| 5) web03 |
| 6) nfs |
| 7) backup |
| 8) db01 |
| 9) m01 |
| 10) zabbix |
| h) help |
+-------------------------+
EOF
}
menu
connect(){
ping -c 1 -w 1 $1 &>/dev/null
if [ $? -eq 0 ];then
ssh root@$1
else
echo -e "\033[5;4;40;31m 别连了,我的哥,$2:$1机器都没开!!!\033[0m"
fi
}
trap "" HUP INT TSTP
while true
do
read -p "请输入要连接的主机编号:" num
case $num in
1|lb01)
connect $lb01 lb01
;;
2|lb02)
connect $lb02 lb02
;;
3|web01)
connect $web01 web01
;;
4|web02)
connect $web02 web02
;;
5|web03)
connect $web03 web03
;;
6|nfs)
connect $nfs nfs
;;
7|backup)
connect $backup backup
;;
8|db01)
connect $db01 db01
;;
9|m01)
connect $m01 m01
;;
10|zabbix)
connect $zabbix zabbix
;;
h|help)
clear
menu
;;
close)
break
;;
esac
done
ssh安全优化
【在推送之前必须先结束跳板机进程,并将跳板机设置的/etc/profile.d/jump.sh配置脚本删除,否则会卡住】
1、设置Xshell秘钥:
工具-用户秘钥管理者-生成-下一步-下一步-秘钥名称【随意设置: 秘钥连接 】-完成
2、在m01主机上创建普通用户mcy,并配置 xshell 公钥文件
[root@m01 ~]
[root@m01 ~]
[root@m01 ~]
[mcy@m01 ~]$ pwd
/home/mcy
[mcy@m01 ~]$ mkdir /home/mcy/.ssh
[mcy@m01 ~]$ chmod 700 /home/mcy/.ssh
[mcy@m01 ~]$ vim /home/mcy/.ssh/authorized_keys
[mcy@m01 ~]$ chmod 600 /home/mcy/.ssh/authorized_keys
3、配置 ssh 登陆限制
[root@m01 .ssh]
Port 555
PermitRootLogin no
PasswordAuthentication no
4、重启 sshd 服务
systemctl restart sshd
5、修改 Xshell 登陆
新建会话
连接
端口号改为:555
用户身份验证
方法选择:Public Key
用户名改为:mcy
用户秘钥》浏览:秘钥连接
[root@m01 ~]
ssh 连接优化
vim /etc/ssh/sshd_config
UseDNS no
GSSAPIAuthentication no
vim /etc/ssh/ssh_config
GSSAPIAuthentication no
所有主机的IP和域名加上去,使得本机的DNS服务能更快解析目标地址
vim /etc/hosts
192.168.100.11 doiido.com
10.0.0.11 backup
修改server上nsswitch.conf文件
注意:如果SERVER需要通过域名访问其他服务器,则需要保留此行。一般不改
找到
hosts: files dns
改为
hosts:files
hosts: files dns这一行含义是对于访问的主机进行域名解析的顺序,是先访问file,也就是/etc/hosts文件,如果hosts中没有记录域名,则访问dns,进行域名解析,如果dns也无法访问,就会等待访问超时后返回,因此等待时间比较长
删除/etc/resolv.conf中所有不使用的IP
打开SERVER上的IgnoreRhosts参数
IgnoreRhosts参数可以忽略以前登录过主机的记录,设置为yes后可以极大的提高连接速度
可以先查看家目录下有没有 ~/.rhosts 和 ~/.shosts 文件,如果没有就不需要设置
IgnoreRhosts yes
现在连接linux服务器一般都是使用SSH远程连接的方式。
如果发现telnet时速度很快,ping时一切也正常,但SSH连接的时候却很慢。
1、SERVER的SSHD会去DNS查找访问的CLIENT IP的HOSTNAME,如果DNS不可用或者没有相关记录,就会消耗一段时间。
2、在authentication gssapi-with-mic有时候也会消耗一段时间
一、测试查找具体原因:
1、使用ssh -v host进行debug
然后就会输出一大堆debug,通过debug信息就可以看到连接到什么地方被耽搁了
比如会显示如下信息:
[html] view plain copy
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure. Minor code may provide more information
No credentials cache found
2、检测连接时间
time ssh root@10.0.0.31 exit