2012年10月29日 星期一

如何在AIX作業系統排程crontab中執行sftp指令 (以RSA key認證時)

建議先讀一下這篇...算是前文吧...
使用 SFTP with RSA key 認證 (不需密碼)
http://n9tech.blogspot.tw/2012/08/aix53-sftp-with-rsa-key.html

作業系統:AIX 5.3


AIX作業系統下,SFTP使用RSA key認證時的shell script放在排程(crontab)裡的寫法,跟FTP不同
得修改程式架構
並不是把原程式裡的FTP指令前面加個S這麼簡單 (←這是我一開始的幻想 嗚)

AIX環境中,必須使用sftp -b這個參數,並把「連線指令」跟「上傳/下載指令」分開成兩個檔案
在crontab中只要執行「連線指令」的shell script檔案即可


(1) sftp.sh →連線指令shell script,一行解決
=================================================
sftp -b /user/sftp.cmd testsftp@10.11.11.11
=================================================

說明一下
sftp -b:請愛用-b參數
/user/sftp.cmd:絕對路徑+上傳/下載指令檔名
testsftp@10.11.11.11:建好RSA Key的帳號@對方主機IP


(2) sftp.cmd →sftp指令
=================================================
ls
cd /raw    //切換遠端目錄
pwd
lcd /home/abc/ //切換本地目錄
mput *    //上傳所有檔案...下載就是get / mget
bye
=================================================


所以本例,在crontab就是執行(1)那支sftp.sh

總之...又是一個說破就不值錢的東西XD



2012年8月29日 星期三

使用 SFTP with RSA key 認證 (不需密碼)

作業系統:AIX5.3 不過這篇寫的跟OS應該沒有很大關係


(1) 從sftp client端產生RSA key,預設目錄為$HOME/.ssh/id_rsa/ 所以key會根據帳號而有所不同
   A帳號執行ssh-keygen -t rsa產生的Key,只專屬A帳號使用
   最後生成的key會寫在這裡:$HOME/.ssh/id_rsa.pub
 

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): //通常不變更預設目錄,直接按enter
Enter passphrase (empty for no passphrase): //直接按enter
Enter same passphrase again: //直接按enter
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.  //這檔案就是RSA key
The key fingerprint is:
42:cf:5b:16:b6:18:2c:d8:16:b6:18:16:b6:18  user@p570
$

cat /home/user/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAuZxlEWJjustrSmibL7PybZK8rvvDJJ4n+9n9BNU58otIw61gaJCFRwkzsJjjsmCFx0bjpSEKetSl8L0ooIRkoKkbnK0BYfwDvWlVuwt3I6ylcLx2V2EepuH+1vPmf0JOmnAWYkqf8kn0AE10JQZtK= user@p570




(2) 修改sftp server端的authorized_keys
  放在該user的$HOME/.ssh/authorized_keys(如本例帳號為testsftp)
  這也意味著會認sftp server登入的帳號喔~用別的帳號登入就抓不到了
  下面的例子,我是自己把 authorized_keys 抓到client端,自行修改
  當然正規作法應該是把key給sftp server端的系統管理員,請他們加

$ cd /home/user
$ sftp testsftp@10.11.11.11
Connecting to 10.11.11.11 ...

 Welcome to 10.11.11.11

Password:
sftp> cd .ssh
sftp> ls
.                ..               authorized_keys
sftp> mget authorized_keys
Fetching /.ssh/authorized_keys to authorized_keys
sftp> bye
$ ls
authorized_keys


     用vi(或其它你愛的文書編輯器)把剛剛產生的RSA key (路徑:/home/user/.ssh/id_rsa.pub)
  複製到authorized_keys的最下面並且要記得換行
  authorized_keys檔案裡面如果有別台server的key,請不要刪除,不然會害別人無法登入XD
  編輯完再cat看看,驗證一下

$
$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAuZxlEWJjustrSmibL7PybZK8rvvDJJ4n+9n9BNU58otIw61gaJCFRwkzsJjjsmCFx0bjpSEKetSl8L0ooIRkoKkbnK0BYfwDvWlVuwt3I6ylcLx2V2EepuH+1vPmf0JOmnAWYkqf8kn0AE10JQZtK= user@p570


