手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:Linux

hostname的笔记

重启apache的时候报错:

/etc/init.d/apache2 restart
[....] Restarting web server: apache2apache2: apr_sockaddr_info_get() failed for (none)
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
 ... waiting apache2: apr_sockaddr_info_get() failed for (none)
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
. ok
 
看到这个(none),让我想起,我的ssh的登录路径:root@(none):~#
 
OK,在老鬼的提示上,用hostname函数进行了设置。问题解决:
root@(none):~# hostname
(none)
root@(none):~# hostname neatstudio.com
root@(none):~# hostname
neatstudio.com
 
--做个笔记 

supervisor 守护程序

最近听到supervisor的机会越来越多了,主要是因为越来越喜欢将程序放到底层去运行,但又需要守护程序来监控它,万一它挂了怎么办?如果为每个程序都写上这样的脚本,那得写多少啊?

结果,在最近的看到的网上的内容里,就看到一大堆人在说用supervisor吧。

1、Asta谢的《build-web-application-with-golang》:第12章:应用部署

2、还是Asta谢的beego框架:Supervisord

3、来自the5fire的:进程管理器supervisor的使用(django实例)

其实还有很多关于这样的内容,就不一一贴出来了。只是beego框架中的介绍会相对比较简单,所以可以拿来当教程,再加上我的程序可能也会趋向于使用go来开发,就转贴一下这篇博客吧,只有三步:

  1. 安装 setuptools

    wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg   sh setuptools-0.6c11-py2.7.egg    easy_install supervisor   echo_supervisord_conf >/etc/supervisord.conf   mkdir /etc/supervisord.conf.d 
  2. 修改配置 /etc/supervisord.conf

    [include] files = /etc/supervisord.conf.d/*.conf 
  3. 新建管理的应用

    cd /etc/supervisord.conf.d vim beepkg.conf 

    配置文件:

    [program:beepkg] directory = /opt/app/beepkg command = /opt/app/beepkg/beepkg autostart = true startsecs = 5 user = root redirect_stderr = true stdout_logfile = /var/log/supervisord/beepkg.log

Tags: supervisor

linux 批量重命名文件

 其实说白了就是利用sed,但怎么个用法,确实是有点想法,毕竟sed的功能实在太强了。

单一文件重命名就太简单了,mv一下就全来了。批量怎么办?
OK,一句话:
XML/HTML代码
  1. for i in `ls`; do mv -f $i `echo $i | sed 's/????/?????/'`; done  
看到没。其实就是一个for in,然后 mv 一下。只是mv的蚨,用sed进行了改名,用上了管道,echo 等。
 
接着来:
1、改文件的首字母为a:
如果是前两个字母,就是^..
  1. for i in `ls`; do mv -f $i `echo $i | sed 's/^./a/'`; done  
2、改文件的末字母为a
 如果是后几个字母就是..$
  1. for i in `ls`; do mv -f $i `echo $i | sed 's/.$/a/'`; done    
3、文件名加前缀:
XML/HTML代码
  1. for i in `ls`; do mv -f $i `echo "prefix_"$i`; done  
4、文件名小写变大写
XML/HTML代码
  1. for i in `ls`; do mv -f $i `echo $i | tr a-z A-Z`; done  
顾名思议,大写变小写就是将A-Z和a-z换一个位置
5、改指定字符为其他(如后缀名)
XML/HTML代码
  1. for i in `ls`; do mv -f $i `echo $i | sed 's/.html/.php/'`; done  
更多技巧,请参考sed的用法

Tags: sed, 重命名

转:如何封杀尝试Raspberry Pi SSH密码的来源IP

标题是标题,但其实讲的内容当然是不一定只是在树梅的设备上用的。不要太纠结于表面,我不改标题是为了尊重原作者

原文来自于hugo zhu的网站:http://hugozhu.myalert.info/2013/03/08/block_failed_ssh_attempts_with_iptable.html,看了他的名字,你也可以猜出他的微博定就是http://weibo.com/hugozhu。OK,不扯蛋,上原文:

Raspberry Pi整天开着,如果用缺省SSH端口对外开放,就会经常遇到扫描SSH密码的肉鸡。虽然密码不是很简单,但还是感觉很不安全的。

系统的ssh登录日志文件在:/var/log/auth.log,登录失败时会记录以下格式的日志:

  1. Mar 7 10:31:51 raspberrypi sshd[24510]: Failed password for root from 221.8.19.129 port 4066 ssh2
  2. Mar 7 10:31:55 raspberrypi sshd[24514]: Failed password for root from 221.8.19.129 port 4079 ssh2
  3. Mar 7 10:31:56 raspberrypi sshd[24518]: Failed password for sshd from 221.8.19.129 port 4080 ssh2
  4. Mar 7 10:32:26 raspberrypi sshd[24522]: Failed password for sshd from 221.8.19.129 port 4149 ssh2

用最简单的Shell脚本来解决这个问题:

guard.sh

  1. #!/bin/bash
  2.  
  3. last_ip=""
  4. tail -f /var/log/auth | while read LINE; do
  5. {
  6. if [[ "${LINE}" =~ "Failed" ]]; then
  7. ip="$(echo ${LINE} | awk '{print $(NF-3)}')"
  8. if [[ "$last_ip" == "$ip" ]]; then
  9. echo "block $ip"
  10. #curl -s --data-ascii "uuid=<my iphone's uuid>" --data "body=${LINE}" http://raspberrypi/pushme
  11. iptables -A INPUT -s "$ip" -j DROP
  12. fi
  13. last_ip=$ip
  14. echo $LINE
  15. fi
  16. }
  17. done

用root用户执行以下命令,也可以放到启动脚本里:/etc/rc.local

  1. nohup /root/bin/guard.sh > /var/logs/guard.log 2>&1 &

如果连续两次输错密码,那ip就会被封,我另外加了一个报警,会通知到我的手机,这下感觉安全了些。

登录Pi用iptables -L可以看到被封杀的IP列表,如果需要解封这些IP,可以用命令iptables -F,也可以用crontjob每天定时运行一次iptables -F来清除

脚本还很简单,还可以有不少改进,可以在评论里讨论。

---EOF---

越来越发现,sablog需要改版了。再不改。alexa排名下降不说,最关键的是,代码的显示不爽了。只是想到改版后有几千篇的文字需要一一调整就痛苦。

wget post数据

 一直以为wget只是下载点东西的工具。看到一篇网上的文章,才注意到wget原来还可以post数据。

为什么我想用wget来post数据呢?是因为。。。busybox不带curl,而bash版的ddns更新(dnspod的域名更新)是使用curl的。既然curl不支持,我就google了一下:wget能够post数据吗?
果然,第一篇就是:
http://hi.baidu.com/hhflying/item/7ae51f3d30ce64fdde2221d9
  1. 这段时间需要用wget做一些事情,主要是抓取网页的数据工作,发现wget还是很强大的。下面是一些应用场景:  
  2. 1. 简单页面的抓取  
  3. wget的最基本用法  
  4. wget http://domain.com/path/simple_page.html  
  5. 2. 添加自己的head  
  6. 有些网站或者页面,需要额外的认证,所以需要添加额外的HTTP Header,使用方法:  
  7. wget --header="MyHeader: head_value" http://domain.com/path/page/need_header.php  
  8. 3. 伪装成浏览器  
  9. 有些网站,例如facebook,会检测请求方式是否是浏览器,如果不是正常的浏览器,那么会redirect到一个"incompatible browser"的错误页面。这时候需要wget伪装成一个浏览器(我是Mozilla Firefox!):  
  10. wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729)" http://domain.com/path/page/check_user_agent.php  
  11. 4. post数据到某个页面  
  12. wget不光可以用get方式请求网页,还可以post data的,那样就可以实现自动注册、自动登录了(有验证码的页面除外。。。。)  
  13. wget --post-data="user=user1&pass=pass1&submit=Login" http://domain.com/login.php  
  14. 5. 访问需要登录的页面  
  15. 有些页面的访问需要登录,访问的时候需要传递cookie,这时候就需要和上面提到的post方式结合。一般过程是:post用户名和密码登录、保存cookie,然后访问页面时附带上cookie。  
  16. wget --post-data="user=user1&pass=pass1&submit=Login" --save-cookies=cookie.txt --keep-session-cookies http://domain.com/login.php  
  17. wget --load-cookies=cookie.txt http://domain.com/path/page_need_login.php  
  18. 暂时就探索到这些,以后有什么新的用法,继续补充。  
不过,可惜的是,我运行下来之后,还有一个小问题:
https://dnsapi.cn/Record.Ddns: HTTPS support not compiled in.
哎。。。我没有openssl,https不支持啊。。纠结,uis2000的路真难走。
 

Tags: wget, uis2000