蓝易云

SSH 免密登录批量操作脚本-只需要在一台机器上执行

655次阅读
没有评论

共计 1705 个字符,预计需要花费 5 分钟才能阅读完成。

之前写过 SSH 实现内网机器无密码登录,这种方式可以实现免密登录,但是需要在每台终端上操作,确实有点麻烦。

后来想能否用脚本实现多台机器间免密登录,新增机器只需要修改文件,然后执行脚本。

后来找到一个脚本,我把脚本修改了部分内容,完整脚本如下:

#!/bin/bash
# ssh_batch.sh
# set -x
#####################################################
# generate ips.txt for ssh_batch.sh
# cat host-ips
# 172.30.0.10
# 172.30.0.11
# 172.30.0.12

IPS=./ips.txt
PASSWD=$1

if [ ! -n "$PASSWD" ]; then
  PASSWD=123456
fi

# ssh-keygen
for IP in $(cat $IPS)
  do
/usr/bin/expect << EOF
    spawn ssh $IP "rm -rf  /root/.ssh; echo 'StrictHostKeyChecking no' >> /etc/ssh/ssh_config; ssh-keygen -t rsa -N '' -f /root/.ssh/id_rsa -q"
    expect {
        "yes/no" { send "yes\n";exp_continue }
        "password" { send "$PASSWD\n" }
    }
    expect "*password*" {send "$PASSWD\n";}
    expect eof
EOF
  done

# copy id_rsa.pub
for IP in $(cat $IPS)
  do
/usr/bin/expect << EOF
    spawn scp root@$IP:/root/.ssh/id_rsa.pub /root/.ssh/id_rsa.pub.$IP
    expect {
        "yes/no" { send "yes\n";exp_continue }
        "password" { send "$PASSWD\n" }
    }
    expect "*password*" {send "$PASSWD\n"}
    expect eof
EOF
    cat /root/.ssh/id_rsa.pub.$IP >> /root/.ssh/authorized_keys
    rm -f /root/.ssh/id_rsa.pub.$IP
  done

## push authorized_keys
for COREIP in $(cat $IPS | sed -n '2,$p')
  do
/usr/bin/expect << EOF
    spawn scp /root/.ssh/authorized_keys root@$COREIP:/root/.ssh/authorized_keys
    expect {
        "yes/no" { send "yes\n";exp_continue }
        "password" { send "$PASSWD\n" }
    }
    expect "*password*" {send "$PASSWD\n"}
    expect eof
EOF
  done

脚本默认所有机器的密码一致,如果密码不为123456,则需要作为运行脚本时作为参数传递进去。

这里对上面的脚本做一个简单的解释。

  1. 首先定义了批量处理机器的所有 ip,和定义密码的变量。

  2. 使用 expect 命令进入所有的机器删除 .ssh 文件夹,并添加 ssh 配置 "StrictHostKeyChecking no",使下次 ssh 登录时不需要确认。然后使用 ssh-keygen 生成一对密钥。

  3. 将所有机器的 ip 拷贝生成一份 authorized_keys 文件。

  4. 将生成的 authorized_keys 拷贝到所有机器。

没有用到 ssh-copy-id ,其实它的原理就是将本机器的公钥放在需要免密登录的机器的 authorized_keys 文件中。

脚本执行

SSH 免密登录批量操作脚本-只需要在一台机器上执行

结果

SSH 免密登录批量操作脚本-只需要在一台机器上执行

可能遇到的问题:

当时我执行脚本后没有报错,且所有的机器都存在 authorized_keys 文件,但是免密登录不成功,也就是说还需要输入密码。

后来用机器查看日志,发现 Authentication refused: bad ownership or modes for directory /root

在不能免密登录的机器上执行:

chmod -R 0750 /root

提醒:本文发布于763天前,文中所关联的信息可能已发生改变,请知悉!

AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年
正文完
 0
阿蛮君
版权声明:本站原创文章,由 阿蛮君 于2022-10-20发表,共计1705字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
Copyright © 2022-2024 阿蛮君博客 湘ICP备2023001393号
本网站由 亿信互联 提供云计算服务 | 蓝易云CDN 提供安全防护和加速服务
Powered by Wordpress  Theme by Puock