21 Oct 2010

Fabric và ssh_key + passphrase

SSH (OpenSSH client) là công cụ mà bất cứ ai làm việc với Unix, Linux đều phải dùng tới, cho dù là lập trình viên, quản trị hệ thống, hay quản trị cơ sở dữ liệu.
Để ssh tới một máy chủ *nix, thông thường có 2 cách:
1.1. Sử dụng password (Không an toàn, có thể bị lộ, hoặc bị bruteforce, không nên dùng)
1.2. Sử dụng mã hóa công khai (public key authentication, cách này an toàn hơn, tránh được các nguy cơ trên)

Với cách thứ 2, một khi máy làm việc bị nhân nhượng, hoặc đơn giản là ai đó ngồi vào máy tính, lấy được private key, xem như hầu hết mọi server (dùng key này để login) đều bị nguy hiểm (Trừ phi sử dụng truecrypt để mã hóa phân vùng đặc biệt, khi dùng thì mount lên, kẻ nào đó ngồi vào đúng lúc đã mount cũng coi như xong). Do đó, để tăng khả năng an toàn, nên dùng thêm một passphrase cho private key của riêng mình.
Khi dùng private key với passphrase, mỗi khi muốn sử dụng key này, hệ thống sẽ yêu cầu nhập vào một chuỗi password đã ấn định khi tạo key.

30 Sept 2010

CryoPID

Khi làm việc trên hệ thống, ta thường dùng screen hay tmux để duy trì shell session trong trường hợp network xảy ra sự cố, hoặc duy trì nhiều session chỉ với một phiên kết nối ssh.
Tuy nhiên, trong trường hợp nào đó mà
    - có thể command được sử dụng bên ngoài screen hoặc tmux session, hoặc người sử dụng command không nghĩ rằng phải mất một khoảng thời gian lâu hơn dự kiến để tiến trình thực hiện xong.
    - screen và tmux không duy trì được session sau khi hệ thống reboot.
    - screen và tmux chỉ làm việc trên hệ thống cục bộ, không thể tái sử dụng session đã tạo trên hệ thống khác.

Bernard B đã phát triển cryoPID để khắc phục những nhược điểm nói trên. Khi một tiến trình đang thực hiện, mà vì một sự cố nào đó ta cần stop tiến trình này để reboot hệ thống, hoặc khắc phục một lỗi critical nào đó, hoặc chỉ dừng tiến trình để tái sử dụng bên trong screen session, hoặc dùng tiến trình dang dở trên một hệ thống khác, cryoPID có thể làm đóng băng tiến trình đang thực hiện thành một image file có thể tự động extract và execute mà không cần chương trình trợ giúp.

Ví dụ, khi đang thực hiện lênh cp một file có dung lượng khá lớn, chỉ cần dùng ps và grep tìm PID của cp, sau đó:
$ freeze image_name PID
sau khi reboot, chỉ cần run ./image_name là tiến trình được khôi phục với state như cũ, tiện lợi nhỉ?

Tuy nhiên cryoPID còn có nhiều nhược điểm, và nhiều tính năng cần được nâng cấp, mà tác giả có nêu rõ trên cryoPID website.

Bản thân mình cảm thấy rất thích công cụ này ngay từ ý tưởng của nó!
Để cài đặt cryoPID hệ thống cần có gcc, g++ và zlibc.

23 Jul 2010

23072010

Tự nhiên nhỏ em đưa cho mình xem blog của Mẹ, đọc một lúc, đọc xong hết, 21 bài. Lúc con trai đi công tác xa, lúc con gái đi học ĐH, lúc con được tăng lương, lúc cô đơn ở nhà một mình, sao nhỉ?

Tự nhiên buồn ghê gớm, Mẹ mình. 3 đứa con đều đi xa, cả cuộc đời làm lụng vất vả, gấp gáp trong từng phút, dành dụm mãi từng đồng từng cắt lo cho con, đến bây giờ vẫn chưa được phút giây sung sướng nào, có lúc nào Mẹ được giải bày tâm trạng? Cũng may còn có Ba.

Giá như Mẹ mình cũng việt blog nhỉ?

10 Jul 2010

Thời gian

Hôm nay bạn vừa từ xa trở về, trí nhớ chỉ ghi lại bạn đi đã khá lâu, không nhớ chắc chắn là bao nhiêu ngày, tháng, hay năm. Hỏi mới biết là đã 2.5 năm, lâu quá là lâu.

