TJ-No.1

上边是牌匾 下边是门脸

   :: 首页  :: 新随笔  ::  ::  :: 管理

3o_AutoSSH

∮自动发送 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 root --stdin
基本正常人就再也 不可能知道你的 root 密码了~ 嗯嗯,也再没有人能以 root 登陆这台主机了.除了...
除了这台 SSH 客户端,可以登陆,而且无需验证密码~ 其实我很感兴趣的是 除此之外还有什么方法能以 root 再登陆B主机呢...
欢迎 交流~

posted on 2016-11-18 08:58  TJ-No.1  阅读(141)  评论(0)    收藏  举报