top
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!邮件:766378891@qq.com

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


共计 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

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

Tips:清朝云网络工作室

阅读剩余
THE END
icon
0
icon
分享
icon
二维码
icon
海报
发表评论
评论列表

赶快来坐沙发

您好,今天过得怎么样?