2017年9月26日 星期二

Install sshpass

Last updated on Sep 26th, 2017 by sammtcbn

[1] Install sshpass on babun

At first, download latest sshpass from sourceforge.
Next, launch babun shell and enter following commands to install it.

# tar zxfv sshpass-1.05.tar.gz
# cd sshpass-1.05
# ./configure
# make
# make install

Then, sshpass.exe will be installed in /usr/local/bin .
Now I can use sshpass+ssh to login my server from my babun shell.

# sshpass -p password ssh user@ip

Example: Login and run command free to check memory usage.
# sshpass -p password ssh -o StrictHostKeyChecking=no user@ip free

Example: Use sshpass+scp to upload file.
# sshpass -p password scp -o StrictHostKeyChecking=no file user@ip:Path

[2] Install sshpass on Ubuntu 16.04.2

$ sudo apt-get update

$ sudo apt-get install sshpass

2017年9月5日 星期二

automake 筆記


$ ls hello.c
hello.c


$ cat hello.c
#include stdio.h

int main (void)
{
    printf ("hello\n");
    return 0;
}


$ autoscan


$ ls
autoscan.log  configure.scan  hello.c


$ cp configure.scan configure.ac


$ vi configure.ac
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AM_INIT_AUTOMAKE(hello, 1.0)
AC_CONFIG_SRCDIR([hello.c])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_OUTPUT(Makefile)


$ ls
autoscan.log  configure.ac  configure.scan  hello.c


$ aclocal


$ ls
aclocal.m4  autom4te.cache  autoscan.log  configure.ac  configure.scan  hello.c


$ autoheader


$ ls
aclocal.m4  autom4te.cache  autoscan.log  config.h.in  configure.ac  configure.scan  hello.c


$ autoconf


$ ls
aclocal.m4      autoscan.log  configure     configure.scan
autom4te.cache  config.h.in   configure.ac  hello.c


$ vi Makefile.am
bin_PROGRAMS=hello
hello_SOURCES=hello.c


$ touch NEWS README AUTHORS ChangeLog


$ automake --add-missing


$ ls
aclocal.m4      autoscan.log  config.h.in   configure.scan  hello.c     Makefile.am  NEWS
AUTHORS         ChangeLog     configure     COPYING         INSTALL     Makefile.in  README
autom4te.cache  compile       configure.ac  depcomp         install-sh  missing


$ ./configure


$ ls
aclocal.m4      compile        configure       hello.c      Makefile.in
AUTHORS         config.h       configure.ac    INSTALL      missing
autom4te.cache  config.h.in    configure.scan  install-sh   NEWS
autoscan.log    config.log     COPYING         Makefile     README
ChangeLog       config.status  depcomp         Makefile.am  stamp-h1


$ make
make  all-am
make[1]: Entering directory '/home/samlin/hello'
gcc -DHAVE_CONFIG_H -I.     -g -O2 -MT hello.o -MD -MP -MF .deps/hello.Tpo -c -o hello.o hello.c
mv -f .deps/hello.Tpo .deps/hello.Po
gcc  -g -O2   -o hello hello.o
make[1]: Leaving directory '/home/samlin/hello'


$ ls
aclocal.m4      ChangeLog    config.log     configure.scan  hello.c     Makefile     NEWS
AUTHORS         compile      config.status  COPYING         hello.o     Makefile.am  README
autom4te.cache  config.h     configure      depcomp         INSTALL     Makefile.in  stamp-h1
autoscan.log    config.h.in  configure.ac   hello           install-sh  missing


$ ./hello
hello

2014年12月8日 星期一

在 Freebsd 上安裝 NIS Client


本篇介紹在 Freebsd 上建立 NIS Client 的步驟。
我的 OS 為 Freebsd 10.1 。


首先,編輯  /etc/rc.conf,新增如下兩行。nisdomainname這行用來指定 NIS Server 的domain name,所以將之指定成跟 NIS Server 使用一樣的名字。
nisdomainname="vmnism"
nis_client_enable="YES"


然後使用 vipw 指令編輯密碼檔,在最下面加入如下行:
+:::::::::


再來使用編輯器在 /etc/group 最後面加上這行:
+:*::


編輯以上三個檔案就已經設定完成,如果要馬上可以運作,執行底下這兩行指令即可。不然的話,重新開機也是可以。
# /etc/netstart
# service ypbind start


要知道有沒有成功使用 NIS Server 提供的帳號資訊,可以在 NIS Client 機器上執行 ypcat passwd ,如果有成功連上 NIS Server,則會顯示 NIS Account 的資訊,我的範例如下:
root@bsd101:/usr/home/sam # ypcat passwd
re63:*:2170:4000:User &:/home/re63:/bin/csh
re1026:*:3133:4000:User &:/home/re1026:/bin/csh
re1107:*:3214:4000:User &:/home/re1107:/bin/csh
re15892:*:17953:4000:User &:/home/re15892:/bin/csh
re15973:*:18034:4000:User &:/home/re15973:/bin/csh


有正確連上 NIS Server 的話,用 domainname 指令也可顯示目前 NIS Client 機器上使用的 NIS domainname 是哪組。
# domainname
vmnism


最後,ssh 時也可以使用 NIS Account 來 login 了,大功告成。


Ref:

Last updated on Dec 8th, 2014 by Sam Lin

2014年1月15日 星期三

PHP 去除 ASCII 控制字元

Last updated on Jan 15th, 2014 by Sam Lin <samlin35@gmail.com>

在寫一段 PHP 將檔案每一行讀出來並且用 XML 輸出的程式,結果意外地出現了錯誤。我將該行寫成 xml 並使用瀏覽器來看,顯示錯誤如下圖。




