∮自动发送 ssh 公钥,为 ansible 鸣锣开道

  • Bold 参考资料 http://mageedu.blog.51cto.com/4265610/1412028
  • ...其实我并没有参考这篇博文的很多东西,只是我不太想解释我在做什么....
  • ...我在做的其实是 使ansible 的被管理主机实现通过脚本发送 ssh 公钥,使其可以基于 ssh 进行互信通信

之前对 ssh 的理解稍有偏差,我在这里直接说正确的理解就好了.

A 连接 B (A,B 是两台机器,跑着 Linux CentOS7 的机器),B 是SSH 服务器,A 是客户端.

客户端需要把 自己的公钥发送至 服务器.以实现无需验证的 ssh 登陆.B 需要一直监听在 TCP22 端口.

A 是客户端,但 A 也是 ansible 的管理端, B 是众多被管理的 小弟之中的一个... "小弟"之中的一个.但 B 是 SSH 的服务器端.

其实我下面要说的 和 ansible 就没啥关系...

我直接上脚本吧... . ~之前还要做一件事#yum install expect

嗯嗯,一般来讲,expect 是另一种脚本,第一行得指明解释器的位置, man文档里说的比较清楚 # man expect

人家说确保 #!/usr/bin/expect -f 在程序的第一行,不过人家是用英语说的...

但是我用 EOF流 将expect 的脚本嵌套在 bash 脚本中了.

# vim auto_ssh.sh" /etc/passwd

#!/bin/bash

count=1

if [ -z $1 ] ; then

       echo "READ ./auto_ssh.txt NOOB ... ^v^"

       exit 6

fi

if [ ! -e /root/.ssh/id_rsa.pub ] ; then

       ssh-keygen -q -t rsa -f /root/.ssh/id_rsa -P ''

fi

for i in `awk '{print $1}' auto_ssh.txt` ; do

       user=`awk -v I="$i" '{if(I==$1)print $2}' auto_ssh.txt`

       pawd=`awk -v I="$i" '{if(I==$1)print $3}' auto_ssh.txt`

       /usr/bin/expect << EOF

       set time 5

       spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $user\@$i

       expect {

               "*(yes/no)*"        {

                     send "yes\r"

                     exp_continue

               }

               "*password*" {

                     send "$pawd\r"

               }

       }

       interact

       expect eof

       EOF

       echo ""

       echo "$i ssh-copy-id done!!"

       if [ $count -ge $1 ] ; then

              break

       fi

       let count++

       sleep 1

done

ssh-add # 这句很关键呦

接下来编辑一下你的配置文件,方便脚本去解析.

# vim auto_ssh.txt

以上方案应该不是最优方案,嗯嗯,一定不是.

但 以上方案是一个可行的方案,如果你觉得要写配置文件有点麻烦...

你的 /etc/ansible/hosts 文件里的主机是怎么添加上的.

嗯嗯,一如既往的献上彩蛋~

经过以上的操作之后, ssh 可以不用输入密码就可以登陆了.[即使在对方主机修改了 登陆密码之后,比如 root]

有一种奇葩的操作,是 定期给服务器更换 root 密码.如果你执行了以下指令.

# echo `cat /dev/urandom |strings -n 12 |head -n 1` | passwd --stdin root

基本正常人就再也 不可能知道你的 root 密码了~ 嗯嗯,也再没有人能以 root 登陆这台主机了.除了...

除了这台 SSH 客户端,可以登陆,而且无需验证密码~ 其实我很感兴趣的是 除此之外还有什么方法能以 root 再登陆B主机呢...

欢迎 交流~

3o_AutoSSH的更多相关文章

随机推荐

  1. unity 内存中切割图片

    一般的说我们切割图片是将一张图片资源切割成更小的图片资源,也就是说在资源上就进行了切割,比如ugui上的切割方法. 如果我们有一些情况比如做拼图,可能让玩家自己选择自己的生活照作为拼图的原图. 那么我 ...

  2. Android学习八:获取网络图片

    看到QQ群里有个朋友说加载图片内存溢出的问题,所以就按照自己的想法试试的.但是按照他的方法,不知道为何没有发生内存溢出,不知道什么情况. 写这篇文章主要有三个目的: 1.多线程的学习 2.图片加载的学 ...

  3. Asp.net MVC 的八个扩展点

    http://www.cnblogs.com/richieyang/p/5180939.html MVC模型以低耦合.可重用.可维护性高等众多优点已逐渐代替了WebForm模型.能够灵活使用MVC提供 ...

  4. elasticsearch 5.1 问题 ubuntu

    1.can not run elasticsearch as root 切换到非root用户 2.main ERROR Could not register mbeans java.security. ...

  5. pm2使用

    简单教程 首先需要安装pm2: npm install -g pm2 运行: pm2 start app.js 初次安装并运行,会有一个高大上的界面: 高大上的界面 直接我们介绍过forever,那么 ...

  6. [开源项目]Hibernate基本使用

    开源项目(1)Hibernate基本使用 Hibernate介绍 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象 ...

  7. CentOS中的常用命令

    1. 网络 1.1 查看所有端口 netstat -ntlp 1.2 查看被打开的端口 netstat -anp 1.3 查看端口占用情况 lsof -i: 或 lsof -i tcp: 2. 硬盘 ...

  8. [Linux] - CentOS 安装nginx

    linux版本:CentOS 6.0+ 安装nginx方法: 1.下载nginx rpm包命令: wget http://nginx.org/packages/centos/6/noarch/RPMS ...

  9. IOS零碎技术整理(1)-后台运行

    这两天做关于离线通知的功能,总结了一点关于这方面的注意点:按Home键回到桌面后程序很快被挂起,系统将关闭程序的Socket监听,此时程序将不能继续执行网络请求等操作. 两种方式可以使程序继续存活一段 ...

  10. C#Random函数在循环中每次获取一样的值

    首先需要了解一点Random函数的随机生成是和当前时间有关系,如果在短时间生成随机数,就会导致随机数生成出来是相同的. 不过我们可以在每次随机时指定一个Seed种子值,这样在循环里就可以每次获取不一样 ...