今天公司有台環境不知道為什麼ssh-key一直無法通行,怎麼登入都還是需要打密碼。後來試著在client用ssh -vvv 去看訊息,得到了
debug3: load_hostkeys: loading entries for host "172.16.15.139" from file "/root/.ssh/known_hosts"
debug3: load_hostkeys: found key type RSA in file /root/.ssh/known_hosts:21
debug3: load_hostkeys: loaded 1 keys
debug1: Host '192.168.0.1' is known and matches the RSA host key.
debug1: Found key in /root/.ssh/known_hosts:21
debug2: bits set: 512/1024
debug1: ssh_rsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /root/.ssh/id_rsa (0x7f91407b54f0)
debug2: key: /root/.ssh/id_dsa ((nil))
debug2: key: /root/.ssh/id_ecdsa ((nil))
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug3: start over, passed a different list publickey,gssapi-with-mic,password
debug3: preferred publickey
debug3: authmethod_lookup publickey
debug3: remaining preferred:
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /root/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug1: Trying private key: /root/.ssh/id_dsa
debug3: no such identity: /root/.ssh/id_dsa
debug1: Trying private key: /root/.ssh/id_ecdsa
debug3: no such identity: /root/.ssh/id_ecdsa
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey,gssapi-with-mic,password).
似乎是跟permission有關,但看了半天包括client上的private key跟server上面的public key檔案都是正常。後來上網稍微搜尋了一下,看到這個文章提到可以看server上的/var/log/secure來得到確切的error log。
Authentication refused: bad ownership or modes for directory /root
在仔細看了一下,才發現原來不知道誰把/root權限由750改為755,而sshd設定檔(/etc/init.d/sshd)有個參數StrictModes跟這個有關,只要整條path有任何目錄權限不對就會阻止public key使用。
結果花了一個小時查原因,但畢竟是共同開發環境,難免遭遇這種狀況就是。
2012年10月17日 星期三
2012年10月4日 星期四
2012年8月7日 星期二
Linux Shell Command Logger
1. 新增下列到/etc/bashrc中
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
若您使用的是ubuntu,則檔案為/etc/bash.bashrc。若使用centos,檔案為/etc/profile
ps. /etc/profile或/etc/bashrc等檔案要視順序設定,可參考http://www.51testing.com/?uid-225738-action-viewspace-itemid-216622
2. 新增下列到/etc/syslog.conf
local6.* /var/log/commands
3. 若需要log rotate,則新增/var/log/commands這行到/etc/logrotate.d/rsyslog中 (以ubuntu為例,若您使用centos則是/etc/logrotate.d/syslog)
4. 參考資料
http://blog.kxr.me/view/classic
http://efreedom.com/Question/6-93566/Log-Bash-Commands-Users-Server
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
若您使用的是ubuntu,則檔案為/etc/bash.bashrc。若使用centos,檔案為/etc/profile
ps. /etc/profile或/etc/bashrc等檔案要視順序設定,可參考http://www.51testing.com/?uid-225738-action-viewspace-itemid-216622
2. 新增下列到/etc/syslog.conf
local6.* /var/log/commands
3. 若需要log rotate,則新增/var/log/commands這行到/etc/logrotate.d/rsyslog中 (以ubuntu為例,若您使用centos則是/etc/logrotate.d/syslog)
4. 參考資料
http://blog.kxr.me/view/classic
http://efreedom.com/Question/6-93566/Log-Bash-Commands-Users-Server
2012年6月22日 星期五
Pylons profiling工具 -- repoze.profile
repoze.profile可以針對WSGI進行完整的profiling,本文特別針對Pylons的使用做簡單說明
1. 安裝
只要使用
http://pypi.python.org/pypi/repoze.profile
http://docs.repoze.org/profile/#viewing-the-profile-statistics
http://nickmurdoch.livejournal.com/392632.html
1. 安裝
只要使用
$ easy_install repoze.profile
下完指令即可安裝完成
2. 設定
直接在pylons的middleware.py修改如下
from repoze.profile.profiler import AccumulatingProfileMiddleware
# ...
def make_app(.....):
load_environment(global_conf, app_conf)
app = PylonsApp()
app = AccumulatingProfileMiddleware(
app,
log_filename='/tmp/profiling.log',
cachegrind_filename='/tmp/cachegrind.out',
discard_first_request=True,
flush_at_shutdown=True,
path='/__profile__'
)
app = RoutesMiddleware(app, config['routes.map'])
app = SessionMiddleware(app, config)
app = CacheMiddleware(app, config)
#.....
log_filename代表profiling log檔案存放位置
cachegrind_filename代表要給KCachegrind工具觀看的profiling log檔案存放位置
discard_first_request代表要不要忽略第一次檢視的結果,因為通常第一次的數據都會比較不正常而影響了整體的結果
flush_at_shutdown代表middleware instance不存在時是否要將profiling結果刪掉
path顧名思義就是利用browser檢視profile結果的URI
設定完成後重起httpd server
3. 確認結果
確認 http://localhost/__profile__ 能否存取
理論上可以看到畫面如下
4. 使用KCachegrind檢視
5. 參考資料
http://pypi.python.org/pypi/repoze.profile
http://docs.repoze.org/profile/#viewing-the-profile-statistics
http://nickmurdoch.livejournal.com/392632.html
2012年6月7日 星期四
Perforce Console 版本教學
以下教學同時適用於mac版與linux版
1. 下載perforce console版
請至 http://www.perforce.com/downloads/complete_list 下載The Perforce Command-Line Client (P4),檔案會是一個執行檔。下載後請放置於/usr/bin/並修改檔案權限。
sudo chmod 755 /usr/bin/p4
2. 設定環境變數
修改~/.bashrc,加入下列資訊
export P4HOST={SERVER HOSTNAME}
export P4PORT={PORT}
export P4CLIENT={WORKSPACE NAME}
export P4USER={USERNAME}
unset P4CHARSET
P4CHARSET參數視client與server之間的編碼版本決定,細節可見 http://www.perforce.com/perforce/doc.current/manuals/cmdref/env.P4CHARSET.html
其他環境變數可參見 http://www.perforce.com/perforce/doc.current/manuals/p4guide/02_config.html 說明
接著重新載入.bashrc後直接執行p4看看是否與server連結正常。如果出現Perforce client error等字樣,代表環境變數設定還有問題。若成功就會出現相關的help指令說明。
3. 登入perforce
接著輸入p4 login,就會詢問登入密碼,登入後就會顯示成功登入的訊息。如果實在嫌每次都要登入登出麻煩,可以直接在.bashrc中間指定P4PASSWD參數(但因為放置於.bashrc等於是明碼儲存,並不建議)
p4 login
4. 建立workspace
若此台電腦尚未開啟過workspace,只要執行p4 client即可,便會跳出一個vim文字編輯畫面,讓您修改此workspace相關訊息,儲存後就會在server上建立一個新的workspace。比較重要的參數就是Client、Root與View這幾個參數,Client就是屆時在清單會看到的workspace名稱,Root則是程式碼儲存的根目錄,View則是會決定你要同步出來的路徑深度。
p4 client
接著可用 p4 workspaces -u 確認目前此user的workspace狀態,並檢查剛剛的workspace是否有建立
p4 workspaces -u {USERNAME}
若要看更詳細的workspace訊息,可用 p4 client -o 指令把前面vim編輯的訊息倒出來
p4 client -o {WORKSPACE NAME}
若要刪除workspace,執行 p4 client -d 即可
p4 client -d {WORKSPACE NAME}
5. 倒出程式碼
p4 sync {PATH ON SERVER}/...
目錄會幫忙開好
強制sync到最新版
p4 sync -f {PATH ON SERVER}/...
p4 sync -n沒有真的同步,只是把結果先倒出來
p4 sync -n ./... 列出目前路徑下還有哪些檔案沒有up-to-date
如果出現Request too large代表此路徑下檔案太多,需要縮小範圍來sync
6. 確認檔案狀況
p4 have {FILENAME} 確認該檔案在client端 的目前版本。可用p4 have *
p4 files {FILENAME} 確認該檔案在server端的最新版本 。可用p4 files *
p4 fstat {FILENAME} 確認該檔案更詳細的訊息。其中還可以看到誰也開了這檔案。可用p4 fstat *
p4 changes {FILENAME} 列出檔案各個版本與歷史紀錄
p4 changes -m {MAX} {FILENAME} 只列出該檔案最近的幾個版本與紀錄
p4 changes -i ./... 列出目前目錄下所有子目錄所有檔案的 各個版本與歷史紀錄
p4 filelog {FILENAME} 列出更詳細的版本與歷史紀錄
7. 修改檔案
p4 add {FILENAME} 新增檔案
p4 diff {FILENAME} 假設你正在修改revision #4,就會比較你現在改的跟原本revision #4的差別
p4 diff {FILENAME}#{ REVISION} 比較你現在改的跟特定revision
p4 diff {FILENAME}#HEAD 比較你現在改的跟特定revision跟server上最新的revision
p4 diff2 {FILENAME}#{REVISION1} {FILENAME} #{REVISION2} 比較server上兩個revision
p4 diff -se 列出你自己沒有先edit就強制編輯的檔案
p4 diff -se | p4 -x -edit 將上述的檔案通通edit開
p4 diff -sd 察看哪些檔案不是用p4 delete而是自己手動在本地刪除的
p4 edit {FILENAME} 將程式碼check-out出來
p4 submit {FILENAME}將程式碼check-in進去
p4 submit -d {DESC} 將程式碼check-in進去並補上說明
p4 revert {FILENAME} 直接將檔案倒回編輯時check-out的原樣
p4 revert 直接將所有開啟的檔案全部倒回
p4 delete {FILENAME} 刪除特定檔案
p4 sync {FILENAME}#{ REVISION} 將本地檔案倒回某個版本
p4 sync ./... 更新該目錄與子目錄下所有的檔案至server的的最新revision
p4 opened 列出目前已經check-out的檔案
p4 move {FILENAME} {NEW FILENAME or NEW FILEPATH} 搬移或rename某個檔案 (更名亦可用p4 rename {OLD FILENAME} {NEW FILENAME})
p4 restore {FILENAME}#{REVISION} 將某個檔案倒回到特定版本
p4 resolved 解決某個檔案的衝突
8. 進階用法
p4 tag -l {LABEL} {FILENAME} 將某個檔案加入特定label
p4 label {LABEL} 建立或編輯label
p4 labels -u{USERNAME} 列出該user所有的label
p4 labels ./... 列出此路徑下存在的label
p4 sync @{LABEL} 同步該label中的所有文件
p4 files @ {LABEL} 查看該label所包含的文件列表
p4 branch {BRANCHNAME} 建立branch
p4 branches -u {USERNAME} 顯示該使用者擁有的branch
p4 integrate -b {BRANCHNAME} 合併該brach中的文件
p4 dirs -H . 顯示當前目錄
9. 求助
p4 help 列出重要指令說明
p4 help commands 列出所有指令的說明
p4 help {COMMAND} 針對特定指令的更詳細說明
p4 help revisions 列出針對檔案版本的指令說明,例如#rev或@change的意義
1. 下載perforce console版
請至 http://www.perforce.com/downloads/complete_list 下載The Perforce Command-Line Client (P4),檔案會是一個執行檔。下載後請放置於/usr/bin/並修改檔案權限。
sudo chmod 755 /usr/bin/p4
2. 設定環境變數
修改~/.bashrc,加入下列資訊
export P4HOST={SERVER HOSTNAME}
export P4PORT=
export P4CLIENT={WORKSPACE NAME}
export P4USER={USERNAME}
unset P4CHARSET
P4CHARSET參數視client與server之間的編碼版本決定,細節可見 http://www.perforce.com/perforce/doc.current/manuals/cmdref/env.P4CHARSET.html
其他環境變數可參見 http://www.perforce.com/perforce/doc.current/manuals/p4guide/02_config.html 說明
接著重新載入.bashrc後直接執行p4看看是否與server連結正常。如果出現Perforce client error等字樣,代表環境變數設定還有問題。若成功就會出現相關的help指令說明。
3. 登入perforce
接著輸入p4 login,就會詢問登入密碼,登入後就會顯示成功登入的訊息。如果實在嫌每次都要登入登出麻煩,可以直接在.bashrc中間指定P4PASSWD參數(但因為放置於.bashrc等於是明碼儲存,並不建議)
p4 login
4. 建立workspace
若此台電腦尚未開啟過workspace,只要執行p4 client即可,便會跳出一個vim文字編輯畫面,讓您修改此workspace相關訊息,儲存後就會在server上建立一個新的workspace。比較重要的參數就是Client、Root與View這幾個參數,Client就是屆時在清單會看到的workspace名稱,Root則是程式碼儲存的根目錄,View則是會決定你要同步出來的路徑深度。
p4 client
接著可用 p4 workspaces -u
p4 workspaces -u {USERNAME}
若要看更詳細的workspace訊息,可用 p4 client -o
若要刪除workspace,執行 p4 client -d
5. 倒出程式碼
p4 sync {PATH ON SERVER}/...
目錄會幫忙開好
強制sync到最新版
p4 sync -f {PATH ON SERVER}/...
p4 sync -n
如果出現Request too large代表此路徑下檔案太多,需要縮小範圍來sync
6. 確認檔案狀況
p4 have
p4 files {FILENAME}
p4 fstat {FILENAME}
p4 changes {FILENAME}
p4 changes -m {MAX}
p4 changes -i ./... 列出目前目錄下所有子目錄所有檔案的 各個版本與歷史紀錄
p4 filelog {FILENAME}
7. 修改檔案
p4 add {FILENAME}
p4 diff {FILENAME}
p4 diff
p4 diff
p4 diff2
p4 edit
p4 submit {FILENAME}
p4 submit
p4 revert {FILENAME}
p4 delete {FILENAME}
p4 opened 列出目前已經check-out的檔案
p4 move {FILENAME} {NEW FILENAME or NEW FILEPATH} 搬移或rename某個檔案 (更名亦可用p4 rename {OLD FILENAME} {NEW FILENAME})
p4 restore {FILENAME}#{REVISION} 將某個檔案倒回到特定版本
p4 resolved 解決某個檔案的衝突
8. 進階用法
p4 tag -l {LABEL} {FILENAME} 將某個檔案加入特定label
p4 label {LABEL} 建立或編輯label
p4 labels -u
p4 sync @{LABEL} 同步該label中的所有文件
p4 files @
p4 branch {BRANCHNAME} 建立branch
p4 branches -u {USERNAME} 顯示該使用者擁有的branch
p4 integrate -b
p4 dirs -H . 顯示當前目錄
p4 help {COMMAND} 針對特定指令的更詳細說明
訂閱:
文章 (Atom)