(3) 將編輯完成的authorized_keys上傳至sftp server


$ sftp testsftp@10.11.11.11
Connecting to  10.11.11.11 ...

 Welcome to 10.11.11.11

Password:          //未上傳key之前都要輸入密碼
                                     
sftp> cd .ssh
sftp> ls
.                ..               authorized_keys

sftp> mput authorized_keys
Uploading authorized_keys to /.ssh/authorized_keys
Uploading authorized_keys to /.ssh/authorized_keys
sftp>
sftp> ls -l
drwx------    0 22002    2000           96 May 11 09:33 .
drwxr-xr-x    0 22002    0            8192 Jul 30 17:09 ..
-rw-r-----    0 22002    2000          664 Aug 27 17:18 authorized_keys
sftp> bye
$

(4) 最後測試一下是否不需密碼就能連

root@p570/.ssh>sftp testsftp@10.11.11.11
Connecting to  10.11.11.11 ...


 Welcome to 10.11.11.11

sftp>                          //直接出現sftp>提示,不用密碼
sftp> bye
$



後記:

這篇看起來好像很長,其實實作起來很簡單

我這菜鳥遇到的困難是在把sftp指令寫成shell script,並寫到crontab排程
請參考
《如何在AIX作業系統排程crontab中執行sftp指令 (以RSA key認證時)》
http://n9tech.blogspot.tw/2012/10/aixcrontabsftp-rsa-key.html



2012年8月21日 星期二

Symbol resolution failed for /usr/lib/libc_r.a[aio_64.o] 解法


症狀:
root@p550/home/root>oninit -v
exec(): 0509-036 Cannot load program oninit because of the following errors:
        0509-130 Symbol resolution failed for /usr/lib/libc_r.a[aio_64.o] because:
        0509-136   Symbol kaio_rdwr64 (number 1) is not exported from
                   dependent module /unix.
        0509-136   Symbol listio64 (number 2) is not exported from
                   dependent module /unix.
        0509-136   Symbol acancel64 (number 3) is not exported from
                   dependent module /unix.
        0509-136   Symbol iosuspend64 (number 4) is not exported from
                   dependent module /unix.
        0509-136   Symbol aio_nwait (number 5) is not exported from
                   dependent module /unix.
        0509-136   Symbol aio_nwait64 (number 6) is not exported from
                   dependent module /unix.
        0509-136   Symbol aio_nwait_timeout (number 7) is not exported from
                   dependent module /unix.
        0509-136   Symbol aio_nwait_timeout64 (number 8) is not exported from
                   dependent module /unix.
        0509-026 System error: Error 0
        0509-192 Examine .loader section symbols with the
                 'dump -Tv' command.

解法:
ibm官網給的指令直接照用,不需修改
詳見http://www-01.ibm.com/support/docview.wss?uid=swg21291083
說是AIO裝置沒啟用(not having Asynchronous IO (AIO) device enabled (loaded) in the server.)......
設定完需重啟server

root@p550/home/root>/usr/sbin/chdev -l aio0 -a autoconfig=available
aio0 changed
root@p550/home/root>/usr/sbin/mkdev -l aio0
aio0 Available
root@p550/home/root>shutdown -Fr

2012年8月17日 星期五

sendmail錯誤訊息:unable to qualify my own domain name (p570) -- using short name


作業系統AIX5.3

發現/var/adm/messages快被「sendmail[942290]: unable to qualify my own domain name (p570ap1) -- using short name」灌爆了

雖然不影響服務 但想說還是理他一下好了
解法很簡單
修改/etc/hosts
把設定主機的那行後面多加xxx.com
例如:
10.1.1.21     p570  p570.com

存檔以後瞬間OK

AIX 5.3停用sendmail



(1) 停掉sendmail

root@p550/>stopsrc -s sendmail
0513-044 The sendmail Subsystem was requested to stop.

(2) 確認一下有沒有停掉(只有一行表示成功)

root@p550/>ps -ef | grep sendmail
    root 336058 393352   0 15:45:45  pts/7  0:00 grep sendmail

(3)開機不啟動sendmail

