SSH优化
实现推送公钥脚本
# 1.免交互生成密钥对
[root@m01 ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa >/dev/null 2>&1
ssh-keygen : 这是一个用于生成SSH密钥对的命令。
-t rsa : 这指定了密钥对的类型为RSA
-P '' : 这设置了密钥对的密码为空,意味着创建密钥时不需要密码。
>/dev/null 2>&1 : 部分将命令的标准输出和标准错误输出都重定向null
# 2.免交互ssh命令-------sshpass(需要安装)
[root@m01 ~]# yum install -y sshpass
[root@m01 ~]# sshpass -p 1 ssh [email protected]
- p : 指定所连用户的密码
# 3编写脚本
[root@m01 ~]# vim push_public_key.sh
#!/bin/bash
test -f ~/.ssh/id_rsa || ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa >/dev/null 2>&1
for ip in 7 8 31 41;do
ping -c1 -W1 172.16.1.$ip &>/dev/null
[ $? -eq 0 ] &&\
sshpass -p 1 ssh-copy-id -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa.pub [email protected].$ip &>/dev/null &&\
echo "172.16.1.$ip 推送成功..." ||\
echo "172.16.1.$ip 推送失败..."
done
ping -c -W
-c 只发送一次ping请求
-W 表示如果在1秒内没有收到回应,ping命令就会停止等待。
test -f ~/.ssh/id_rsa :检测文件是否存在
|| : 或者 左边执行成功右边不执行 ,左边执行失败右边执行
&& : 和 都要执行成功
\ : 换行符
### 集合一下 实现创建推送公钥
vim push_public_key_v2.sh
#!/bin/bash
. /etc/init.d/functions
test -f ~/.ssh/id_dsa || ssh-keygen -t rsa -P '' -f ~/.ssh/id_dsa >/dev/null2>&1
for ip in 7 8 31 41;do
ping -c1 -W1 172.16.1.$ip &>/dev/null
[ $? -eq 0 ] &&\
sshpass -p 1 ssh-copy-id -o StrictHostKeyChecking=no -i ~/.ssh/[email protected].$ip &>/dev/null &&\
action "172.16.1.$ip" /bin/true ||\
action "172.16.1.$ip" /bin/false
done
. /etc/init.d/functions ## 调用图形化成功失败函数
action "172.16.1.$ip" /bin/true || action "172.16.1.$ip" /bin/false
SSH免交互语言expect(了解)需要安装
# 1.安装expect
[root@m01 ~]# yum install -y expect
#!/usr/bin/expect
set ip 10.0.0.41 ## 定义变量
set pass 1
set timeout 30
spawn ssh root@$ip ## 这部分使用了 expect 的 spawn 命令来启动一个SSH连接到远程主机。
expect { ## 一条命令下
"(yes/no)" {send "yes\r"; exp_continue} ## 搜索到(yse/no)就输入yes回车
"password:" {send "$pass\r"} ## 搜索到(password:)就输入变量 $pass 回车
}
expect "root@*" {send "df -h\r"} ## 检索到root@* 输入df -h\r
expect "root@*" {send "exit\r"}
expect eof ## 结束
## 循环多台机器
[root@m01 ~]# !vim
vim 1.exp
#!/bin/expect
set pass 1
foreach ip {"7" "8" "31" "41"} {
puts "当前IP地址: $ip"
spawn ssh [email protected].$ip
expect {
"(yes/no)" {send "yes\r"; exp_continue}
"password:" {send "$pass\r"}
}
expect "root@*" {send "df -h\r"}
expect "root@*" {send "exit\r"}
expect eof
}
SSH优化
# 1.修改ssh默认端口
[root@m01 ~]# vim /etc/ssh/sshd_config
Port 2222
# 2.不允许使用root登录
PermitRootLogin No // 38
# 3.不使用DNS
UseDNS no // 115
# 4.禁止使用密码登录
PasswordAuthentication no // 65
# 5.禁止使用GSS认证
GSSAPIAuthentication no
2fa:google二次认证
Port 6666 # 变更SSH服务远程连接端口
PermitRootLogin no # 禁止root用户直接远程登录
PasswordAuthentication no # 禁止使用密码直接远程登录
UseDNS no # 禁止ssh进行dns反向解析,影响ssh连接效率参数
GSSAPIAuthentication no # 禁止GSS认证,减少连接时产生的延迟
将sh文件变为2进制文件 (通过c转义)需要安装 shc
## 将脚本变成二进制文件
[root@m01 ~]# yum install -y shc
[root@m01 ~]# shc -f ip_host.sh