ssh免密登入脚本

该脚本主要实现自动化部署的功能,包括检查并安装必要的软件包(如nmap、telnet、ansible),扫描网络获取活跃主机IP,生成SSH密钥,将密钥复制到目标主机,并将主机信息写入ansible的hosts文件。此外,还涉及SSH端口检查和使用expect进行交互式操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[root@localhost ~]# cat ssh.sh 
#!/bin/bash
echo -e -n "请输入\033[34mroot\033[0m用户密码 >>> "
read -p "" pwd
echo -e -n "请输入\033[34m本地ip\033[0m[如:192.168.2.10] >>> "
read -p "" local_ip
subnet=$(echo ${local_ip}|awk -F '.' '{print $1"."$2"."$3}')

yum_task(){
  cmd_exist=$(which $1)
  if [ -z ${cmd_exist} ]
  then
    yum install $1 -y
  fi
}

# 自动向传入的IP地址拷贝密钥的函数
create_key(){
/usr/bin/expect <<EOF
# 设置捕获字符串后,期待回复的超时时间
set timeout 10
# 发送公钥给对方服务器
spawn ssh-keygen -t rsa
  expect {
    "Enter file" { send "\n"; exp_continue }
    "Enter passphrase" { send "\n"; exp_continue }
    "Enter same" { send "\n"}
  }
expect eof
EOF
}

copy_key () {
#pwd='123'
# 开始 expect 解释器程序
/usr/bin/expect <<EOF
# 设置捕获字符串后,期待回复的超时时间
set timeout 30
# 发送公钥给对方服务器
spawn ssh-copy-id root@$1
  expect {
    "yes/no" { send "yes\n"; exp_continue }
    "password:" { send "${pwd}\n"}
  }
expect eof
EOF
}

ssh_port_check(){
  echo '' | telnet $1 22 |grep -o -i Connected  
}

[ -z $(rpm -qa |grep epel-release) ] && yum install -y epel-release
yum_task nmap
yum_task telnet
yum_task ansible

all_ip_list=$(nmap -sP ${subnet}.* | grep -o ${subnet}.*)

host_ip_list=''
for i in ${all_ip_list}
do
  tag=$(ssh_port_check $i 2>/dev/null)
  if [ ! -z ${tag} ]
  then
    host_ip_list="$i ${host_ip_list}"
  fi
  sleep 0.5
done

host_ip_list=${host_ip_list}


if [ ! -f /etc/ansible/hosts-bak ]
then
  cp -p /etc/ansible/hosts /etc/ansible/hosts-bak
fi

if [ ! -f /root/.ssh/id_rsa.pub ]
then
  create_key
fi

echo [group] > /etc/ansible/hosts
for host in ${host_ip_list}
do
  echo ${host} >> /etc/ansible/hosts
done

# 循环把每个 Host 传递给自动拷贝函数
for host in $(ansible all --list-hosts |awk 'NR>1 {print $1}')
#for host in `cat iplist`
do
   echo $host
   copy_key $host
done
ssh-agent bash

# 开始 expect 解释器程序
/usr/bin/expect <<EOF
# 设置捕获字符串后,期待回复的超时时间
set timeout 30
# 发送公钥给对方服务器
spawn ssh-add
  expect {
    "id_rsa:" { send "${pwd}\n"}
  }
expect eof
EOF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值