大家都知道麻省理工MIT是世界数一数二的大学,更是计算机技术科学界的翘楚。去年麻省理工又投资十亿美刀建立苏世民(Stephen A. Schwarzman)计算机学院。在最近院庆活动中,麻省了推出了其CS科技成果展,罗列了一些了伟大的发明包括了数字电路到可可消化胶囊肠壁治疗机器人。本文虫虫和大家一起来看看麻省这些改变世界的伟大发明。
继续阅读分类目录归档:自动化&DevOPs&SRE
通过Tomtit实现Perl6开发工作流程的自动化
Perl6的开发如何做到自动化?其实很简单,只需要一个应用Tomtit。
Tomtit是一个全新的Perl6任务运行器,可让你很便捷地自动执行日常任务。
本文中,我们将展示如何使用Tomtit实现Perl6开发自动化,我们以实例展示Perl6开发中的典型场景:设置git存储库、测试本地源代码、安装本地源代码、发布CPAN模块。关于Tomtit的详细介绍请参考文章(https://dev.to/melezhik/one-tomtit-for-it–1j3f)。
继续阅读Perl 6的自动任务执行模块Tomtit ,勤快好用的趁手山雀!

Tomtit介绍
Tomtit是基于Perl6语言开发的任务执行器,它方便好用、任务定义快捷简洁,内置数十个常用场景任务插件,利用该雀儿帮我们自动化Perl/Perl6以及更多的语言开发任务。
继续阅读批量检查zabbix guest用户登录
最近又有人挖坑zabbix的sql注入漏洞,此漏洞不在详细说了。此漏洞的利用有个条件必须要登录才行。zabbix如果不做安全配置的话,默认是guest用户空密码可以登录的。
为此写一个脚本检测是否禁用了guest用户,用来批量检查,加固。
rex advent——rex获得远程服务器信息
如何获得远程服务器的相关信息呢?比如系统的发行版本,版本好,内核的版本号,主机名,网络信息。Rex专门提供了一个模块system_information来收集这些信息。
rex advent——rex批量替换被篡改的文件
rex advent——rex 利用Augeas模块进行文件配置
rex advent—— rex 批量部署sshd密码尝试攻击脚本
1、首先是防攻击脚本,原理是扫描/var/log/secure文件,发现一小时内尝试密码错误超过30次的ip,则
将该ip加入iptables黑名单drop掉。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#!/usr/bin/env perl my $LIMIT=30; my $log="/var/log/secure"; my $LOGFILE="/data/block_ip.log"; my $TIME=`date '+%b %e %H'`; chomp $TIME; my $BLOCK_IP; my %hash; open(FD,$log)||die("Can not open the file!$!n"); while(<FD>){ chomp; if ( /$TIME/ and /Failed password/ ) { my @line=split; my $ip=$line[-4]; $hash{$ip}++; } } close(FD); for(%hash) { if ($hash{$_} > $LIMIT) { my $IP=$_; $ips= `iptables-save`; $mo= qr(/INPUT/ and /DROP/ and /$IP/); unless ($ips=~$mo) { `iptables -I INPUT -s $IP -j DROP`; my $NOW=`date '+%Y-%m-%d %H:%M'`; chomp $NOW; `echo -e "$NOW : $IP" >>$LOGFILE`; } } } |
2、将该脚本保存为block_ssh.sh
3、创建一个上传任务,把该文件上传到远程服务器,给予执行权限。加入crontab 每5分钟执行一次。
1 2 3 4 5 6 7 |
task "upload", group =>"all", sub { say connection->server.":begin upload files!"; upload "block_ssh.sh", "/root/block_ssh.sh"; run "chmod 755 /root/block_ssh.sh"; run 'echo "*/5 * * * * root /root/block_ssh.sh" >>/etc/crontab'; say connection->server.":upload success!"; }; |
rex advent—— rex 任务执行情况,错误信息等
当批量远程执行任务时如何判断任务执行是否成功,以及错误信息呢?
最简单是方法是在设定执行完一个任务后输出服务器ip,然后根据输出信息来判断
1 2 3 4 5 6 |
task "task", group => "all",sub { ... say connection->server; }; |
rex advent—— rex 创建用户并追加本地多文件ssh公钥到远程服务器用户
管理用户密钥比较繁琐,尤其是多密钥时候,下面给出一种方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
task "my_user", sub { my $local_keys = LOCAL{ my @key_files = qw( /root/.ssh/id_rsa.pub /home/user/.ssh/id_rsa.pub ); my @tmp; push ( @tmp, split "n", cat $_ ) foreach @key_files; return @tmp; }; my @remote_keys = split "n", cat '~/.ssh/authorized_keys'; create_user "myuser", home => '/home/myuser', comment => 'My user', expire => '2100-05-30', password => 'password', system => 1, create_home => TRUE, ssh_key => join "n", @$local_keys, @remote_keys; say connection->server; }; |