Ansible用于网络设备管理 part 0 安装和登录网络设备
真实在是累了,但是又怕第二天早上又忘掉,在这先大概写写。
安装:
http://www.tecmint.com/install-and-configure-ansible-automation-tool-in-linux/
http://www.tecmint.com/how-to-enable-epel-repository-for-rhel-centos-6-5/
基本就靠这俩就搞定了
登录网络设备让我比较费劲,因为之前不了解公钥私钥加密(说实话是别人讲了,没理解,这次终于理解了,改天得专门写个博客写公钥私钥和如何反其道而行的设置私钥登陆,见http://superuser.com/questions/556355/is-there-a-difference-if-ssh-key-is-created-on-serverside 这哥们儿和我想的一样哈哈!删掉生成者服务器上的私钥!然后放到本地PC!),公钥私钥是让马哥Linux给讲明白的。如何配置公钥私钥主要靠下面这俩链接
http://wilson18.com/topic/72-how-to-set-up-ssh-keys-to-log-in-on-centos-65-from-windows/ 这个链接很神奇,它给了我反其道而行之的思路,也大概让我知道了公司的账号是怎么建设的,估计就是反着来,用脚本生成给user, user自己负责保管私钥。其中的 chmod也有用!然后也传递给我一个概念,加上上面那个哥们儿心里所想的,让我觉得,key pair 这个东西的生成者是哪个机器根本不重要,重要的就是这个私钥放在哪里(登录者),公钥放在哪里(被登录者),然后还有私钥的主人是谁,也就是那个账号,账号是由ssh-keygen时那个机器上的那个Linux账号决定的(不过我觉得可以改...也许不能)。还有这个链接,http://serverfault.com/questions/591476/ssh-server-refused-our-key-for-all-users-except-root-user,这个是用来解决非root用户如何使用密钥的,当我把私钥从生成者服务器上拿走之后,就要解决这个问题,而这个链接给了我方法解决非root用户登录进来的问题。
当把上面的一切弄明白之后,我给自己在北京的一个Linux上建一个账号,然后把私钥剪切到了我的OS X上,然后解决掉一切的权限问题,免密码从OS X登录到这个机器上去。然后正餐才开始:
1、建立一个叫ansibleserver的账号,为他生成key pair, 把public key传到办公室的vc上去,这样ansibleserver就能直接登录vc switch了。
[ansibleserver@Ansible_Server ~]$ ssh -a01-ex-vc1
Enter passphrase for key '/home/ansibleserver/.ssh/id_rsa':
--- JUNOS .3R9-S1 built -- :: UTC
{master:} 2、然后比着Kirk老师在https://pynet.twb-tech.com/blog/ansible/ansible-cfg-template.html 这个博客里写的架构ansible账户的方法,为ansibleserver这个用户建立相应的用户家目录,如下图,哈哈,我画了图,清楚多了

就这样,比着这个图取理解Kirk的前两篇博客。也为ansibleserver这个账户建立好这一切。
哦?hosts文件要改一下,为的是让ansibleserver这个账户为我们办公室的vc switch服务,图里这个gituser是完全按照Kirk的博客里说的建立的。
那么下面就是如何让ansibleserver为办公室的vc switch服务,这个我参考了诸多的博客,最终知道了hosts文件应该怎么写,因为这个时候ssh已经能直接登录vc switch了,没有理由ansible命令get不到vc switch,当时报的错如下:
[ansibleserver@Ansible_Server ansible]$ ansible all -m ping -u ansibleserver
localhost | FAILED => SSH Error: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue.
Enter passphrase for key '/home/ansibleserver/.ssh/id_rsa':
Enter passphrase for key '/home/ansibleserver/.ssh/id_rsa':
cn-pek1--a01-ex-vc1.cnet.com | FAILED => failed to transfer file to error: unknown command: /bin/sh/ping: Connecting to cn-pek1--a01-ex-vc1.cnet.com...
Permission denied (publickey,password,keyboard-interactive).
Couldn't read packet: Connection reset by peer [ansibleserver@Ansible_Server ansible]$
[ansibleserver@Ansible_Server ansible]$
我特么的当时感到十分的奇怪,尼玛我passphrase根本没打错啊,我直接ssh命令到vc switch的时候也没出错啊,那我就去搜错报错信息中的“unknown command: /bin/sh/ping:”这一句去了,结果真就找到了解决的办法,来自这个链接 https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/ansible-project/9zG8bMyv4es/Lw6CpW_pIW0J , 这个链接里就教会了我如何去些hosts文件,来避免这个错误,它的里面写的那个IP,其实就是目标主机的地址,我这里写的我的vc的主机名,下面是我的hosts文件的内容
[root@Ansible_Server ansible]# more hosts
[switch]
cn-pek1--a01-ex-vc1.cnet.com ansible_connection=local ansible_ssh_host=cn-pek1--a01-ex-vc1.cnet.com #[local] 暂时注释掉了这个localhost, 因为保留着它的话,会报出登陆localhost的permission错误,这个以前改过,应该好改
#localhost ansible_ssh_user=ansibleserver
[root@Ansible_Server ansible]#
改成这样之后,ansible的那个ping命令就能正常使用了,效果如下:
[hsun@Ansible_Server etc]$ ansible -m ping all
cn-pek1-10-a01-ex-vc1.cnet.com | success >> {
"changed": false,
"ping": "pong"
}
我不得不吐槽一下官方文档之简陋,连个ansible all -m ping应该出来什么output它都不写,官方doc链接在这 http://docs.ansible.com/ansible/intro_getting_started.html,基本没帮上什么忙,唉。
to be re-modified....
=========2015年10月28更新========
[root@localhost RTR-TEMPLATE]# ansible -m ping switch
cn-pek1--a01-ex-vc1.cnet.com | success >> {
"changed": false,
"ping": "pong"
} [root@localhost RTR-TEMPLATE]#
这个地方我们直接写 ansible -m ping switch,不写all了,后面跟着的这个switch这个值,就是来自hosts文件的中括号当中的那个[switch],在这里直接写明相关的执行范围,跳过playbook的繁琐步骤,可以看出ansible太灵活了,再对比一下Jason Edelman的这篇博客
http://jedelman.com/home/network-test-automation-with-ansible/ 可以发现Jason大神跳过了更多步骤,直接集成进playbook和hosts里,它的后端使用了cpal来连接真实的网络设备,这个cpal是Jason大神写的一个Python项目,可以直接import的那种,这个的源码在https://github.com/jedelman8/cpal 可以找到,里面还需要import json,之前完全没有接触过json啊,压力好大。
========to be re-modified==========
未经授权,请勿转载!
Ansible用于网络设备管理 part 0 安装和登录网络设备的更多相关文章
- Ansible用于网络设备管理 part 1 Jinja2 YAML初窥
这一次的实验内容依然来自Kirk Byers的博客,源地址在https://pynet.twb-tech.com/blog/python/paramiko-ssh-part1.html 但是,这次实验 ...
- Ansible用于网络设备管理 part 3 使用NAPALM成品库
闲话 经过了这俩月的闲暇时间的瞎逛和瞎琢磨,我发现NAPALM是一条路,NAPALM是由帅哥David Barroso和美女Elisa Jasinska创建的一个项目,都是颜值高的技术牛人啊,真是不给 ...
- Ansible用于网络设备管理 part 4 使用NAPALM成品库+Gabriele的方法+循环
上次用NAPALM实现了一个给端口加description的小功能,但是那次仅仅是用于给一个设备的一个端口加description,没有实现一次给多个设备加,也没有实现一个给多个端口加(虽然这次也没实 ...
- Ansible用于网络设备管理 part 2 对Jinja2 YAML 和 module的理解
虽然很不想用“应该”这个词,但是还是写上了,的确我自己目前就是这么理解的. 那么这个理解就是,Ansible的一个key point 就是总的一个playbook是去依赖很多元素的,就像一开始那个图里 ...
- 网络初级篇之配置telnet登录网络设备(实验)
一.作用 在日常工作中,登录网络设备,对其进行配置主要有几种方式:console.Telnet与ssh.这样可以实现远程(只要网络可达)控制,极大的方便了工作.今天主要讲解一下配置Telnet ...
- Linux-TFTP之用于网络远程安装
TFTP:Trival File Transfer Protocol,简单文件传输协议.是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂.开销不大的文件传输服务. ...
- 【原创】运维基础之Ansible(1)简介、安装和使用
官方:https://www.ansible.com/ 一 简介 Ansible is a radically simple IT automation engine that automates c ...
- Greenplum5.16.0 安装教程
Greenplum5.16.0 安装教程 一.环境说明 1.1官方网站 Greenplum官方安装说明:https://gpdb.docs.pivotal.io/5160/install_guide/ ...
- libvirt2.0安装
目录 1.libvirt介绍 2.卸载系统自带的libvirt 2.1.查看当前安装的libvirt相关包 2.2.全部卸载掉 3.使用tar包编译安装 3.1.解压缩 3.2.生成Makefile文 ...
随机推荐
- WPF中如何用代码触发按钮Click处理
btnOk.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
- efwplus框架介绍
此框架得到博客园大神@张善友的关注,建议我写一篇此框架的最新介绍,好在@dotNet跨平台公众号上推荐给大家,得到大神的指示当然激动,马不停蹄的赶出此文,供大家参考! 一.使用efwplus框架的 ...
- HIS系统的处方录入控件
前文<EFW框架Winform前端开发之强大的自定义控件库>中我们介绍了EFW框架中Winform系统中的自定义控件,本章使用自定义控件中的GridBoxCard控件开发了一个HIS系统的 ...
- 菜鸟学Windows Phone 8开发(4)——设置应用程序样式
本系列文章来源MSDN的 面向完全新手的 Windows Phone 8 开发 本文地址:http://channel9.msdn.com/Series/Windows-Phone-8-Develo ...
- 【Head-First设计模式】C#版-学习笔记-开篇及文章目录
原文地址:[Head-First设计模式]C#版-学习笔记-开篇及文章目录 最近一年断断续续的在看技术书,但是回想看的内容,就忘了书上讲的是什么东西了,为了记住那些看过的东西,最好的办法就是敲代码验证 ...
- Sass学习之路:Sass、Compass安装与命令行
导言 CSS不是一门真正意义上的编程语言,很多编程语言理所当然的特性(比如变量),都不被支持.同时再开发模块化的web项目的时候,也要避免相互干扰.为了弥补CSS的这些不足,就产生了CSS预处理器,S ...
- [Python] Symbol Review
From:http://learnpythonthehardway.org/book/ex37.html 1. with X as Y: pass 1.1 yield 2. exec 2.1 name ...
- Supervisor – 用于 Unix 系统的进程监控工具
Supervisor 是一个客户端/服务端模式的系统,使用户能够监视和控制 UNIX 操作系统的进程.Supervisor 为你提供一个地方来启动,停止和监视进程.进程可以单独或成组的形式控制.您还可 ...
- PEP8 Python 编码规范
一 代码编排1 缩进.4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格.2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在操作符的后边敲回车.3 类 ...
- JS设计模式1-单例模式
单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如全局缓存,window对象.单例模式在js开发中单例模式的用途非常广泛,比如页面中有一个登录浮窗,无论单击多少次登录窗口,这个窗口只会创建一 ...