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

大家需要在每个节点上提前装好"expect"工具

expect的使用请看我的另一篇文章:

http://tianxingzhe.blog.51cto.com/3390077/1687661

 

spawn命令激活一个Unix程序来进行交互式的运行。 

send命令向进程发送字符串。

expect命令等待进程的某些字符串

set timeout 1    设置超时时间  timeout -1 为永不超时


expect eof

只有spawn执行的命令结果才会被expect捕捉到,因为spawn会启动一个进程,只有这个进程的相关信息才会被捕捉到,主要包括:标准输入的提示信息,eof和timeout
这里,eof是必须去匹配的,在spawn进程结束后会向expect发送eof;如果不去匹配,有时也能运行,比如sleep多少秒后再去spawn下一个命令,但是不要依赖这种行为,很有可能今天还可以,明天就不能用了。


expect  \"#\"   期待返回shell提示符(是#或者$)


interact 命令


执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行一段命令就退出,可改为 expect eof


id_dsa/ id_dsa.pub:你用openssh工具生成的私钥公钥对
authorized_keys :你使用ssh连接的linux服务器需要认证你的身份,所以你需要在连接的linux服务器上安装自已的公钥,authorized_keys这里面就是存放你自己的id_dsa.pub的内容



scp是有Security的文件copy,基于ssh登录。操作起来比较方便,比如要把当前一个文件copy到远程另外一台主机上,可以如下命令。

scp /home/daisy/full.tar.gz


大体思路

1、首先在一个文本文件中保存1000台机器的hadoop用户名和密码
2、用shell遍历这个文件 写一个循环用namenode的去循环登陆其他的999个节点,执行生成密钥的工作,然后把生成的公钥写回namenode
3、在namenode上生成密钥 写入这个文件
4、把第三部生成的文件拷贝到剩下的机器上
5、用循环遍历验证免密的效果


本解决方法主要包括两个脚本: sshpass.sh和ssh4slaves

1. sshpass.sh

#!/bin/bash
# Name     : sshpass.sh
# Time     : 17/09/2012
# Author   : simplestone@dbinterest.com
# Purpose  : For fast and easy setup of the SSH Passwordless access among all the nodes
#            in a cluster. 
# User     : Any user you are performing the test! Better to settup a separate user from your
#            working env to avoid troubles!!! "root" is used in this example, and you can change it
#            via the export virable "USER=root"
# Attention: The test env is assuming that each $USER on each $HOST is usring the same password!
#            And this likely makes sense as no body want to put more trouble on this.
# Usage    : 1st, make sure the script has the execute permisison "chmod +x ssh_pass.sh"
#            ./ssh_pass.sh password
#          : 2nd, ensure the "ssh4slaves.sh" script is with ssh_pass.sh for all nodes setup!!!
#          : 3rd, "expect" has to be installed on all the nodes for the SSH config
export FILELOC="/root"
export SLAVESFILE="$FILELOC/sshslaves"
export HOSTS=`cat $FILELOC/sshhosts`
export SLAVES=`cat $FILELOC/sshslaves`
export SSH4SLAVESCRIPT="$FILELOC/ssh4slaves.sh"
export MASTER=hdp01
export USER=root
export PASSWD=$1
export SSHLOC="$FILELOC/.ssh/"
export RSAFILE="$FILELOC/.ssh/id_rsa"
export RSAPUBFILE="$FILELOC/.ssh/id_rsa.pub"
export AUTHFILE="$FILELOC/.ssh/authorized_keys"
export EXPECTCHK=`rpm -qa expect | wc -l`
#
if [ $EXPECTCHK != 1 ]
  then
  echo ''
  echo "########################################################################################"
  echo "Please install the \"expect\" package first on all nodes to allow the script to run!!!"
  echo "yum -y install expect"
  echo "########################################################################################"
else
  if [ -e $RSAFILE ]
    then
    echo "########################################################################################"
    echo "Attention: This is for TEST ONLY, please fully test it before applying it to PROD"
    echo "environment!!! OR you might get in trouble!!!"
    echo ''
    echo "BETTER TO HAVE A NEW USER FOR THE TEST TO AVOID DESTROYING YOUR ENVIRONMENT!"
    echo ''
    echo &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值