利用Linux系统生成随机密码的8种方法

文章转载自:https://www.cnblogs.com/dadonggg/p/8477655.html

Linux操作系统的一大优点是对于同样一件事情,你可以使用高达数百种方法来实现它。例如,你可以通过数十种方法来生成随机密码。本文将介绍生成随机密码的十种方法。

1. 使用SHA算法来加密日期,并输出结果的前10个字符:

[root@kafka60 shell]# date +%s |sha256sum |base64 |head -c 10 ;echo
YTc4Mjk0Yj

2. 使用内嵌的/dev/urandom,并过滤掉那些日常不怎么使用的字符。这里也只输出结果的前32个字符:

 1 #tr参数 
 2 -c或——complerment:取代所有不属于第一字符集的字符;
 3 -d或——delete:删除所有属于第一字符集的字符;
 4 1.生成10个小写字母
 5 [root@kafka60 shell]# < /dev/urandom tr -dc a-z|head -c ${1:-10};echo
 6 iprnfrqlhr
 7 2.生成10个大写字母
 8 [root@kafka60 shell]# < /dev/urandom tr -dc A-Z|head -c ${1:-10};echo
 9 PSKSFZYQPH
10 3.生成10个数字
11 [root@kafka60 shell]# < /dev/urandom tr -dc 0-9|head -c ${1:-10};echo
12 7341384592
13 4.生成10个数字和大写字母的组合字符串
14 [root@kafka60 shell]# < /dev/urandom tr -dc 0-9-A-Z|head -c ${1:-10};echo
15 M6HP4LHTNJ
16 5.生成10个随机字符(包含数字,大写字母,小写字母)
17 [root@kafka60 shell]# < /dev/urandom tr -dc 0-9-A-Z-a-z|head -c ${1:-10};echo
18 79JUYcjrjx
19 6.生成10个随机字符(包含数字,大写字母,小写字母)
20 [root@kafka60 shell]# < /dev/urandom tr -dc 0-9-A-Z-a-z-|head -c ${1:-10};echo
21 JdOi4TMmZD
22 7.生成10个随机字符(包含数字,大写字母,小写字母,特殊字符)
23 [root@kafka60 shell]# < /dev/urandom tr -dc 0-9-A-Z-a-z-/|head -c ${1:-10};echo
24 s5-yTgMa8G

3. 使用openssl的随机函数

[root@kafka60 shell]# openssl rand -base64 10
6kf9CHiiRgiSVQ==
[root@kafka60 shell]# openssl rand -base64 10|tr A-Z a-z
1ivhbhsrvjsfsa==
[root@kafka60 shell]# openssl rand -base64 32|tr A-Z a-z|cut -c 1-10
hbxd/42tag

4. 这种方法类似于之前的urandom,但它是反向工作的。

[root@kafka60 shell]# tr -cd '[:alnum:]' </dev/urandom |fold -w32|head -n1         ##-w32表示生成32个字符的宽度字符
PezxAXSxVNKL3GQcjovgmoiIaDVByxXT
[root@kafka60 shell]# tr -cd '[:alnum:]' </dev/urandom |fold -w10|head -n1
b1r4qLm09S

5. 使用string命令,它从一个文件中输出可打印的字符串

[root@kafka60 shell]# strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 32 | tr -d '\n'; echo
zFSi9lMfBe6igWotELx0O85sx1hL2ux7

6. 这是使用urandom的一个更简单的版本

[root@kafka60 shell]# </dev/urandom tr -dc _A-Z-a-z-0-9|head -c32;echo
cBdmH-Y7fPzROb4pjCMV7CWK75OHcXgV
[root@kafka60 shell]# </dev/urandom tr -dc a-z-0-9|head -c32;echo
oyglc4qzbd54alegng40k0kvrb8m6q9k
[root@kafka60 shell]# </dev/urandom tr -dc a-z-0-9|head -c10;echo
qzghgesb2w

7. 使用非常有用的dd命令

[root@kafka60 shell]# dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev
T5cfmBaTX1xcUo+aa4wK+XKF/ydh1VqovEyl8oCxmsw
[root@kafka60 shell]# dd if=/dev/urandom bs=1 count=10 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev
KQqr7OPAoaHsIg=

8. 你甚至可以生成一个只用左手便可以输入的密码

[root@kafka60 shell]# </dev/urandom tr -dc '12345!@#$%qwertQWERTasdfgASDFGzxcvbZXCVB' | head -c32; echo
xRzqRTxVwzt2eaa13Ad!Gbt2rsVBAf$r
[root@kafka60 shell]# </dev/urandom tr -dc '12345!@#$%qwertQWERTasdfgASDFGzxcvbZXCVB' | head -c10; echo
!t#@C3@QTe
发表在 LinuxBasic | 标签为 | 留下评论

利用GitLab webhook来实现触发Jenkins自动操作

本文针对如何设置GitLab以及Jenkins,实现每次GitLab上有提交事件的时候,都能触发Jenkins执行相应的操作,主要分为以下几个步骤:(注意,不同的版本,操作步骤、选项位置可能不一样,但是大同小异)

