ubuntu下snmp错误Sub-id not found: (top) sysDescr解决

一般情况下我们安装snmp如下安装# sudo apt-get -y install snmp snmpd然后设置snmp配置用户名密码,我这里使用v3版本# sudo net-snmp-config --create-snmpv3-user -ro -A s...
继续阅读 »
一般情况下我们安装snmp如下安装
# sudo apt-get -y install snmp snmpd
然后设置snmp配置用户名密码,我这里使用v3版本
# sudo net-snmp-config --create-snmpv3-user -ro -A snmp@mima -a MD5 spuser

测试
# sudo snmpwalk -v 3 -u spuser -a MD5 -A "snmp@mima" -l authNoPriv 127.0.0.1 sysDescr
然后出现如下错误:
sysDescr: Unknown Object Identifier (Sub-id not found: (top) -> sysDescr)
这个是因为你缺少snmp所需的mib库,如下安装使用安装最新的mibs库
# sudo sudo apt-get install snmp-mibs-downloader
然后再测试,你还有可能会出错,那是因为snmp配置的mibs不是想要的,你只需要如下操作
# sudo > /etc/snmp/snmp.conf
把snmp文件清空,活着注释mibs那行也行!
最后你应该测试ok的,结果如下:
# sudo snmpwalk -v 3 -u spuser -a MD5 -A "snmp@mima" -l authNoPriv 127.0.0.1 sysDescr
SNMPv2-MIB::sysDescr.0 = STRING: Linux zabbixagent 2.6.32-431.11.5.el6.ucloud.x86_64 #1 SMP Thu Jul 3 09:42:34 CST 2014 x86_64
问题解决了,希望可以帮到同样遇到这样问题的人! 收起阅读 »

sed匹配行前行后加入一行数据

a 追加内容 sed '/匹配内容/a\要加入的内容' test.file(将内容追加到匹配内容目标行的下一行位置) i 插入内容 sed '/匹配内容/i\要加入的内容' test.file (将内容插入到匹配内容目标行的上一行位置)   Example:...
继续阅读 »
a 追加内容 sed '/匹配内容/a\要加入的内容' test.file(将内容追加到匹配内容目标行的下一行位置)
i 插入内容 sed '/匹配内容/i\要加入的内容' test.file (将内容插入到匹配内容目标行的上一行位置)
 


Example:


#我需要把文件中包含'10.0.1.110'这个关键词的行前或行后加入内容为"10.0.1.119  sendhost"一行记录
test.file 文件内容如下:
[root@mhost contorl]# cat test.file
10.0.1.114 masterweb
10.0.1.112 coredb1
10.0.1.110 wwwweb
10.0.1.113 coredb2
10.0.1.111 cache1
10.0.1.110 cache2
10.0.1.115 cache3


加在行后


[root@mhost contorl]# sed '/10.0.1.110/a\10.0.1.119 sendhost' test.file 
10.0.1.114 masterweb
10.0.1.112 coredb1
10.0.1.110 wwwweb
10.0.1.119 sendhost 已经加上
10.0.1.113 coredb2
10.0.1.111 cache1
10.0.1.110 cache2
10.0.1.119 sendhost 已经加上
10.0.1.115 cache3

#如果要精确匹配就是要把内容加到10.0.1.110 cache2下面一行的话,匹配内容就要精确
[root@mhost contorl]# sed '/10.0.1.110 cache2/a\10.0.1.119 sendhost' test.file
10.0.1.114 masterweb
10.0.1.112 coredb1
10.0.1.110 wwwweb
10.0.1.113 coredb2
10.0.1.111 cache1
10.0.1.110 cache2
10.0.1.119 sendhost 已经加上
10.0.1.115 cache3


加在行前


[root@mhost contorl]# sed '/10.0.1.110/i\10.0.1.119 sendhost' test.file 
10.0.1.114 masterweb
10.0.1.112 coredb1
10.0.1.119 sendhost 已经加上
10.0.1.110 wwwweb
10.0.1.113 coredb2
10.0.1.111 cache1
10.0.1.119 sendhost 已经加上
10.0.1.110 cache2
10.0.1.115 cache3