Tự nhiên bất giác nhớ lại, mình ở cái đất sài gòn này 7 năm trời rồi, con của chị hàng xóm từ lúc mới sinh, đầu năm nay đã vào lớp một, mặc áo mới, chạy khoe khắp xóm. Rồi nhớ lại, năm cấp III lớp mình có một cặp yêu nhau, chúng nó vừa phát thiệp mừng, tình yêu đó vỏn vẹn 10 năm, ha ha, thời gian dài mà nhanh tới chóng mặt.

Mình thường sợ khi đứng trước những dự định, kế hoạch lâu năm, kiểu như nếu bây giờ phải học thêm 4 năm nữa thì già mất tiêu rồi, rồi kiểu như gắn bó với nơi A này vài năm thì được hưởng phúc lợi gì đó, sợ rằng trong thời gian dài đằng đẳng đó có xảy ra chuyện gì thì sao? Nên luôn hướng tới những cái ngắn, ít quan tâm đến việc xây dựng cái gì đó lâu bền.

Việc học của mình cũng vậy, nếu (mình ghét khi dùng những cái nếu thì, nhưng đang tâm trạng :"> ) ngày trước mình nhìn ra được hi sinh vài năm mài đũng quần ở ghế giảng đường, thì bây giờ có lẽ khá hơn nhiều, nhưng mình không hối tiếc chút nào, chỉ là suy nghĩ thế thôi.

26 Jun 2010

Down hết hình trên wallbase.net

#!/usr/bin/env python
import re, os
from urllib2 import urlopen
all_tag = []

def search_tag():
    index_page = 'http://wallbase.net'
    try:
        _page_ = urlopen(index_page)
        _html_ = _page_.readlines()
        _page_.close()
        p = re.compile(r'http://wallbase\.net/search/[a-z]+\"')
        for line in _html_:
            tag = p.findall(line)
            if tag:
                for i in tag:
                    all_tag.append(i[:-1a])
            else:
                continue
    except Exception, e:
        print "Connection Error!" + str(e)

def getsession(num):
    org_url = "http://wallbase.net/wallpaper/"
    second_url = org_url + num 
    _prefix = "http://wallpapers.yotoon.pl/rozne/"
    ext = '.jpg'
    fullname = "wallpaper-" + num + ext
    try:
        _page_ = urlopen(second_url)
        _html_ = _page_.readlines()
        _page_.close()
        for line in _html_:
            st = line.find(_prefix)
            nd = line.find(fullname)
            if st <> -1 and nd <> -1: 
                final = line[st:nd] + fullname
                print final
                os.system('wget ' + final)
            else:
                continue
    except Exception, e:
         print "Cannot connect to server!" + str(e)
         pass
                
def getnum(list_tag):
    for page in list_tag:
        try:
            response = urlopen(page)
            content = response.readlines()
            response.close()
            for line in content:
                a = line.find('thumb-')
                b = line.find('jpg') 
                if a <> -1 and b <> -1:
                    c = a + 6
                    d = b - 1
                    number= line[c:d]
                    getsession(number)
                    continue
                else:
                    continue
        except:
            print "May be we got wrong image url!"
        
if __name__ == '__main__':
    search_tag()
    getnum(all_tag)
exit()
Net chậm thì down chắc mất cả tháng :-D

9 Jun 2010

Nagios plugin

1st time I try to write plugin for nagios, it's really easy and simple with python :-). If you dont know how to use, please read this
First, check if we can reach website, then count response time and return nagios status.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author: Hung Nguyen Van
# 09-06-2010
from urllib2 import urlopen
import time, sys, socket

def timer(_dest):
    timeout = 10
    socket.setdefaulttimeout(timeout)    
    try:
        _response = urlopen(_dest)
    except:
        print "CRITICAL: Cannot connect to server!"
        sys.exit(3)
    start_time = time.time()
    _response = urlopen(_dest)
    end_time = time.time()
    final = end_time - start_time
    return final

if __name__ == '__main__':
    _dest = "https://" + sys.argv[1]
    seconds = timer(_dest)
    if seconds >= 10.0:
        print "CRITICAL: Server took %.2f seconds to response" % (seconds)
        sys.exit(2)
    if seconds >= 7.0:
        print "WARNING: Server took %.2f seconds to response" % (seconds)
        sys.exit(1)
    else:
        print "OK: Server took %.2f seconds to response" % (seconds)
        sys.exit(0)

Disqus