1、新建GitLab测试用例

进入个人GitLab账号,在右上角的加号中,选择GitLab 的 New Project,或者直接点击右上角的绿色 New Project 按钮,可以新建个人的GitLab工程:

其余都走默认的设置,填写好project的名字,可以创建一个新的project,权限该咋配咋配,我这里新建的是test, 如图:(我为了方便演示,选择public权限,private无非就是去gitlab设置账号密码等等,这里不专门讨论这个)

2、设置Jenkins

2.1 首先安装 GitLab plugin

在“系统管理”->“插件管理”,查看已安装插件,输入 GitLab, 看看是否已经安装,如果没有,则 查看 可选插件,搜索 GitLab,安装后重启即可。

2.2 新建一个测试工程

新建一个job,如图:

源码管理选择Git, 输入刚刚新建的GitLab的 URL,我这是公开项目,你是私有的,那就设置好你的git。

目前只有master分支,后续可以根据不同分支对应设置不同的url,监听不同分支的情况。
在构建触发器选项中,勾选 Build when a change is pushed to GitLab ,该选项最后的URL就是这个工程的URL路径,注意如果是本机,则会显示localhost, 可以将localhost改为个人的ip。
注意这个url:http://192.168.31.36:8080/project/test10

下一步会用到这个url。可以在工程中设置构建后的操作为执行一句python脚本: print(“gitlab webhook jenkins”)。点击应用和保存。

3. 设置GitLab的webhook

GitLab版本在不断变换,该版本的GitLab,如图可以找到WebHook的设置入口:

你的可能是这个,反正都是一样的,有时候功能可能会移到其他地方,你得找一下

填入的url就是刚刚测试, 勾选push Event,这样就是每次有push操作的时候,就会触发webhook,执行填入的url中的操作:

(因为我的jenkins服务器是台内网服务器,所以操作很方便,但是你操作的时候,jenkins和gitlab要能相通才行,比如,一个是内网,一个是外网,那肯定不行,必须搞通,否则他怎么去收发数据?)

填入URL

如果出现添加不上的,如下所示:提示 Url is blocked: Requests to the local network are not allowed。那你需要用系统管理员账号去打开权限

用系统管理员登陆,选择Setting里的Network

把Allow requests to the local network from hooks and services 打勾,然后保存配置

返回我刚才创建的test用户,这次可以正常保存了

点击保存,然后点击Test,可以测试是否可以执行

如果返回200就说明测试成功,钩子可以正常使用了

如果报错,比如404,403,500等等,不用惊慌失措,基本上都是jenkins权限配置的问题,我只搜了些报错你们参考下:

备注:为了方便演示,我写了个简单的输出hello world的pipeline语法,你们自行参考:

一般会报这些错误:

3.1 anonymous build

不支持匿名build, 这是回到jenkins中,在 系统管理 -> 全局安全管理中, 勾选 匿名用户具有可读权限 如图:

然后点击应用和保存, 回到GitLab,继续测试. 如果继续抱该错,则进入刚刚构建的工程,点击 构建触发器中选中的Build When a change is pushed右下角的高级选项,有一个Secret token,点击 Generate,会生成一个安全代码:

 

复制到webhook中的url下面:

然后保存,再测试,就可以通过,这时候会触发jenkins执行一次操作:

看看控制台输出:

3.2 valid crumb

如果报该错,则在安全设置中,不勾选 CSRF, 如图:

测试通过,后续可以在此基础上拓展, 监听不同GitLab,同一个GitLab的不同分支的push操作,来分别触发jenkins端执行对应的操作。

总之我遇到的错基本都是jenkins的权限配置问题,如果权限要配得非常精细,那调整的参数选项就很多,处处都要留意。另外如果gitlab测试时报错不一定就是失败,我就遇到过测试时死活通不过,各种报错,但是无意间回到jenkins一看,钩子居然触发了。

4. GitLab webhook的原理

hook就是在相应的事件下设置钩子,当相应的事件触发的时候,比如push event, merge event等操作的时候,就会触发hook下面的脚本执行,而gitlab webhook, 就是会触发执行这个webhook的url,类似于前面在jenkins调用中提到的打开url触发jenkins执行job。

发表在 jenkins | 标签为 | 留下评论

设置开机自启服务、脚本的方法

1、添加开机自启服务

我这里以docker 服务为例,设置如下两条命令即可:

1# systemctl enable docker.service #设置docker服务为自启动服务 相当于我们的 chkconfig docker on

2# systemctl start docker.service #启动docker服务

2、添加开机自启脚本

在centos7中增加脚本有两种常用的方法,以脚本StartTomcat.sh为例:

#!/bin/bash
# description:开机自启脚本
/usr/local/tomcat/bin/startup.sh  #启动tomcat

方法一:

1、赋予脚本可执行权限(/opt/script/StartTomcat.sh是你的脚本路径)

