如何实现推送公钥脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 [root@m01 ~]# ssh-keygen [root@m01 ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa &>/dev/null 我们在使用ssh root@10.0.0.31远程连接时,会让我们交互输入对方主机的密码才可进行连接 [root@m01 ~]# yum install -y sshpass [root@m01 ~]# sshpass -p 1 ssh root@10.0.0.31 sshpass -p 密码 ssh root@10.0.0.31 [root@m01 ~]# sshpass -p root ssh -o strictHostKeyChecking=no root@10.0.0.31 sshpass -p 密码 ssh -o strictHostKeyChecking=no root@10.0.0.31 -p:指定密码 -o strictHostKeyChecking=no:忽略指纹认证 [root@m01 ~]# vim push_public_key.sh if [ ! -f ~/.ssh/id_rsa ]then ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa &>/dev/null fi for ip in {5,6,7,8,31,41,51,61,71};do ping -c1 -W1 172.16.1.$ip &>/dev/null [ $? -eq 0 ] &&\ sshpass -p root ssh-copy-id -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa.pub root@172.16.1.$ip &>/dev/null &&\ echo "172.16.1.$ip 推送成功..." ||\echo "172.16.1.$ip 推送失败..." done 如果脚本里面带密码,为了安全,就可以把文件变成二进制文件 将脚本变成二进制文件(加密文件内容)安装shc [root@m01 ~]# yum install -y shc [root@m01 ~]# shc -f ip_host.sh shc -f 文件名 会生成.x .x.c 的文件,把.x的文件进行执行就可以 ./文件名 :二进制文件使用./执行
expect免交互语言(了解)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 [root@m01 ~]# yum install -y expect set ip 10.0.0.41set pass rootset timeout 30spawn ssh root@$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 [root@m01 ~]# !vim vim 1.exp set pass 1foreach ip {"7" "8" "31" "41" } { puts "当前IP地址: $ip " spawn ssh root@172.16.1.$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 } -------------------------免交互推送公钥,免指纹认证脚本,一步到位------------------ >ip.txt pass=root rpm -q expect &> /dev/null if [ $? -ne 0 ] ;then echo "开始安装expect,请稍等一会..." yum install -y expect &> /dev/null echo "expect安装完成" fi if [ ! -f ~/.ssh/id_rsa ];then echo "开始创建密钥对..." ssh-keygen -P "" -f ~/.ssh/id_rsa &> /dev/null echo "密钥对创建完成" fi for i in {2..254}do { ip=10.0.0.$i ping -c1 -W1 $ip &> /dev/null if [ $? -eq 0 ];then echo "$ip " >> ip.txt /usr/bin/expect <<-EOF set timeout 10 spawn ssh-copy-id $ip expect { "yes/no" { send "yes\r"; exp_continue } &> /dev/null "password:" { send "$pass\r" } &> /dev/null } expect eof EOF fi }& done wait echo "推送公钥和免交互工作已完成,你现在可以直接远程登陆机器了" expect的变量定义: set 变量名 变量值 \r 回车 \n 换行符
SSH安全优化
SSH作为远程连接服务,通常我们需要考虑到该服务的安全,所以需要对该服务进行安全方面的配置。
1.更改远程连接登陆的端口
2.禁止ROOT管理员直接登录
3.密码认证方式改为密钥认证
4.重要服务不使用公网IP地址
5.使用防火墙限制来源IP地址
SSH服务登录防护需进行如下配置调整,先对如下参数进行了解
1 2 3 4 5 Port 6666 PermitRootLogin no PasswordAuthentication no UseDNS no GSSAPIAuthentication no
将如下具体配置添加至/etc/ssh/sshd_config文件中,参数需根据实际情况进行调整
1 2 3 4 5 6 7 GSSAPIAuthentication no UseDNS no