#如果要精确匹配就是要把内容加到10.0.1.110 cache2上面一行的话,匹配内容就要精确
[root@mhost contorl]# sed '/10.0.1.110 cache2/i\10.0.1.119 sendhost' test.file
10.0.1.114 masterweb
10.0.1.112 coredb1
10.0.1.110 wwwweb
10.0.1.113 coredb2
10.0.1.111 cache1
10.0.1.119 sendhost 已经加上
10.0.1.110 cache2
10.0.1.115 cache3
**确认修改没有问题sed -i 加-i 尝试然后放心修改! 收起阅读 »

扩展php的redis模块安装脚本

#!/bin/bash #Auth http://openskill.cn redis_module () {     cd /usr/local/src/ && wget https://codeload.github.com/nicolasff/phpr...
继续阅读 »
#!/bin/bash
#Auth http://openskill.cn

redis_module () {
    cd /usr/local/src/ && wget https://codeload.github.com/nicolasff/phpredis/zip/master    
    mv master redis-module.zip
    unzip redis-module.zip 
    cd phpredis-master/
    phpize && ./configure
    make && make install
    echo -e "[redis]\nextension=redis.so" > /etc/php.d/redis.ini
    php -m |grep -i redis
}
redis_module
收起阅读 »

Ansible Inventory详解