# chmod +x /opt/script/StartTomcat.sh

2、打开/etc/rc.d/rc.local文件,在末尾增加如下内容

echo "/opt/script/StartTomcat.sh" >> /etc/rc.d/rc.local

3、在centos7中,/etc/rc.d/rc.local的权限被降低了,所以需要执行如下命令赋予其可执行权限

chmod +x /etc/rc.d/rc.local

方法二:

1、将脚本移动到/etc/rc.d/init.d目录下

# mv  /opt/script/StartTomcat.sh /etc/rc.d/init.d

2、增加脚本的可执行权限

chmod +x  /etc/rc.d/init.d/StartTomcat.sh

3、添加脚本到开机自动启动项目中

cd /etc/rc.d/init.d
chkconfig --add StartTomcat.sh
chkconfig StartTomcat.sh on
发表在 LinuxBasic | 标签为 | 留下评论

Jenkins – SSH认证方式拉取Git代码

1、生成本地密钥(没有的,用ssh-keygen生成)

[root@jmp ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yt60CeJSGyUwcDtrddVS+xOnAr3WhvgERR4srsHzdAw root@jmp
The key's randomart image is:
+---[RSA 2048]----+
|... .== |
| .o. .E+oo |
| oo....o=+ . . |
| +..= o+o= + |
| o o *S.* * |
| . o....+ o . |
| ..o+ . . |
| ...o + o |
| .. . + |
+----[SHA256]-----+

私钥如下

[root@jmp ~]# cat /root/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAr6hcLM5HtOwvL4z28sYBpYJhgZpaGAbnlCOr5d+28nn93TB8
26H2lobJiWY6ahqbpTYb3A5JlJ1CAXeYtvSZRCP+Gy7W2YJZEeq1fpfTUKyP+sVT
qKjqQVRXlfnaZmcuzWtk08Nwq2LqHn007QJ4/pQKo70/+81wwRPf+A0WzmeCco3y
QFw/TCfM8WUIPjcEDnJBKrRug8/0KNmu+foEPk2S3kZs2VN8VmLEnUDCD10Olysl
cBshbpDMZ9rUob1mxVMVPQ6G/dMGkEyNbbXGcUvvhausTz/VyKrKS0NUCTcwYp69
8vm3YDmewCQCO2SL5Qc0EXRUL9IdsYf7ndKgawIDAQABAoIBABNDYFBdksmJeSc6
yz4WbsnKwYyn86dc4nqBavF7liGDNU7TaW3glh0tzN4vgspt/pGgnG+GdZVBpaJp
jirKKiCp3cz3VwJlZAUt+xdV6QuY0PVMPH9rfr0JVc2Rp9zBBgXq+BStAycYYtpT
GsG/Gqu4am5Ia8LeZbYWyuH19YFO8+0iuFLLZ+cY5qtPkBhdyNfn5cEVwLZkbiGA
boQSo7gYJ2vn2szI3YGJBo96IxXCidrSEj8r9U9uGt9+9rrx4eCwXqBvnqrJibwY
3iizU+/BFr2mvqa8mwnql/5AQcCSMfwRa2eMZlLMgfZGi65jmmX9SZtHs8LnZtPw
nf1snIkCgYEA6OnJHb1YZQLtTTUxzp+uV4dTBbh5N8hcu71gDkAW6EYt0s01sJgc
eYfHyNTkTIL2Q+g8FsQkXDndu7qeqsx0JLf2roMydE507vAbLUURXvW2BpmXUqh2
DJlt5SxS6qCFw2WxOdNZZGsnEosCbv46kQ9a5sLYGHeQkYfunu2blb8CgYEAwRG0
SUFglPzLlkZlnNvXB7nIXhHBL/WTnadnP1LMNo0XQR2FwdME2QvaRtDZdwM1C2RQ
FVwPr+QvDA9x3r/tlCvXvdvwaIOwtjfpfFBXTNYPJGqnvAQ1wfiA00fknxgfb4sS
giFFkbZjMxgndDdiKPD4FHACvuv4ZNN0UeTgGFUCgYEAgJEMQy5RrPCArS2/4J6k
TgyU94Ns5i3jgn52l2cpPe3/PW2pRWGx1iPtVB6wJsvjxHhdMvPyXjZS/110WDOj
qOEjehFRuIHWak5/se1+OTzIzbvam/YBs9K9ptNgscMKE2H/Ajx4C8ZaOxIgtcP/
8DLZqqfDQT4+vxaZ0YC3cWECgYANgdiUG2/PXJQ9sjUfsT2s+7Fp62IRoeOu7uxJ
QNiqpFpRIuids86uBKdDtw7PxbirUFxN8j/itVsZQ+dahyDu8dZJIR8DoNr3FJhQ
KyrAZGVwzcloXP8J0AHrRidXfg+M9TTZR8yfMhxkkbcI6WsDpEAm5eM7SjT5kNWd
eR64dQKBgBqVWjjv/g02T0EknoizJZ9KjOBudijaK6QsFz9nkt19F6y7vZ1hOmF7
OpVb8YE0vHvfBsBo5tiZkrmb0zTVtaueJ0V2SzSncxDXWzxdGjksmeRpg+F6dUlF
LoF+Z4LzuC7pKdsJnHh3L28Z4RxQ3SdKs1XajXVyk4Rj/rKDtE5p
-----END RSA PRIVATE KEY-----

公钥如下

[root@jmp ~]# cat /root/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvqFwszke07C8vjPbyxgGlgmGBmloYBueUI6vl37byef3dMHzbofaWhsmJZjpqGpulNhvcDkmUnUIBd5i29JlEI/4bLtbZglkR6rV+l9NQrI/6xVOoqOpBVFeV+dpmZy7Na2TTw3CrYuoefTTtAnj+lAqjvT/7zXDBE9/4DRbOZ4JyjfJAXD9MJ8zxZQg+NwQOckEqtG6Dz/Qo2a75+gQ+TZLeRmzZU3xWYsSdQMIPXQ6XKyVwGyFukMxn2tShvWbFUxU9Dob90waQTI1ttcZxS++Fq6xPP9XIqspLQ1QJNzBinr3y+bdgOZ7AJAI7ZIvlBzQRdFQv0h2xh/ud0qBr root@jmp

2、将公钥加入Git-Project中

进入Project > Repository Settings > Deploy Keys中,加入第二步查看的公钥。Title自行设置,Key中输入公钥内容。

3、去jenkins主机上查看是否额能拉取代码,我的是jmp主机

下面是部署前,提示要输入密码

[root@jmp ~]# git clone [email protected]:wangtao/hello2.git
Cloning into 'hello2'...
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password:

下面是部署后,一切OK了

[root@jmp ~]# git clone [email protected]:wangtao/hello2.git
Cloning into 'hello2'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

4、配置Jenkins的认证

进入Jenkins>凭据>全局凭据>添加凭据,类型选择SSH Username with private key,Private Key中输入第1步中查看的私钥。

5、配置工程中Git – Repositories

进入Jenkins>工程>配置>源码管理>Git,填写Repository URL:[email protected]:wangtao/hello2.git,Credentials选择第4步创建的新Credentials。配置到此结束

发表在 jenkins | 标签为 | 留下评论

如何设置spring.profiles.active环境变量

增加spring.profiles.active环境变量
转载自: https://blog.csdn.net/lsm135/article/details/79373335

springboot有个profile环境的设置是spring.profiles.active

在环境变量里的设置的优先级高于application.properties里的spring.profiles.active的设置

编程人员的环境设置是:

在程序代码的application.properties里的spring.profiles.active=uat不变

在自己的开发环境/IDE所在的电脑上设置spring.profiles.active=dev, 在开发服务器上也设置成dev

在uat服务器上,设置spring.profiles.active=uat或者不设置它

在prod生产服务器上,设置spring.profiles.active=prod

这样,相同的jar或者war包,在不同的服务器上运行不同的环境, 不用再手动修改application.properties文件

1. linux/mac环境下

su root

vim ~/.bash_profile
source ~/.bash_profile

在~/.bash_profile里最后一行增加

export SPRING_PROFILES_ACTIVE=dev

2. windows环境下

直接增加spring.profiles.active=dev的环境变量就ok了

发表在 jenkins | 标签为 | 留下评论

nginx反向代理tomcat时session丢失、无效的问题

nginx反向代理tomcat时session丢失、无效的问题

最开始是因为我反代几个web服务器时,一刷新页面,session就失效了

最开始的配置文件如下

upstream bt40 {
server 192.168.31.40:12000;
keepalive 2000;
}
server {
listen 12040;
server_name 192.168.31.35;
client_max_body_size 1024M;

location / {
proxy_pass http://bt40/;
proxy_set_header Host $host:$server_port;
}
}

改成下面这个就可以了

upstream bt40 {
server 192.168.31.40:12000;
keepalive 2000;
}
server {
listen 12040;
server_name 192.168.31.35;
client_max_body_size 1024M;

location / {
proxy_pass http://bt40/;
#proxy_set_header Host $host:$server_port;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
chunked_transfer_encoding off;
}
}

下面是详细说明,原文引自

https://blog.51cto.com/ityunwei2017/2165249

……
upstream 192.168.31.35 {
server 10.1.1.1:443 weight=5 max_fails=3 fail_timeout=30s;
server 10.1.1.2:443 weight=5 max_fails=3 fail_timeout=30s;
}
……
server {
listen 443 ssl;
…..
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect http:// $scheme://;
proxy_pass https://192.168.31.35/test/;
proxy_cookie_path /test/ /; #这里的路径要注意对应关系
proxy_set_header Cookie $http_cookie;
}
上面配置就能轻松实现代理,由于原始路径和代理路径发生了变化,导致 session 丢失,服务端获取的 session无效。如果路径代理路径和原始路径发生改变,就必须告诉服务器,加上路径转换proxy_cookie_path /edr /;可以将/edr的cookie输出到/上,Tomcat的session正常了。
如果需要更复杂的路径转换可用通配符的方式进行转换,详情要查看http://nginx.org/en/docs/http/ngx_http_proxy_module.html?&_ga=1.161910972.1696054694.1422417685#proxy_cookie_path了。

发表在 Nginx | 标签为 | 留下评论

Linux服务器上监控网络带宽的18个常用命令

Linux服务器上监控网络带宽的18个常用命令

本文介绍了一些可以用来监控网络使用情况的Linux命令行工具。这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度。入站流量和出站流量分开来显示。

这些工具使用不同的机制来制作流量报告。nload等一些工具可以读取”proc/net/dev”文件,以获得流量统计信息;而一些工具使用pcap库来捕获所有数据包,然后计算总数据量,从而估计流量负载。

下面是按功能划分的命令名称。

监控总体带宽使用――nload、bmon、slurm、bwm-ng、cbm、speedometer和netload
监控总体带宽使用(批量式输出)――vnstat、ifstat、dstat和collectl
每个套接字连接的带宽使用――iftop、iptraf-ng、tcptrack、pktstat、netwatch和trafshow
每个进程的带宽使用――nethogs
nagiosweb——nagios

1. nload

nload是一个命令行工具,让用户可以分开来监控入站流量和出站流量。它还可以绘制图表以显示入站流量和出站流量,视图比例可以调整。用起来很简单,不支持许多选项。

所以,如果你只需要快速查看总带宽使用情况,无需每个进程的详细情况,那么nload用起来很方便。结果是bit/s

$ nload

安装nload:Fedora和Ubuntu在默认软件库里面就有nload。CentOS用户则需要从Epel软件库获得nload。

2. iftop

iftop可测量通过每一个套接字连接传输的数据;它采用的工作方式有别于nload。iftop使用pcap库来捕获进出网络适配器的数据包,然后汇总数据包大小和数量,搞清楚总的带宽使用情况。

虽然iftop报告每个连接所使用的带宽,但它无法报告参与某个套按字连接的进程名称/编号(ID)。不过由于基于pcap库,iftop能够过滤流量,并报告由过滤器指定的所选定主机连接的带宽使用情况。

$ sudo iftop -n

n选项可以防止iftop将IP地址解析成主机名,解析本身就会带来额外的网络流量。

安装iftop:Ubuntu/Debian/Fedora用户可以从默认软件库获得它。CentOS用户可以从Epel获得它。

3. iptraf

iptraf是一款交互式、色彩鲜艳的IP局域网监控工具。它可以显示每个连接以及主机之间传输的数据量。下面是屏幕截图。

$ sudo iptraf

4. nethogs

nethogs是一款小巧的”net top”工具,可以显示每个进程所使用的带宽,并对列表排序,将耗用带宽最多的进程排在最上面。万一出现带宽使用突然激增的情况,用户迅速打开nethogs,就可以找到导致带宽使用激增的进程。nethogs可以报告程序的进程编号(PID)、用户和路径。

$ sudo nethogs

安装nethogs:Ubuntu、Debian和Fedora用户可以从默认软件库获得。CentOS用户则需要Epel。

5. bmon

bmon(带宽监控器)是一款类似nload的工具,它可以显示系统上所有网络接口的流量负载。输出结果还含有图表和剖面,附有数据包层面的详细信息。

安装bmon:Ubuntu、Debian和Fedora用户可以从默认软件库来安装。CentOS用户则需要安装repoforge,因为Epel里面没有bmon。

bmon支持许多选项,能够制作HTML格式的报告。欲知更多信息,请参阅参考手册页。

6. slurm

slurm是另一款网络负载监控器,可以显示设备的统计信息,还能显示ASCII图形。它支持三种不同类型的图形,使用c键、s键和l键即可激活每种图形。slurm功能简单,无法显示关于网络负载的任何更进一步的详细信息。

$ slurm -s -i eth0

7. tcptrack

tcptrack类似iftop,使用pcap库来捕获数据包,并计算各种统计信息,比如每个连接所使用的带宽。它还支持标准的pcap过滤器,这些过滤器可用来监控特定的连接。

安装tcptrack:Ubuntu、Debian和Fedora在默认软件库里面就有它。CentOS用户则需要从RepoForge获得它,因为Epel里面没有它。

8. vnstat

vnstat与另外大多数工具有点不一样。它实际上运行后台服务/守护进程,始终不停地记录所传输数据的大小。之外,它可以用来制作显示网络使用历史情况的报告。

$ service vnstat status
* vnStat daemon is running

运行没有任何选项的vnstat,只会显示自守护进程运行以来所传输的数据总量。

$ vnstat
Database updated: Mon Mar 17 15:26:59 2014
eth0 since 06/12/13
rx: 135.14 GiB tx: 35.76 GiB total: 170.90 GiB
monthly
rx | tx | total | avg. rate

————————+————-+————-+————-
Feb ‘14 8.19 GiB | 2.08 GiB | 10.27 GiB | 35.60 kbit/s
Mar ‘14 4.98 GiB | 1.52 GiB | 6.50 GiB | 37.93 kbit/s
————————+————-+————-+————-
estimated 9.28 GiB | 2.83 GiB | 12.11 GiB |
daily
rx | tx | total | avg. rate
————————+————-+————-+————-
yesterday 236.11 MiB | 98.61 MiB | 334.72 MiB | 31.74 kbit/s
today 128.55 MiB | 41.00 MiB | 169.56 MiB | 24.97 kbit/s
————————+————-+————-+————-
estimated 199 MiB | 63 MiB | 262 MiB |

想实时监控带宽使用情况,请使用”-l”选项(实时模式)。然后,它会显示入站数据和出站数据所使用的总带宽量,但非常精确地显示,没有关于主机连接或进程的任何内部详细信息。

$ vnstat -l -i eno1
Monitoring eth0… (press CTRL-C to stop)
rx: 12 kbit/s 10 p/s tx: 12 kbit/s 11 p/s

vnstat更像是一款制作历史报告的工具,显示每天或过去一个月使用了多少带宽。它并不是严格意义上的实时监控网络的工具。

vnstat支持许多选项,支持哪些选项方面的详细信息请参阅参考手册页。

9. bwm-ng

bwm-ng(下一代带宽监控器)是另一款非常简单的实时网络负载监控工具,可以报告摘要信息,显示进出系统上所有可用网络接口的不同数据的传输速度。

$ bwm-ng
bwm-ng v0.6 (probing every 0.500s), press ‘h‘ for help
input: /proc/net/dev type: rate
/ iface Rx Tx T
ot=================================================================
== eth0: 0.53 KB/s 1.31 KB/s 1.84
KB lo: 0.00 KB/s 0.00 KB/s 0.00
KB————————————————————————————————————-
total: 0.53 KB/s 1.31 KB/s 1.84
KB/s

如果控制台足够大,bwm-ng还能使用curses2输出模式,为流量绘制条形图。

$ bwm-ng -o curses2

10. cbm:Color Bandwidth Meter

这是一款小巧简单的带宽监控工具,可以显示通过诸网络接口的流量大小。没有进一步的选项,仅仅实时显示和更新流量的统计信息。

11. speedometer

这是另一款小巧而简单的工具,仅仅绘制外观漂亮的图形,显示通过某个接口传输的入站流量和出站流量。

$ speedometer -r eth0 -t eth0

12. pktstat

pktstat可以实时显示所有活动连接,并显示哪些数据通过这些活动连接传输的速度。它还可以显示连接类型,比如TCP连接或UDP连接;如果涉及HTTP连接,还会显示关于HTTP请求的详细信息。

$ sudo pktstat -i eth0 -nt

13. netwatch

netwatch是netdiag工具库的一部分,它也可以显示本地主机与其他远程主机之间的连接,并显示哪些数据在每个连接上所传输的速度。

$ sudo netwatch -e eth0 -nt

14. trafshow

与netwatch和pktstat一样,trafshow也可以报告当前活动连接、它们使用的协议以及每条连接上的数据传输速度。它能使用pcap类型过滤器,对连接进行过滤。

只监控TCP连接

$ sudo trafshow -i eth0 tcp

15. netload

netload命令只显示关于当前流量负载的一份简短报告,并显示自程序启动以来所传输的总字节量。没有更多的功能特性。它是netdiag的一部分。

$ netload eth0

16. ifstat

ifstat能够以批处理式模式显示网络带宽。输出采用的一种格式便于用户使用其他程序或实用工具来记入日志和分析。

$ ifstat -t -i eth0 0.5
Time eth0
HH:MM:SS KB/s in KB/s out
09:59:21   2.62 2.80
09:59:22   2.10 1.78
09:59:22   2.67 1.84
09:59:23   2.06 1.98
09:59:23   1.73 1.79

安装ifstat:Ubuntu、Debian和Fedora用户在默认软件库里面就有它。CentOS用户则需要从Repoforge获得它,因为Epel里面没有它。

17. dstat

dstat是一款用途广泛的工具(用python语言编写),它可以监控系统的不同统计信息,并使用批处理模式来报告,或者将相关数据记入到CSV或类似的文件。这个例子显示了如何使用dstat来报告网络带宽。

$ dstat -nt
-net/total- —-system—-
recv send| time
0 0 |23-03 10:27:13
1738B 1810B|23-03 10:27:14
2937B 2610B|23-03 10:27:15
2319B 2232B|23-03 10:27:16
2738B 2508B|23-03 10:27:17

18. collectl

collectl以一种类似dstat的格式报告系统的统计信息;与dstat一样,它也收集关于系统不同资源(如处理器、内存和网络等)的统计信息。这里给出的一个简单例子显示了如何使用collectl来报告网络使用/带宽。

$ collectl -sn -oT -i0.5
waiting for 0.5 second sample…
# <———-Network———->
#Time KBIn PktIn KBOut PktOut
10:32:01 40 58 43 66
10:32:01 27 58 3 32
10:32:02 3 28 9 44
10:32:02 5 42 96 96
10:32:03 5 48 3 28

结束语

上述几个使用方便的命令可以迅速检查Linux服务器上的网络带宽使用情况。不过,这些命令需要用户通过SSH登录到远程服务器。另外,基于Web的监控工具也可以用来实现同样的任务。

ntop和darkstat是面向Linux系统的其中两个基本的基于Web的网络监控工具。除此之外还有企业级监控工具,比如nagios,它们提供了一批功能特性,不仅仅可以监控服务器,还能监控整个基础设施。

原文:http://www.cnblogs.com/stevendes1/p/7209069.html

发表在 LinuxBasic | 标签为 | 留下评论

Nginx 禁止访问某个目录或文件的设置方法

Nginx 禁止访问某个目录或文件的设置方法
(1)如果基于WEB根目录下,要禁止用户访问/config目录,或者要禁止用户访问/config.ini(ZF常用INI,不过建议还是放到WEB目录以外的地方),可以通过location进行配置,返回403或者404等

复制代码代码如下:

location = /config/ {
return 404;
}
location =/config.ini{
return 404;
}

(2)这样只能禁止访问 http://example.com/path/
复制代码代码如下:

location = /path/ {
return 404;
}

(3)如果只允许某个ip访问http://example.com/path/那么

location / {
root html;
index index.html;
}

location ^~ /b/ {
allow 192.168.31.198;
deny all;
index index.html;
}

这样,就只能192.168.31.198访问b这个目录

(4)禁止访问 http://example.com/path/test.php
复制代码代码如下:

location ^~ /test
{
deny all;
}
可能test要换成path.
这样就搞定了

(5)对某些特定后缀名禁止访问
location ~* \.(txt|doc)$ {
if (-f $request_filename) {
root /home/domain/public_html/test;
break;
}
}
(6)和上面的(3)是一样的,对某个目录进行访问限制:
location /phpsysinfo/ {
allow 192.168.0.10;
deny all;
}

—————————————————————————————-

首先建立下面的配置文件放在nginx的conf目录下面,命名为blocksip.conf:

deny 95.105.25.181;

保存一下。

在nginx的配置文件nginx.conf中加入:include blocksip.conf;

重启一下nginx的服务:/usr/local/nginx/sbin/nginx -s reload 就可以生效了。

blocksip.conf:的格式还有许多种,可以配置只允许的IP访问或者IP段访问:

deny IP;

allow IP;

# block all ips
deny all;
# allow all ips
allow all;

其中网段的写法是这样的:192.168.1.0/24这样的形式。

deny 192.168.1.11;
deny 192.168.1.123;
deny 10.0.1.0/24;

如果你想实现这样的应用,除了几个IP外,其他全部拒绝,
那需要你在ip.balcklist中这样写

allow 1.1.1.1;
allow 1.1.1.2;
deny all;
单独网站屏闭IP的方法:

在server”{}”,在这个大括号内加入deny IP地址是限制某IP地址访问;allow IP地址是只允许某IP地址访问;

#屏蔽单个IP的命令是
deny 123.45.6.7
#封整个段即从123.0.0.1到123.255.255.254的命令
deny 123.0.0.0/8
#封IP段即从123.45.0.1到123.45.255.254的命令
deny 124.45.0.0/16
#封IP段即从123.45.6.1到123.45.6.254的命令是
deny 123.45.6.0/24

发表在 Nginx | 标签为 | 留下评论

iftop动态显示网络接口流量

安装iftop需要epel源,安装后,直接执行iftop,加上需要的选项

iftop使用的参数(iftop -h)

参数 含义

-i 指定需要检测的网卡

-n 将输出的主机信息都通过IP显示,不进行DNS解析

-B 将输出以byte为单位显示网卡流量,默认是bit

-p 以混杂模式运行iftop,此时iftop可以用作网络嗅探器

-N 只显示连接端口号,不显示端口对应的服务名称

-P 显示主机以及端口信息

-F 显示特定网段的网卡进出流量 如iftop -F 192.168.85.0/24

-m 设置输出界面中最上面的流量刻度最大值,流量刻度分5个大段显示 如iftop -m limit

-f 使用筛选码选择数据包来计数 如iftop -f filter code

-b 不显示流量图形条

-c 指定可选的配置文件 如iftop -c config file

-t 使用不带ncurses的文本界面,

如下两个是只和-t一起用的:

-s num num秒后打印一次文本输出然后退出

-L num 打印的行数

进入iftop交互界面后的常用操作命令

按h切换是否显示帮助;

按n切换显示本机的IP或主机名;

按s切换是否显示本机的host信息;

按d切换是否显示远端目标主机的host信息;

按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;

按N切换显示端口号或端口服务名称;

按S切换是否显示本机的端口信息;

按D切换是否显示远端目标主机的端口信息;

按p切换是否显示端口信息;

按P切换暂停/继续显示;

按b切换是否显示平均流量图形条;

按B切换计算2秒或10秒或40秒内的平均流量;

按T切换是否显示每个连接的总流量;

按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;

按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;

按j或按k可以向上或向下滚动屏幕显示的连接记录;

按1或2或3可以根据右侧显示的三列流量数据进行排序;

按<根据左边的本机名或IP排序;

按>根据远端目标主机的主机名或IP排序;

按o切换是否固定只显示当前的连接;

按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!

按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!

按q退出监控。

常用选项实例

[root@jmp ~]# iftop -nNBP
interface: eth0
IP address is: 192.168.31.35
MAC address is: fa:16:3e:d0:af:f1

发表在 LinuxBasic | 标签为 | 留下评论

lsof命令详解

lsof (list open files)是一个列出当前系统打开文件的工具。在linux系统环境下,任何事物都可以以文件形式存在,通过文件不仅可以访问常规的数据,还可以访问网络连接和硬件。

适应条件:lsof访问的是核心文件和各种文件,所以必须以root用户的身份运行才能充分发挥其功能。

lsof [选项] [绝对路径的文件名]
显示示例

每行显示一个打开的文件,默认如果后面不跟任何东西,将打开系统打开的所有文件
COMMAND :进程名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别到该文件。如cwd、txt等
TYPE:文件类型,如DIR,REG
DEVICE:指定磁盘名称
SIZE:文件大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称

补充:FD列中的文件描述cwd值表示应用程序的当前工作目录,这是该程序启动的目录,除非它本身对这个目录进行更改。txt类型的是程序代码,如应用程序二进制文件本身或者共享库。其次数值表示应用程序的文件描述符,这是打开文件时一个返回的一个整数。

其中u表示该文件被打开处于读取\写入模式,而不是只读或只写模式;
r 只读 ; w 只写 ;W表示该应用程序具有对整个文件的写锁(确保每次只能打开一次应用程序实例)
初始打开每个应用程序时,都具有三个文件描述符,从0到2,分别表示标准输入、输出和错误流。因此,大多数应用程序
所打开的FD都是从3开始

TYPE:REG、DIR、CHR、BLK、UNIX、FIFO、IPV4

下面举几个实际的例子:

(1)显示使用文件的进程

(2)显示指定进程所打开的文件

(3)显示指定进程号所打开的文件

(4)通过指定的协议、端口、主机等,显示符合条件的进程信息
ls -i:port  #某个端口
ls -i:port1-port2 #
ls -i:1-1024      #查看端口1-1024运行情况

查看所有的进程

查看所有使用tcp连接的进程

查看所有使用22端口的进程

查看所有使用22端口,协议是TCP的进程

(5)显示指定用户所使用的文件

(6)显示所有的socket文件

(7)恢复删除文件
当系统中的某个文件被意外删除了,只要这个时候系统中有进程正在访问这个文件,那么可以通过lsof 从/proc目录下恢复文件的内容
假如/var/log/messages文件被删了,恢复这个文件的方法:
首先使用lsof 查看当前是否有进程打开/var/log/messages文件,
#lsof |grep /var/log/messages
[root@localhost ~]# rm /var/log/messages
rm:是否删除普通文件 “/var/log/messages”?y
[root@localhost ~]# lsof |grep /var/log/messages
rsyslogd  5925      root    1w      REG        8,2     4369     266184 /var/log/messages (deleted)

从上面的信息可以看到PID 5925(syslogd)打开文件的文件描述符为1,同时发现/var/log/messages已经被删除了。
因此可以通过/var/log/messages文件描述符来查看文件信息。

cat /pro/5925/fd/1
[root@localhost ~]# cat /proc/5925/fd/1
May 12 08:04:11 localhost kernel: hpet1: lost 3 rtc interrupts
May 12 08:04:11 localhost kernel: hpet1: lost 6 rtc interrupts
May 12 08:04:11 localhost kernel: hpet1: lost 1 rtc interrupts
May 12 09:25:33 localhost kernel: usb 2-2.1: USB disconnect, device number 10
May 12 09:25:33 localhost kernel: eth0: link down
May 12 09:25:33 localhost kernel: usb 2-2.1: new full speed USB device number 11 using uhci_hcd
May 12 09:25:33 localhost kernel: usb 2-2.1: New USB device found, idVendor=0e0f, idProduct=0008
May 12 09:25:33 localhost kernel: usb 2-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
May 12 09:25:33 localhost kernel: usb 2-2.1: Product: Virtual Bluetooth Adapter
May 12 09:25:33 localhost kernel: usb 2-2.1: Manufacturer: VMware
May 12 09:25:33 localhost kernel: usb 2-2.1: SerialNumber: 000650268328
May 12 09:25:33 localhost kernel: usb 2-2.1: configuration #1 chosen from 1 choice

最后通过重定向的方法恢复被删除的/var/log/messages
cat /pro/5925/fd/1 >/var/log/messages

发表在 LinuxBasic | 标签为 | 留下评论