文档章节

expect实现配置机器信任关系

1987times
 1987times
发布于 2014/06/10 17:50
字数 381
阅读 14
收藏 0
#!/bin/sh
expect_ssh_copy_id()
{
  if [ "$#" -ne "5" ]; then
     echo "expect_ssh_copy_id <remoteUser> <remoteHostname> <password> <localUserhome> <timeout>";
     exit 1;
  fi
  local remoteUser=$1
  local remoteHostname=$2
  local password=$3
  local localUserhome=$4
  local timeout=$5
  
  expect -c "
    set timeout $timeout 
    spawn ssh-copy-id -i $localUserhome/.ssh/id_rsa.pub $remoteUser@$remoteHostname
    expect {
      \"*yes/no\" { send \"yes\r\"; exp_continue }
      \"*assword:\" { send \"$password\r\" }
    } 
    expect eof
  "
}
expect_ssh_keygen()
{
  if [ "$#" -ne "2" ]; then
     echo "expect_ssh_keygen <localUserhome> <timeout>";
     exit 1;
  fi
  local localUserhome=$1;
  local timeout=$2;
  if [ -f ${localUserhome}/.ssh/id_rsa.pub -a -f ${localUserhome}/.ssh/id_rsa ] ; then
     echo "$(remoteHostname) is already create id_rsa.pub and id_rsa"
  else
     echo "$(remoteHostname) is not set id_rsa.pub and id_rsa.pub"
     expect -c "
       set timeout $timeout
       spawn ssh-keygen
       expect {
        \"*save the key*id_rsa*\" {send \"\r\"; exp_continue }
        \"*verwrite*y/n*\" { send \"y\r\"; exp_continue }
        \"*passphrase*passphrase*\" { send \"\r\"; exp_continue }
        \"*same passphrase*\" {send \"\r\" }
       }
       expect eof
       exit 0
     "
     if [ "$?" -eq "0" ] ; then 
       echo "create id_rsa.pub,id_rsa successfully"
     else
       echo "create id_rsa.pub,id_rsa faild"
     fi
  fi
}
configure_trust_relation()
{
  if [ "$#" -ne "5" ]; then 
     echo "configure_trust_relation <remoteUser> <remoteHostname> <password> <localUserhome> <timeout>";
     exit 1;
  fi
  local remoteUser=$1
  local remoteHostname=$2
  local password=$3
  local localUserhome=$4
  local timeout=$5
  expect -c "
   
    set timeout $timeout 
    set trust true
    #
    # checking remote machine is be trusted
    # if trust, return 0
    # if not trust, return 1
    #
    spawn ssh $remoteUser@$remoteHostname
    expect {
      \"*yes/no\" { send \"yes\r\" ; exp_continue }
      \"*assword:\" { send \"$password\r\" ; set trust false }
    } 
  
    expect { *\$* }
    
    send \"exit\r\"
    sleep 1
    if { \"\$trust\" == \"false\"} {
      expect eof
      exit 1
    }
    expect eof
    exit 0
  "
  if [ "$?" -ne "0" ] ; then
    echo "machine is not be trusted, then exec ssh-copy-id to remote machine"
    expect_ssh_keygen $localUserhome $timeout
    expect_ssh_copy_id $remoteUser $remoteHostname $password $localUserhome $timeout
  else
    echo "remote machine is be trusted"
  fi
}
main()
{
  which expect
  if [ "$?" -ne "0" ]; then
    echo "expect is not exists"
    exit 1;
  fi
  remoteUser=chen;
  remoteHostname=localhost;
  password=chen;
  localUserhome=$(cd ~;pwd;);
  timeout=5;
  configure_trust_relation $remoteUser $remoteHostname $password $localUserhome $timeout
}
main

本文转载自:http://www.cnblogs.com/chenfool/p/3762537.html

共有 人打赏支持
1987times
粉丝 3
博文 57
码字总数 17894
作品 0
广州
程序员
私信 提问
批量实现多台服务器之间ssh无密码登录的相互信任关系

博客园 首页 新随笔 联系 管理 订阅 随笔- 486 文章- 0 评论- 366 批量实现多台服务器之间ssh无密码登录的相互信任关系 最近IDC上架了一批hadoop大数据业务服务器,由于集群环境需要在这些服...

Mr_Tea伯奕
07/25
0
0
ssh建立信任关系注意权限问题

先说一下如何建立信任关系。假设有两台机器A和B,现建立A与B的信任关系(这里指A信任B): 1. 登录到B的$HOME目录下,执行下面的命令: cd .ssh ssh-keygen -t dsa(对于提示信息一律回车) ...

考拉睡
2013/07/26
0
0
linux系统之间文件传输

linux之间文件传输(转)linux的scp命令 linux 的 scp 命令 可以 在 linux 之间复制 文件 和 目录; scp 命令 scp 可以在 2个 linux 主机间复制文件; 命令基本格式: 从 本地 复制到 远程 复制...

yiqifendou
2016/12/02
16
0
几种方法来实现scp拷贝时无需输入密码

几种方法来实现scp拷贝时无需输入密码 欢迎转载!转载时请注明出处:http://blog.csdn.net/nfer_zhuang/article/details/42646849 前言 我在工作中经常要将一些文件传输到另外一个服务器上,...

rootliu
11/06
0
0
scp 在脚本中使用输入密码的解决方法

以前用脚本scp文件时,都是以.ssh打通为基础的。 但是在脚本中使用scp在机器之间拷贝文件,输入密码成为问题。 第一种方法,用到了expect。 脚本如下: #! /usr/bin/expect -f spawn scp 1 ...

xiaoxin
2014/10/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kafka+Flink 实现准实时异常检测系统

1.背景介绍 异常检测可以定义为“基于行动者(人或机器)的行为是否正常作出决策”,这项技术可以应用于非常多的行业中,比如金融场景中做交易检测、贷款检测;工业场景中做生产线预警;安防...

架构师springboot
42分钟前
6
0
DecimalFormat 类基本使用

/* * DecimalFormat 类主要靠 # 和 0 两种占位符号来指定数字长度 * 0 表示如果位数不足则以 0 填充 * # 表示只要有可能就把数字拉上这个位置 * */ public static void main(String[] args){...

嘴角轻扬30
59分钟前
4
0
This APT has Super Cow Powers.

在Debian/Ubuntu上,apt包管理器内嵌着一个彩蛋. 如果你在命令行界面输入 apt help 在最后一行能找到This APT has Super Cow Powers. 说明该apt具有超级牛力 牛力是个什么梗? 则说明你的系统...

taadis
今天
3
0
起薪2万的爬虫工程师,Python需要学到什么程度才可以就业?

爬虫工程师的的薪资为20K起,当然,因为大数据,薪资也将一路上扬。那么,Python需要学到什么程度呢?今天我们来看看3位前辈的回答。 1、前段时间快要毕业,而我又不想找自己的老本行Java开发...

糖宝lsh
今天
10
0
携手开发者共建云生态 首届腾讯云+社区开发者大会在京举办

本文由云+社区发表 北京时间12月15日,由腾讯云主办,极客邦科技、微信、腾讯TEG协办的首届腾讯云+社区开发者大会在北京朝阳悠唐皇冠假日酒店举办。在会上,腾讯云发布了重磅产品开发者平台以...

腾讯云加社区
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部