Inventory文件用来定义你想控制管理的服务器,默认配置文件是/etc/ansible/hosts,如下是一个简单的例子: [test] 10.0.3.56 [zabbix] 10.0.1.30 [web] 10.0.2.57 [zabbix], [w...
继续阅读 »

Inventory文件用来定义你想控制管理的服务器,默认配置文件是/etc/ansible/hosts,如下是一个简单的例子:


[test]
10.0.3.56

[zabbix]
10.0.1.30

[web]
10.0.2.57

[zabbix], [web]是对服务器分组的名称,指定组名。主机可以直接用ip地址,也可以用域名,还可以用数字和字母指定一批连续的服务器,如:


blog[1:3].os.com  相当于blog1.os.com  blog2.os.com blog3.os.com

我们已经了解到,Ansible默认是通过ssh的方式来远程管理批量服务器的,所以我们这里使用ssh key加密的方式来进行ssh的认证会更方便,当然,你也可以选择使用Ansible的时候加-k选项,来通过交互的方式输入密码。


Ansible已经可以通过密钥的方式管理主机后,我们就可以用Ansible直接来做一些简单的测试,如下:


ansible all -m ping  # 用于检测所有的主机是否存活,all默认指所有主机

如果只想检测某个组的话,可以把all替换成组名,例如:


ansible test -m ping

当然也可以直接输入管理主机的ip地址,例如:


ansible 10.0.3.56 -m ping

在默认的情况下Ansible是使用root用户来进行远程管理的,在大多数情况下,为了安全起见,一般会使用一个普通账户来管理。


我们可以在所有的被管理的机器上面创建一个ansible的用户,并且可以使用sudo来提升权限到root。当然我们在Ansible主机上面也需要这样一个用户,并且为其生成ssh key


然后通过修改/etc/ansible/ansible.cfg配置文件中的remote_user = ansibleAnsible默认使用ansible用户来进行管理,然后使用--sudo参数来获取root权限。


你也可以通过修改/etc/ansible/ansible.cfg里的remote_port端口来修改默认远程管理的ssh22端口。


一切完成后你就可以测试了:


ansible all -m ping --sudo

如果多台主机的管理账户各有不同的话,我们也可以在Inventory文件中处理,分割进行设置,例子如下:


[webserver]
10.0.1.3 ansible_ssh_user=root
10.0.2.3 ansible_ssh_user=nock
10.0.3.3 ansible_ssh_host=10.0.3.3 ansible_ssh_port=22000

[production]
10.0.1.3
10.0.2.3
aliyun-bj-tomcat1 ansible_ssh_user=work ansible_ssh_private_key_file=/home/work/.ssh/id_rsa

简单说明:



ansible_ssh_user —-> 用于管理远程主机的用户名
ansible_ssh_host —-> 用于指定被管理主机的端口
ansible_ssh_port —-> 用于指定ssh连接端口
ansible_ssh_private_key_file —-> 指定ssh key文件
host_key_checking=False 当你第一次连接远程主机的时候,会提示yes/no,设置为False会跳过这个环节。


主机组直接还可以嵌套,需要使用关键字children,示例:


[aliyunhost:children]
aliyunhost-mysql
aliyunhost-web
aliyunhost-redis

[aliyunhost-mysql]
10.0.1.81
10.0.1.82
10.0.1.88
10.0.1.89
10.0.1.96
10.0.1.107

[aliyunhost-web]
10.0.1.104
10.0.1.105

[aliyunhost-redis]
10.0.1.181
10.0.1.18

我们也可以通过多个Inventory文件来进行主机管理,默认是/etc/ansible/hosts,如果多个管理文件,需要执行ansible命令的时候,通过-i参数来指定:


ansible -i /etc/ansible/hosts2 -m ping

关于host就讲到这里,这是用来管理客户端的。

收起阅读 »

Ansible常用模块介绍

之前文章http://openskill.cn/article/120已经介绍了what is ansible?下面给大家介绍介绍ansible常用的几个模块   Ansible通过模块的方式来完成一些远程的管理工作。可以通过ansible-doc -l查看所...
继续阅读 »
之前文章http://openskill.cn/article/120已经介绍了what is ansible?下面给大家介绍介绍ansible常用的几个模块
 
Ansible通过模块的方式来完成一些远程的管理工作。可以通过ansible-doc -l查看所有模块,可以使用ansible-doc -s module来查看某个模块的参数具体用法,也可以使用ansible-doc help module来查看该模块更详细的信息。
 


setup


可以用来收集远程主机的一些基本信息:
ansible -i /etc/ansible/hosts test -m setup


ping


可以用来测试远程主机的运行状态:
ansible test -m ping


file


设置文件的属性
file模块包含如下选项:
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:
directory:如果目录不存在,创建目录
file:即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
示例:
ansible test -m file -a "src=/etc/fstab dest=/tmp/fstab state=link"
ansible test -m file -a "path=/tmp/fstab state=absent"
ansible test -m file -a "path=/tmp/test state=touch"
ansible test -m file -a "path=/tmp/test state=directory"
ansible test -m file -a "path=/tmp/testd state=directory owner=root group=root mode=777"


copy


复制文件到远程主机
copy模块包含如下选项:
backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代"src",可以直接设定指定文件的值
dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
directory_mode:递归的设定目录的权限,默认为系统默认权限
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:所有的file模块里的选项都可以在这里使用
src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
validate :The validation command to run before copying into place. The path to the file to validate is passed in via '%s' which must be present as in the visudo example below.
示例:
ansible test -m copy -a "src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644"
ansible test -m copy -a "src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes"
ansible test -m copy -a "src=/mine/sudoers dest=/etc/sudoers validate='visudo -cf %s'"


command


在远程主机上执行命令
command模块包含如下选项:
creates:一个文件名,当该文件存在,则该命令不执行
free_form:要执行的linux指令
chdir:在执行指令之前,先切换到该指定的目录
removes:一个文件名,当该文件不存在,则该选项不执行
executable:切换shell来执行指令,该执行路径必须是一个绝对路径
示例:
ansible test -a "ls /root"


shell


切换到某个shell执行指定的指令,参数与command相同。
示例:
ansible test -m shell -a "somescript.sh >> somelog.txt"


service


用于管理服务
该模块包含如下选项:
arguments:给命令行提供一些选项
enabled:是否开机启动 yes|no
name:必选项,服务名称
pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
runlevel:运行级别
sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
示例:
ansible test -m service -a "name=httpd state=started enabled=yes"
ansible test -m service -a "name=foo pattern=/usr/bin/foo state=started"
ansible test -m service -a "name=network state=restarted args=eth0"


cron


用于管理计划任务
包含如下选项:
backup:对远程主机上的原任务计划内容修改之前做备份
cron_file:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划
day:日(1-31,[i],[/i]/2,……)
hour:小时(0-23,[i],[/i]/2,……)
minute:分钟(0-59,[i],[/i]/2,……)
month:月(1-12,[i],[/i]/2,……)
weekday:周(0-7,*,……)
job:要执行的任务,依赖于state=present
name:该任务的描述
special_time:指定什么时候执行,参数:reboot,yearly,annually,monthly,weekly,daily,hourly
state:确认该任务计划是创建还是删除
user:以哪个用户的身份执行
示例:
ansible test -m cron -a 'name="check dirs" hour="5,2" job="ls -alh > /dev/null"'
ansible test -m cron -a 'name="a job for reboot" special_time=reboot job="/some/job.sh"'
ansible test -m cron -a 'name="yum autoupdate" weekday="2" minute=0 hour=12 user="root" job="YUMINTERACTIVE=0 /usr/sbin/yum-autoupdate" cron_file=ansible_yum-autoupdate'
ansilbe test -m cron -a 'cron_file=ansible_yum-autoupdate state=absent'


filesystem


在块设备上创建文件系统
选项:
dev:目标块设备
force:在一个已有文件系统的设备上强制创建
fstype:文件系统的类型
opts:传递给mkfs命令的选项


user


管理用户
home:
groups:
uid
password:
name:
createhome:
system:
remove:
state:
shell:
需要特别说明的是,password后面指定的密码不能是明文,后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,而登陆的时候输入的密码会被hash加密以后再去与/etc/shadow中存放的密码去做对比,会出现不一致的现象。所以需要先将密码字符串进行加密处理:openssl passwd -salt -1 "123456",然后将得到的字符串放到password中即可。


synchronize


使用rsync同步文件
archive
checksum
delete
dest
src
dest_port
existing_only: skip createing new files on receiver
links
owner
mode:(push, pull)
recursive
rsync_path
times:Preserve modification times
示例:
src=some/relative/path dest=/some/absolute/path rsync_path="sudo rsync"
src=some/relative/path dest=/some/absolute/path archive=no links=yes
src=some/relative/path dest=/some/absolute/path checksum=yes times=no
src=/tmp/helloworld dest=/var/www/helloword rsync_opts=--no-motd,--exclude=.git mode=pull


mount


配置挂载点
选项:
dump
fstype:必选项,挂载文件的类型
name:必选项,挂载点
opts:传递给mount命令的参数
passno
src:必选项,要挂载的文件
state:必选项
present:只处理fstab中的配置
absent:删除挂载点
mounted:自动创建挂载点并挂载之
umounted:卸载
示例:
name=/mnt/dvd src=/dev/sr0 fstype=iso9660 opts=ro state=present
name=/srv/disk src='LABEL=SOME_LABEL' state=present
name=/home src='UUID=b3e48f45-f933-4c8e-a700-22a159ec9077' opts=noatime state=present

ansible test -a 'dd if=/dev/zero of=/disk.img bs=4k count=1024'
ansible test -a 'losetup /dev/loop0 /disk.img'
ansible test -m filesystem 'fstype=ext4 force=yes opts=-F dev=/dev/loop0'
ansible test -m mount 'name=/mnt src=/dev/loop0 fstype=ext4 state=mounted opts=rw'


raw


类似command,可以传递管道
原文地址:http://devopsh.com/774.html  收起阅读 »

解决RedHat5.8无法利用yum安装软件问题

好久都没有用红帽系统了,今天一位测试的同事,在RedHat5.8的环境需要测试,安装apache,但是报没有gcc,但是用yum安装gcc结果如下: [root@localhost ~]# yum -y install gcc Loaded plugins...
继续阅读 »


好久都没有用红帽系统了,今天一位测试的同事,在RedHat5.8的环境需要测试,安装apache,但是报没有gcc,但是用yum安装gcc结果如下:


[root@localhost ~]# yum -y install gcc
Loaded plugins: katello, product-id, security, subscription-manager
Updating certificate-based repositories.
Unable to read consumer identity
Setting up Install Process
No package gcc available.
Nothing to do
报没有gcc软件包存在,她没有办法,只好叫我帮忙弄好了!
 
系统版本如下:
[root@localhost ~]# cat /etc/issue
Red Hat Enterprise Linux Server release 5.8 (Tikanga)
Kernel \r on an \m
解决过程:


下载163安装源


[root@localhost~]# wget http://mirrors.163.com/.help/CentOS5-Base-163.repo
--2015-10-09 14:33:10-- http://mirrors.163.com/.help/CentOS5-Base-163.repo
Resolving mirrors.163.com... 123.58.173.186,123.58.173.185
Connecting to mirrors.163.com|123.58.173.186|:80...connected.
HTTP request sent, awaiting response... 200 OK
Length: 2341 (2.3K) [application/octet-stream]
Saving to: `CentOS5-Base-163.repo'

100%2,341 --.-K/s in 0s

2015-10-09 14:33:22 (108 MB/s) -`CentOS5-Base-163.repo' saved [2341/2341]
[root@localhost~]# mv CentOS5-Base-163.repo /etc/yum.repos.d/


修改repo文件


*** 把$releasever替换成5
[root@localhost yum.repos.d]# sed -i 's#$releasever#5#g' ./CentOS5-Base-163.repo


清除原有缓存


[root@localhost yum.repos.d]# yum clean all
Loaded plugins: katello, product-id, security, subscription-manager
Updating certificate-based repositories.
Unable to read consumer identity
Cleaning up Everything


获取yum列表


[root@localhost yum.repos.d]# yum makecache
Loaded plugins: katello, product-id, security, subscription-manager
Updating certificate-based repositories.
Unable to read consumer identity
addons | 1.9 kB 00:00
addons/filelists_db | 570 B 00:00
addons/other_db | 554 B 00:00
addons/primary_db | 1.1 kB 00:00
base | 1.1 kB 00:00
base/filelists | 3.7 MB 00:11
base/other | 14 MB 01:04
base/group | 1.1 MB 00:03
base/primary | 1.3 MB 00:06
epel | 3.6 kB 00:00
epel/filelists_db | 4.1 MB 00:16
epel/updateinfo | 510 kB 00:02
epel/other_db | 1.6 MB 00:05
epel/primary_db | 2.9 MB 00:14
extras | 2.1 kB 00:00
extras/filelists_db | 224 kB 00:00
extras/other_db | 442 kB 00:01
extras/group | 9.7 kB 00:00
extras/primary_db | 173 kB 00:00
updates | 1.9 kB 00:00
updates/filelists_db | 2.1 MB 00:09
updates/other_db | 11 MB 00:29
updates/primary_db | 531 kB 00:00
base 3667/3667
base 3667/3667
base 3667/3667
Metadata Cache Created


搜索安装


gcc.png
[root@localhost yum.repos.d]# yum -y install gcc

收起阅读 »

Ansible工作原理

Ansible是一款非常简单的IT自动化引擎,可自动执行 云配置 ,配置管理,应用程序部署,服务内编排和许多其他IT需求。 从第一天开始,Ansible就专为多层部署而设计,它通过描述所有系统之间的相互关系来建模IT基础架构,而不仅仅是一次管理一个系统。...
继续阅读 »

Ansible是一款非常简单的IT自动化引擎,可自动执行 云配置配置管理应用程序部署服务内编排和许多其他IT需求。


从第一天开始,Ansible就专为多层部署而设计,它通过描述所有系统之间的相互关系来建模IT基础架构,而不仅仅是一次管理一个系统。


它不使用任何代理程序,也不使用其他自定义安全性基础结构,因此易于部署-最重要的是,它使用一种非常简单的语言(YAML,以Ansible Playbooks的形式)。


高效的架构

Ansible通过连接到节点并向其推出称为Ansible模块的小程序来工作。这些程序被编写为系统所需状态的资源模型。然后,Ansible执行这些模块(默认情况下通过SSH),并在完成后将其删除。


您的模块库可以驻留在任何计算机上,并且不需要服务器,守护程序或数据库。通常,您将使用自己喜欢的终端程序,文本编辑器以及可能的版本控制系统来跟踪内容的更改。


友好的SSH密钥

支持密码,但是带有ssh-agent的SSH密钥是使用Ansible的最佳方法之一。尽管如果您想使用Kerberos,那也很好。很多选择!


不需要root用户登录,您可以以任何用户身份登录,然后以su或sudo身份登录到任何用户。


Ansible的authorized_key模块是使用ansible控制哪些机器可以访问哪些主机的好方法。也可以使用其他选项,例如kerberos或身份管理系统。


ssh-agent bash
ssh-add〜/ .ssh / id_rsa

以简单的文本文件管理库存

默认情况下,Ansible使用一个非常简单的INI文件表示要管理的计算机,该文件将所有受管计算机放入您自己选择的组中。


要添加新计算机,无需使用其他SSL签名服务器,因此,毫无疑问可以确定为什么特定的计算机由于NTP或DNS问题而无法链接。


如果您的基础架构中还有其他来源,Ansible也可以对此进行插件,例如从EC2,Rackspace,OpenStack等来源中绘制库存,组和变量信息。


纯文本清单文件如下:


[webservers]
www1.example.com
www2.example.com

[dbservers]
db0.example.com
db1.example.com

一旦列出清单主机,就可以在简单的文本文件(在名为“ group_vars /”或“ host_vars /”的子目录中)中或直接在清单文件中为它们分配变量。


或者,正如已经提到的,使用动态清单从EC2,Rackspace或OpenStack等数据源中提取清单。


使用Ansible AD DOC并发执行任务

有了可用实例后,您可以立即与其进行对话,而无需进行任何其他设置:


ansible all -m ping 
ansible foo.example.com -m yum -a "name=httpd state=installed"
ansible foo.example.com -a "/usr/sbin/reboot"

请注意,我们有权访问基于状态的资源模块以及运行原始命令。这些模块非常易于编写,Ansible附带了许多模块,因此您的大部分工作已经完成。
Ansible包含一个巨大的内置模块工具箱,其中有750多个。


手册:简单而强大的自动化语言

PLaybook可以很好地协调基础结构拓扑的多个部分,并且可以非常详细地控制一次要处理的计算机数量。这是Ansible开始变得最有趣的地方。


Ansible的编排方法是微调的简单方法之一,因为我们相信您的自动化代码对您来说很有意义,而且对于特殊的语法或功能,您应该几乎不需要记住。


这是一本剧本的样子。提醒一下,这仅是预告片-跳至 docs.ansible.com 以获取完整的文档以及所有可能的方法。


---
- hosts: webservers
serial: 5 # update 5 machines at a time
roles:
- common
- webapp
- hosts: content_servers
roles:
- common
- content

例如app_config.yml可能看起来像:


---
- yum: name={{contact.item}} state=installed
with_items:
- app_server
- acme_software


- service: name=app_server state=running enabled=yes


- template: src=/opt/code/templates/foo.j2 dest=/etc/foo.conf
notify:
- restart app server

该Ansible文档更加深入探讨了这一点。您还可以做很多事情,包括:


  • 从负载均衡器和监视窗口中取出机器
  • 使用收集到的有关特定服务器的事实,让一台服务器知道所有其他服务器的IP地址-并使用这些服务器动态构建配置文件
  • 设置一些变量并提示其他变量,并设置未设置时的默认值
  • 使用一个命令的结果来决定是否运行另一个命令
  • 有许多先进的可能性,但是很容易上手。

最重要的是,该语言保持可读性和透明性,并且您无需执行诸如声明显式排序关系或使用编程语言编写代码之类的事情。


扩展可扩展性:模块,插件和API

如果您想编写自己的模块,则可以使用任何可返回JSON的语言(Ruby,Python,bash等)编写Ansible模块。库存还可以通过编写与该数据源对话并返回JSON的程序来插入任何数据源。还有各种Python API用于扩展Ansible的连接类型(SSH并非唯一的传输方式),回调(Ansible日志的方式等),甚至用于添加新的服务器端行为。


原文: https://www.ansible.com/overview/how-ansible-works

收起阅读 »

Ansible介绍

Ansible是一个自动化工具。它可以配置系统,部署软件,编排更高级的任务,比如连续部署或零停机时间滚动更新。 Ansible的目标是最简单和最易用。它也有一个强烈关注安全性和可靠性,以最少的移动部件,使用OpenSSH运输(加速插座模式和拉模式选择),和设计...
继续阅读 »

Ansible是一个自动化工具。它可以配置系统,部署软件,编排更高级的任务,比如连续部署或零停机时间滚动更新。


Ansible的目标是最简单和最易用。它也有一个强烈关注安全性和可靠性,以最少的移动部件,使用OpenSSH运输(加速插座模式和拉模式选择),和设计语言,人类可审核性的 - 甚至是那些不熟悉程序。


我们认为简单是所有大小的环境和相关的设计对于忙碌的所有类型的用户——这是否意味着开发人员、系统管理员,发布工程师,经理,无处不在。Ansible适合管理小设置少量的实例以及与许多成千上万的企业环境。


Ansible管理机器以最好的方式。没有一个问题如何升级远程守护进程或无法管理系统的问题因为守护进程是卸载。OpenSSH是最同行评议的开源组件,使用该工具的安全风险大大降低。Ansible是分散的,它依赖于现有的操作系统凭证来控制访问远程机器,如果需要使用Kerberos,它可以很容易地连接LDAP和其他管理系统的集中式身份验证。


Ansible是一个彻底的简单自动化引擎,自动化云配置,配置管理、应用程序部署,intra-service编排,以及许多其他的需求。


被设计为多层部署自第一天,Ansible模型你的IT基础设施,描述如何推动你所有的系统,而不仅仅是管理一个系统。


它使用没有代理,没有额外的自定义安全基础设施,所以很容易部署,最重要的是,它使用一个非常简单的语言(YAML Ansible Playbooks的形式),让你描述你的自动化工作的方式方法简明英语。


我们利用Ansible主要是作为内网服务器的一些管理,因为他用ssh来管理配置,内网同学还是很快速的,外网主要是利用Saltstack,利用消息队列远程通信,我感觉是比Ansible好的。

收起阅读 »

Nginx源码安装错误分析一则

    最近跟一个公司合作,要把我们的应用安装在他们的服务器上,不过问题来了。他们为了他们自己服务器安全,不给我们root权限,只给了我们普通用户权限,所有的程序都要装在规定的路径里,限制可不少。没办法装吧~~~       我登录到服务器上一看傻了...
继续阅读 »
nginx_logo.png

    最近跟一个公司合作,要把我们的应用安装在他们的服务器上,不过问题来了。他们为了他们自己服务器安全,不给我们root权限,只给了我们普通用户权限,所有的程序都要装在规定的路径里,限制可不少。没办法装吧~~~
 
    我登录到服务器上一看傻了,rpm -qa 一查 需要的包没装几个。一个个下源码包就装吧~~ 到源码站下载了一大堆包开始装,pcre openssl xml mhash mcrypt等等一步步开始装,磕磕绊绊少什么装什么终于装到了nginx 结果make的时候报错了:
make -f objs/Makefile
make[1]: Entering directory `/data/source/nginx'
cd /usr/local/ufo/lib/pcre \
&& if [ -f Makefile ]; then make distclean; fi \
&& CC="gcc" CFLAGS="-O2 -fomit-frame-pointer -pipe " \
./configure --disable-shared
/bin/sh: ./configure: No such file or directory
make[1]: *** [/usr/local/services/lib/pcre/Makefile] Error 127
make[1]: Leaving directory `/data/source/nginx-0.7.61'
make: *** [build] Error 2
    我明明指定了 pcre的路径啊 我又仔细看了看路径是不是有问题!没问题啊,奇怪了我指定了路径怎么会 出现这样的过程呢 cd /usr/local/ufo/lib/pcre 他去安装目录 运行什么 ./configure 啊!
 
    这时我的一个同事仔细看了看 ./configure --help 然后让我看看下面这条
    原来是这样啊~~嗨
--with-pcre                     force PCRE library usage
--with-pcre=DIR set path to PCRE library sources
    原来这个路径指定的是 源码包所在的路径啊~~~晕,nginx为什么要去自己重现编译pcre 呢?

    指定源码包的路径吧 ./configure ...... --with-pcre=/data/source/pcre

    再次make OK 一切顺利,终于装上了。
 
    我在网上搜索的时候发现很多朋友遇到了这个问题,但是没有什么好的办法 (当然,因为没有root权限是没法安装rpm包的,其实只要装上pcre-devel包就好了)
    
    呵呵,希望遇到这种情况的朋友能看到我的这篇帖子O(∩_∩)O~
    原文地址:开源技术社区转载分享 收起阅读 »

Netstat命令详解

简介     Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。   输出信息含义     执行...
继续阅读 »
简介
    Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
 
输出信息含义
    执行netstat后,其输出结果为
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED
tcp 296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED
tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED
tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED
tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE

Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 1 [ ] STREAM CONNECTED 16178 @000000dd
unix 1 [ ] STREAM CONNECTED 16176 @000000dc
unix 9 [ ] DGRAM 5292 /dev/log
unix 1 [ ] STREAM CONNECTED 16182 @000000df
    从整体上看,netstat的输出结果可以分为两个部分:
        一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。
 
        另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。
 
常见参数
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
实用命令实例


1. 列出所有端口 (包括监听和未监听的)


列出所有端口 netstat -a
# netstat -a | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:30037 [i]:[/i] LISTEN
udp 0 0 [i]:bootpc [/i]:*

Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 6135 /tmp/.X11-unix/X0
unix 2 [ ACC ] STREAM LISTENING 5140 /var/run/acpid.socket
列出所有 tcp 端口 netstat -at
# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:30037 [i]:[/i] LISTEN
tcp 0 0 localhost:ipp [i]:[/i] LISTEN
tcp 0 0 [i]:smtp [/i]:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
列出所有 udp 端口 netstat -au
# netstat -au
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 [i]:bootpc [/i]:*
udp 0 0 [i]:49119 [/i]:*
udp 0 0 [i]:mdns [/i]:*


  1. 列出所有处于监听状态的 Sockets


只显示监听端口 netstat -l
# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:ipp [i]:[/i] LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
udp 0 0 *:49119
只列出所有监听 tcp 端口 netstat -lt
# netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:30037 [i]:[/i] LISTEN
tcp 0 0 [i]:smtp [/i]:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
只列出所有监听 udp 端口 netstat -lu
# netstat -lu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 [i]:49119 [/i]:*
udp 0 0 [i]:mdns [/i]:*
只列出所有监听 UNIX 端口 netstat -lx
# netstat -lx
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 6294 private/maildrop
unix 2 [ ACC ] STREAM LISTENING 6203 public/cleanup
unix 2 [ ACC ] STREAM LISTENING 6302 private/ifmail
unix 2 [ ACC ] STREAM LISTENING 6306 private/bsmtp


  1. 显示每个协议的统计信息


显示所有端口的统计信息 netstat -s
# netstat -s
Ip:
total packets received
with invalid addresses
forwarded
incoming packets discarded
incoming packets delivered
requests sent out
Icmp:
ICMP messages received
input ICMP message failed.
Tcp:
active connections openings
failed connection attempts
connection resets received
Udp:
packets received
packets to unknown port received.
.....
显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su
# netstat -st 
# netstat -su


  1. 在 netstat 输出中显示 PID 和进程名称 netstat -p


netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。
# netstat -pt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 1 0 ramesh-laptop.loc:47212 192.168.185.75:www CLOSE_WAIT 2109/firefox
tcp 0 0 ramesh-laptop.loc:52750 lax:www ESTABLISHED 2109/firefox

 


  1. 在 netstat 输出中不显示主机,端口和用户名 (host, port or user)


当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。

同样可以加速输出,因为不用进行比对查询。
# netstat -an
如果只是不想让这三个名称中的一个被显示,使用以下命令
# netsat -a --numeric-ports
# netsat -a --numeric-hosts
# netsat -a --numeric-users


  1. 持续输出 netstat 信息


netstat 将每隔一秒输出网络信息。
# netstat -c
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 ramesh-laptop.loc:36130 101-101-181-225.ama:www ESTABLISHED
tcp 1 1 ramesh-laptop.loc:52564 101.11.169.230:www CLOSING
tcp 0 0 ramesh-laptop.loc:43758 server-101-101-43-2:www ESTABLISHED
tcp 1 1 ramesh-laptop.loc:42367 101.101.34.101:www CLOSING
^C


  1. 显示系统不支持的地址族 (Address Families)


netstat --verbose
在输出的末尾,会有如下的信息
netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.
netstat: no support for `AF X25' on this system.
netstat: no support for `AF NETROM' on this system.


  1. 显示核心路由信息 netstat -r


# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth2
link-local * 255.255.0.0 U 0 0 0 eth2
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth2
注意: 使用 netstat -rn 显示数字格式,不查询主机名称。
 


  1. 找出程序运行的端口


并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
# netstat -ap | grep ssh
tcp 1 0 dev-db:ssh 101.174.100.22:39213 CLOSE_WAIT -
tcp 1 0 dev-db:ssh 101.174.100.22:57643 CLOSE_WAIT -
找出运行在指定端口的进程
# netstat -an | grep ':80'


  1. 显示网络接口列表


查看连接某服务端口最多的的IP地址
wss8848@ubuntu:~$ netstat -nat | grep "192.168.1.15:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20
221.136.168.36
154.74.45.242
78.173.31.236
62.183.207.98
192.168.1.14
182.48.111.215
124.193.219.34
119.145.41.2
114.255.41.30
75.102.11.99
TCP各种状态列表
wss8848@ubuntu:~$ netstat -nat |awk '{print $6}'
established)
Foreign
LISTEN
TIME_WAIT
ESTABLISHED
TIME_WAIT
SYN_SENT
先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。
wss8848@ubuntu:~$ netstat -nat |awk '{print $6}'|sort|uniq -c
ESTABLISHED
FIN_WAIT1
Foreign
LAST_ACK
LISTEN
SYN_SENT
TIME_WAIT
established)
最后的命令如下:
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
分析access.log获得访问前10位的ip地址
awk '{print $1}' access.log |sort|uniq -c|sort -nr|head -10
参考资料:http://blog.maxiang.net/10-netstat-command-examples/139/
                http://www.ipcpu.com/2011/07/netstat-linux/ 收起阅读 »