使用 wget 將 test.xml 抓了下來,使用編輯器顯示其 hex,如下:


從上圖看到反白的字元 1F 恍然大悟,原來是 ASCII 的特殊字元所造成 xml 顯示錯誤。從 Wikipedia ASCII 可以知道從 0x00 到 0x 1F 都是 ASCII 的控制字元,所以如果我們要用 PHP 輸出的話,最好先過濾掉這些字元。要過濾的話,可以使用 preg_replace 這個 function 。

範例如下,

$output = preg_replace('/[^(\x20-\x7F)]*/','', htmlspecialchars($dumpstring));
echo $output;

2014年1月11日 星期六

遠通駭客事件之我感

看到遠通最近被駭的事件,姑且不論是真有其事或是誤會一場,但讓我想到開發一個系統或是將系統外包,驗收時業主應該都是針對功能去驗收,不曉得是否會針對系統安全性去做驗收呢?承包商開發時是否也會自發地在程式或系統中多注意系統的漏洞、程式的漏洞?

之前修一門系統安全的課程,老師提及了很多關於系統安全、病毒、惡意程式等等的介紹,並且也講了一些案例讓我們了解這重要性,甚至當場示範連到某政府官網,在頁面上輸入一些特別的字串 (使用 SQL injection 的做法),結果網頁可以查到民眾的部份個資,當下那一刻真是讓我們大開眼界,而且也讓我意識到,寫程式不只是把功能做好就好了,一些疏忽的漏洞反而帶來更大的危害。

但是一般的程式撰寫的書,或是老師上課,都是教我們如何寫程式、如何把需要的功能寫出來,但是卻很少在教我們寫較安全的程式。

說到系統安全,我想起曾經念某所大學 (打馬賽克,請勿人肉),而校方有開給每位學生 Unix 帳號,可能一般大家也不大會去使用,頂多進去看看信,不過有次我就連進那台 Unix 主機,在一些路徑切換著,意外地在某路徑發現很神奇的 meta file ,我 vi 一看檔案內容,疑似存著改過密碼的 user 列表及密碼,然後我就偷偷地存起來。

當時那年代還在用電話撥接才能連上 Internet,而且是透過學校提供的帳號密碼才行,我無聊試試這些存下來的帳密,結果還真可以使用,我畢業後,學生帳號被刪除了,但是我還有這多組可以讓我繼續撥接。

說這次的經驗不是要說我多厲害,而且我也只是到一些路徑逛逛而已,並不高招,但是這樣容易洩漏重要資訊的做法,是否你我之間都會犯錯呢?

2014年1月10日 星期五

shell script 裡取絕對值

Last updated on Jan 10th, 2014 by Sam Lin <samlin35@gmail.com>


我臨時需要在 shell script 裡計算絕對值,經我參考一些網路上的文章與討論後,最後找到這樣的方法是可行的,寫成筆記並且跟大家分享。下面範例重點就在於 $price_down 這個變數後面使用 #- ,就可以將參數變成絕對值了。


My environment: Freebsd 9.2


$ cat abs_ex.sh
#!/bin/sh
htc2012=1300
htc2013=123
price_down=`expr $htc2013 - $htc2012`
echo price_down=$price_down
echo abs=${price_down#-}


$ ./abs_ex.sh
price_down=-1177
abs=1177

2014年1月6日 星期一

Clear dmesg in Freebsd

My environment: Freebsd 9.2


root@freebsd91:/root # sysctl kern.msgbuf_clear=1
kern.msgbuf_clear: 0 -> 0
root@freebsd91:/root # dmesg


root@freebsd91:/root #


Last updated on Jan 6th, 2014 by Sam Lin <samlin35@gmail.com>

2013年12月24日 星期二

configure 時缺少 ncurses

OS:ubuntu 13.10


有時在對套件做 configure 時會遇到如下訊息,即在系統裡少了 ncurses library。


configure: error: ncurses or ncursesw selected, but library not found (--without-ncurses to disable)


這時只要使用如下指令安裝 ncurses-dev 套件即可。


#apt-get install libncurses-dev


Dec 24th, 2013 by samlin35
Last Modified on Dec 24th, 2013

2013年10月1日 星期二

sh infinite loop

sh infinite loop

Oct 1th, 2013 by Chuan-Hsien Lin
Last Modified on Oct 1th, 2013

有時候我們在 unix-like 的環境底下,需要簡單重複某些動作,例如用在測試程式、或是檢查狀態等等,簡單的方法是使用 shell script 就可以做到這樣的無窮迴圈 (infinite loop),下面範例以 sh 為例,檔名取為 run.sh。

#!/bin/sh

while :
do
   echo "test"
   sleep 1
done

以上程式存檔之後,記得要改為可執行權限,使用 chmod +x run.sh 指令修改其權限。

然後在 command line 環境下執行 ./run.sh 即可。

執行結果如下,就會不停地重複 while 裡面的動作。

ingrasys:~# ./run.sh
test
test
test
test
test
test

...

2013年5月31日 星期五

顯示檔案中第幾行的內容

顯示檔案中第幾行的內容

May 31th, 2013 by Chuan-Hsien Lin
Last Modified on May 31th, 2013

有同事問我怎麼在 Linux 中顯示出檔案中的某一行,像這樣的功能使用 sed 來做是非常簡單地就可以辦到了,由以下的簡單的範例來說明用法。

[sam@sever ~]$ cat testfile
12345
abcdefghijkl
678901234
mnopqrstuvwxyz
[sam@sever ~]$ sed -n '2p' testfile
abcdefghijkl

在 testfile 這個檔案裡有四行文字,接著使用 sed -n '2p' testfile 可以將第二行的內容顯示出來。如果要顯示別行,就將 2 改成該行號即可。