批量设置ssh无密码登陆脚本

最近要给集群设置ssh无密码登陆,如果需要手动设置这个无密码登陆,所以在网上找了几个脚本,亲测下面这个好使,并且设置比较简单。

需要用root账户执行,我也是要给root账户设置无密码登陆。

首先我们要创建密码,执行下面这句命令:

ssh-keygen -t rsa

脚本如下:我们仅仅需要修改的就是node=()里面的主机名就可以了,当前前提是你必须在/etc/hosts 配置了。

#!/bin/bash
node=(hadoop.Master hadoop.SlaveT1 hadoop.SlaveT2)  # hostname for each node
username=root            # username to be interconnected
homename=$username        # home dir, i.e. home/zhangyang
if [ "$username" = "root" ];
then
        homename=root
else
        homename=home/$username
fi

for((i=0; i<${#node[*]}; i++))
do
        ssh $username@${node[i]} 'ssh-keygen -t rsa; chmod 755 ~/.ssh'
done
#cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

echo "batch authorized_keys created..."
echo "start scp..."

#scp node003:/$homename/.ssh/authorized_keys /$homename/.ssh/node003.key
for((i=0; i<${#node[*]}; i++))
do
        scp ${node[i]}:/$homename/.ssh/id_rsa.pub /$homename/.ssh/${node[i]}.key
        echo "scp from ${node[i]} finished..."
done

echo "append key to authorized_keys..."
for((i=0; i<${#node[*]}; i++))
do
        cat /$homename/.ssh/${node[i]}.key >> /$homename/.ssh/authorized_keys
        echo "append ${node[i]}.key finished..."
done

echo "append all key finished..."
loop=${#node[*]}
let subloop=loop-1
echo "starting scp complete authorized_keys to ${node[1]}~${node[subloop]}"
for((i=1; i<${#node[*]}; i++))
do
        scp /$homename/.ssh/authorized_keys ${node[i]}:/$homename/.ssh/authorized_keys
        echo "scp to ${node[i]} finished..."
done
echo "scp all nodes finished..."

# delete intermediate files
rm -rf /$homename/.ssh/*.key
echo "all configuration finished..."

然后给脚本授予执行的权限 chmod +x  batchSSH.sh

然后执行./batchSSh.sh

当然这个脚本也有缺陷,它需要自己手动输入密码,如果节点多的话,还是很痛苦的,不过还好啦,比起自己手动搞的话,好多了,谁叫我不懂shell呢,哈哈!

时间: 2024-10-31 13:54:24

批量设置ssh无密码登陆脚本的相关文章

学习ssh之ssh无密码登陆

最近一个月没有写过文章,主要是刚刚换的新工作.新公司服务器OS使用的是ubuntu server版,和以前熟悉的centos还是有很多不同的. 刚好这几天有时间,也是工作需要,学习了下有关ssh密钥的知识. 在平时的工作中,我们登陆服务器,一般是使用ssh密码的方式.其实还有一种方式,那就是通过ssh密钥登陆服务器. 这两种方法都是ssh的安全验证方式,,根据验证方式的不同我们把其分为:基于密码的安全验证和基于密钥的安全验证. 注意:在一些文章中提到的ssh证书,其实就是ssh密钥. 一.ssh

ubuntu server中ssh无密码登陆详解教程

新服务器OS使用的是ubuntu server版,和以前熟悉的centos还是有很多不同的. 在平时的工作中,我们登陆服务器,一般是使用ssh密码的方式.其实还有一种方式,那就是通过ssh密钥登陆服务器. 这两种方法都是ssh的安全验证方式,,根据验证方式的不同我们把其分为:基于密码的安全验证和基于密钥的安全验证. 注意:在一些文章中提到的ssh证书,其实就是ssh密钥. 一.ssh两种安全验证介绍 通过以上介绍,我们知道了ssh有两种安全验证方式,下面我们一一介绍其工作原理. 1.1 基于密码

搭建hadoop集群为什么要设置SSH无密码登录?

问题描述 搭建hadoop集群为什么要设置SSH无密码登录? 解决方案 解决方案二:集群之间的调度需要.如:俩台服务器001和002.001执行重启的shell后002也要重启.这时候要通过ssh调用002的重启shell

linux设置SSH自动登陆(免密码,用户名)

例子一 1.创建公钥.公钥 ssh-keygen -t rsa 把公钥复制到远程主机 无视它出来的任何提示,欢快的一路回车到底吧. 2.把公钥 id_rsa.pub 复制到远程机器的 /home/username/.ssh目录 并命名为 authorized_keys 方法1: 一步到位:scp ~/.ssh/id_rsa.pub username@hostname:~/.ssh/authorized_keys 方法2: 复制 scp ~/.ssh/id_rsa.pub username@hos

大规模集群自动化部署SSH无密码登陆

大家需要在每个节点上提前装好"expect"工具 expect的使用请看我的另一篇文章: http://tianxingzhe.blog.51cto.com/3390077/1687661   spawn命令激活一个Unix程序来进行交互式的运行. send命令向进程发送字符串. expect命令等待进程的某些字符串 set timeout 1    设置超时时间  timeout -1 为永不超时 expect eof 只有spawn执行的命令结果才会被expect捕捉到,因为spa

ssh无密码登陆(转)

[0]写在前面 由于ssh 实现的是免密码登陆,大致步骤是: 0.1) client通过ssh登陆到server: 0.2) server检查家目录下的.ssh文件, 并发送公钥文件 authorized_keys 到client : 0.3) client端 接收到 server 端的公钥文件,并用自己的私钥文件对 其进行解析,并计算出 新的 公钥文件C: 0.4) server段 接收到 client的 公钥文件C,并将其与 自身的公钥文件,进行匹配,(它有它自己的匹配算法, 这个你不管),

解决SSH无密码登陆后又需要密码登陆

主节点CentOS_Master 从节点Slave_1. 我想着可能是 /etc/ssh/sshd_config下的那个公钥文件路径不对,看了下home/hxsyl/.ssh/authorized_keys,可能前面少个/,然后加行了,还不行,主节点用root登陆Slave_1是可以的,但是普通用户不行,我想着可能是权限不对,所以在SLave_1下的普通用户下设置,chmod 600 authorized_keys,然后root下service sshd restart,在在主节点下普通用户下就

SSH无密码登陆Agent admitted failure to sign using the key

A :CentOS_Master B:Slave_1 C:Slave_2 普通用户hxsyl 1.现在A 上 ssh-keygen -t rsa 一路回车,不需要输入密码 执行该操作将在/home/hxsyl/.ssh下生成id_rsa, id_rsa.pub文件,其中id_rsa.pub是公钥 2.scp /home/hxsyl/.ssh/id_rsa.pub hxsyl@B:.ssh/authorized_keys 3.登陆时候 出现Agent admitted failure to sig

Spark集群部署时SSH无密码登录问题

问题描述 我们是2台电脑各自装了一个VMware的虚拟机,里面是Ubuntu的系统进行操作,Spark集群一个是Master,一个是Slave1,在设置SSH无密码登陆时,Slave1把公钥发给Master时会出现:rootMaster'spassward,然后输入密码后出现:Persiondenied,pleasetryagain.这并不是密码错误的提示,而是权限不够的提示,按照网上改权限也没有效果,这是为什么需要怎么修改? 解决方案 解决方案二:不是应该将master的公钥发给slave吗解