root@p550/>chrctcp -d sendmail
root@p550/>

如何在排程crontab中執行informix dbaccess指令


作業系統 AIX 5.3

原本把這shell寫成可執行檔(xxx.sh)是可以執行並且正常輸出
結果放在排程(crontab)裡就無法輸出執行結果
氣死我了
google了很久,才知道在排程中執行informix dbaccess指令需要一併設定環境變數
在排程中是吃不到informix環境變數的,所以crontab裡的job就會失敗
dbaccess這個指令也加上絕對路徑來下

最後改好能順利放在crontab的程式(xxx.sh)長這樣:
=============================

#!/bin/ksh
./.profile
INFORMIXSERVER=test
export INFORMIXSERVER
INFORMIXDIR=/usr/informix
export INFORMIXDIR
ONCONFIG=/usr/informix/etc/onconfig
export ONCONFIG


echo "***** `date '+%m/%d %H:%M:%S'`  *****" >> /home/informix/checkuser.log
/usr/informix/bin/dbaccess  test /home/informix/cu.sql

=============================
(寫得不好請見諒 因為我很菜 也是copy網路來改 只求能跑 不求精美)

上面的環境變數的值,記得改成自家的

最重要的一行彩色字,簡單說明一下:

/usr/informix/bin/dbaccess →加了絕對路徑就無敵的dbaccess
test          →DB名稱
/home/informix/cu.sql →這是我要執行的sql查詢句,看倌們可以任意替換路徑和檔名


註:

研究兩三天,最後打成網誌就這麼一丁點

真他奶奶的

shared memory not initialized for INFORMIXSERVER解法

作業系統AIX 5.3

症狀:
$ onstat -
shared memory not initialized for INFORMIXSERVER 'online'
$ onmode -ky
shared memory not initialized for INFORMIXSERVER 'online'
$ oninit -v
Your evaluation license will expire on 2007-10-30 00:00:00
Checking group membership to determine server run mode...succeeded
Reading configuration file '/opt/informix/etc/onconfig'...succeeded
Creating /INFORMIXTMP/.infxdirs...succeeded
Creating infos file "/opt/informix/etc/.infos.informixserver"...succeeded
Linking conf file "/opt/informix/etc/.conf.informixserver"...succeeded
Writing to infos file...succeeded
Checking config parameters...succeeded

WARNING: If you intend to use J/Foundation with this Server instance, please make sure that your SHMBASE value specifies in onconfig is 0x700000010000000 or above. Other
wise you will have problems while dynamimically adding virtual shared memory segments. Please refer to Server machine notes for more information.

Allocating and attaching to shared memory...FAILED
oninit: Fatal error in shared memory creation

解法:
下env指令,檢查INFORMIX相關的環境變數是否正確
以及檢查sqlhost、/etc/hosts…等等


一般來說環境變數有:
INFORMIXDIR=/usr/informix
INFORMIXSERVER=test
有的還會把ONCONFIG編進去 (可是我的server原本就沒編)

結果發現INFORMIXSERVER這個環境變數設錯了

informix本身的環境變數放在此路徑:/usr/informix/.profile

我這次遇到的神奇狀況是…
informix下的.profile這個檔案的INFORMIXSERVER是對的
但root使用的 /.profile(在根目錄)下的INFORMIXSERVER設錯,因為我中途先su 成root,env吃到root的設定,於是造成變數錯誤的問題
不知道哪個前人從別台亂copy過來,真他奶奶的
所以,最後修正root的profile後,重啟informix就OK了(這算是特例吧= =)


另外,我下oninit -v以後,雖然有出現一行很長的Warning如下:
WARNING: If you intend to use J/Foundation with this Server instance, please make sure that your SHMBASE value specifies in onconfig is 0x700000010000000 or above.
但我照著改onconfig中的SHMBASE值後還是不能啟動informix=.= 所以…是一個無效的建議


附錄 - 重啟informix指令:
onmode -ky → 關掉informix
oninit -v → 啟動informix並檢視過程,會逐項報告success or fail



註:
google了一下,通常一般人遇到是其它地方,比如說sqlhost設錯之類的
可參考:http://bbs.chinaunix.net/thread-915528-1-1.html