2009年2月27日 星期五
[筆記]ssh蕩劍十式(2)
ssh -L 4321:REMOTEHOST:1234 maxsolar@REMOTEHOST
-L表示本地端的意思。本地的port 4321到對方的port 1234建立一個加密連線。
B. reverse port forwarding:
ssh -R 4321:LOCALHOST:1234 maxsolar@REMOTEHOST
-R表示遠端的意思。遠端的port 4321到本地的port 1234建立一個加密連線。
C.tunneling and port forwarding:
ssh -L 4321:REMOTEHOST:1234 maxsolar@THIRDHOST
這個比較有趣,結合了tunnelling跟forwarding,本地端port 1234建立一個加密連線到第三方主機,第三方主機會把封包轉送到遠端的port 4321。請注意紅色跟綠色連線標示,從第三方主機開始,連線就沒有加密,但是可以作到封包轉送。中國的資訊封閉,很多軟體就是透過這樣的原理接觸到其他國家的新聞。
08. 第六式:公鑰認證
A. 製作一個公鑰認證:可以允許使用者登入時不用輸入密碼(或是僅輸入密語,passphrase),也可以減少密碼曝光的機率。首先我們「只使用」ssh2, 因為他用的技術可以避免劊客封包攔截(middle of the man)。假設我們產生一個rsa的key pair(注意:以普通使用者身份執行,因為是要產生自己的key pair):
ssh-keygen -t rsa此時會產生一對公鑰跟私鑰,放置的位置不必更動,預設是~/.ssh/id_rsa(私鑰)以及~/.ssh/id_rsa.pub(公鑰)。之後會要求你輸入密語(passphrase),你可以選擇按enter保持密語空白,也可以輸入密語。 任何人於任何時刻都不應該把私鑰傳送出去,特別是透過samba,需確定除了自己以外的使用者毫無存取自己家目錄的可能。 B. 把作好的公鑰傳送到信任的遠端。「信任」是一個很主觀的問題,遠端主機效率不好、很愚蠢的系統管理員或是有很厲害又愛搞破壞的使用者都可以算是不能信任。但無論如何,你不需要把自己的公鑰傳送到你不知道該不該信任的主機,雖然他只是公鑰。
scp ~/.ssh/id_rsa.pub REMOTEHOST:~/.ssh/LOCALHOST_pubkey ssh REMOTEHOST 'cat ~/.ssh/LOCALHOST_pubkey >> ~/.ssh/authorized_keys'~/.ssh/authorized_keys是遠端主機儲存你個人公鑰的地方,字不要打錯了! 這時候你再利用ssh 連線到遠端主機,你會發現不用打密碼了;如果你在產生rsa的key pair時選擇輸入密語,這時出現的提示就是輸入密語,而非密碼。 C.我不想要輸入密語,可以嗎? 假設產生key pair時你沒有輸入密語,這個小段你可以不用理會。假設你輸入了密語,你可以「暫時」不用輸入密語:在本地端機器以普通使用者執行
ssh-agent bash ssh-add ~/.ssh/id_rsa此時會要求輸入密語。輸入你先前產生的那個密語並交給ssh-agent來幫你自動回答密語,此時你再使用ssh連線到遠端主機,就會連密語也不會問了!不過關閉這個shell,整個ssh-agent也會結束,要相同目的只能重作一次。 D.附記:遠端連線不用輸入密碼是很愉快的事情;事實上,在步驟B時,使用者也可以愚蠢的把本地端自己的私鑰傳到遠端主機;別懷疑,也是可以達成不用輸入密碼的效果!不過如果你的authorized_keys權限不是600的話,那可真的是令自己陷於水火之中呢! 09. 第七式:取得公鑰 當你連線到遠端主機,你會被提示是否要加入遠端主機的公鑰,因此取得公鑰是容易的事情。不過有時候系統管理員會因為安全性設定(ssh_config裡的StrictHostKeyChecking設定為yes),導致使用者無法增加新的公鑰,得到如下的錯誤訊息:
No RSA host key is known for planck and you have requested strict checking. Host key verification failed.使用者必須手動加入遠端主機的公鑰到~/.ssh/known_hosts裡:
ssh-keyscan -t rsa REMOTEHOST > REMOTE.pub cat REMOTE.pub >> ~/.ssh/known_hosts假設管理員設定ssh_config將該遠端機器排除連線,那麼手動加入也沒有效果。 10. 第八式:基本的安全性設定 server端:/etc/ssh/sshd_config
AllowUsers #限定可以登入的使用者。 DenyUsers #同時存在時,以Deny為主;多個使用者以空白鍵分開 Protocol 2 #ssh version 2 ListenAddress #用address:port表示 Port 22 #改變port number PasswordAuthentication no #設定成no。我們使用的不是密碼認證。 UsePAM yes #使用PAM認證 PermitRootLogin no #不允許root登入 X11Forwarding yes #允許遠端傳圖形至本機client端:/etc/ssh/ssh_config
Host * #可限制遠連線主機
ForwardX11 yes #允許遠端傳圖形至本機
Protocol 2 #僅允許使用者使用ssh version 2
PasswordAuthentication no #設定成no。我們使用的不是密碼認證。
StrictHostKeyChecking yes #預設是ask。設定成yes可以限制使用者只連線已在
known_hosts裡的主機。
11. 第九式:以denyhosts保護你的ssh伺服器
請確保denyhosts會在開機時啟動:
insserv denyhosts檢查看看有沒有在正確的runlevel啟動:
chkconfig -l | grep denyhosts以下是列出/etc/denyhosts.conf比較重要的部份:
SECURE_LOG = /var/log/auth.log (Debian only) HOSTS_DENY = /etc/hosts.deny PURGE_DENY = #PURGE_DENY定義多久以後清除被封鎖的主機。 空值表示永不清除。 BLOCK_SERVICE = ALL #BLOCK_SERVICE定義被限制的daemon名稱。 DENY_THRESHOLD_INVALID = 1 #定義了無效的使用者名稱的登入次數。 DENY_THRESHOLD_VALID = 4 #除root外,有效的使用者名稱最高容忍登入錯誤次數。 DENY_THRESHOLD_ROOT = 1 #root所能允許錯誤登入次數。 其實這已無所謂,因為我的sshd並不允許root登入。 DENY_THRESHOLD_RESTRICTED = 1 SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES #如果設定為YES:如果從allowed-host中可疑的試圖登入結果,被認為是可疑的 #如果設定為NO :如果從allowed-host中可疑的試圖登入結果,不會被報告記錄 #(所有可疑登入的IP位址不在allowed-hosts中,皆會被報告紀錄) HOSTNAME_LOOKUP=YES #如果設定為YES:每個IP位址會被記錄在Denyhosts, 符合的主機名稱同樣的也會被查詢且紀錄 DAEMON_LOG = /var/log/denyhosts #log位置。需要特別自訂的參數大致上是這些,你也可以參考Bad IPs來寫進/etc/hosts.deny。 12. 第十式:掛載ssh filesystem 假設您已經安裝了sshfs,你可以這樣掛載sshfs:
sshfs maxsolar@REMOTEHOST: mountpoint也許會出現:
failed to open /dev/fuse: Permission denied解決的方法很簡單,把使用者加入fuse群組裡即可。卸載sshfs則是
fusermount -u mountpoint您也可以參考:[筆記]ssh蕩劍十式(1) 參考來源: http://zh.wikipedia.org/wiki/OpenSSH http://www.openssh.org/manual.html http://linux.vbird.org/linux_server/0310telnetssh.php Netman老師寫的:ssh的一些技巧心得
[筆記]ssh蕩劍十式(1)
aptitude install ssh sshfs denyhosts02.ssh蕩劍十式簡介:
A.遠端登入:ssh maxsolar@REMOTEHOST (搭配-X作X11Forwarding) 遠端執行:ssh maxsolar@REMOTEHOST 'command' B.遠端複製:scp /local/path/foo maxsolar@REMOTEHOST:/remote/path/ C.遠端同步:rsync -ave ssh username@server1name:/home/ /export/home/ D.加密ftp傳輸:sftp maxsolar@REMOTEHOST E.Port Forwarding: ssh -L 1234:REMOTEHOST:4321 maxsolar@REMOTEHOST F.公鑰認證:ssh-keygen (包含ssh-agent + ssh-add) G.取得公鑰:ssh-keyscan H.基本安全設定: I.防護你的ssh伺服器:denyhosts J.掛載sshfs
xhost +REMOTEHOST; telnet REMOTEHOST到remotehost端後:
export DISPLAY=LOCALHOST:0.這個方法不僅麻煩,如果client端是撥接上網,沒有固定ip,或是透過nat上網,那麼設定DISPLAY時就是痛苦萬分,因為你無法告知遠端一個private ip去作X11Forwarding。
ssh -X maxsolar@REMOTEHOST遠端連線並傳回遠端圖形。 遠端執行 跟遠端登入是一樣的道理,只是有時為了執行一件小事情,不需要勞師動眾的連線過去為的只是去看一個小檔案。例如你只是要修改遠端的一份文字檔,你可以用一對單引號把command包住:
ssh -X REMOTEHOST 'gedit text.txt&'同樣的,能不能出現圖形必須看ssh兩端的設定檔。 04. 第二式:遠端複製 利用scp作遠端複製,用法跟cp完全相同。
scp /local/path/foo maxsolar@REMOTEHOST:/remote/path/把本地的foo檔複製到遠端的/remote/path下。
scp maxsolar@REMOTEHOST:/remote/path/foo /local/path/把遠端的foo檔複製到/local/path底下。 我們可以從這個例子學習到兩件事情: A.username可以不加。假設遠端跟本地使用者名稱相同(uid可以不同),加不加username都不影響結果。假設你希望用遠端不同的username去執行,才要另外指定username。例如:
scp /local/path/foo maxubuntu@REMOTEHOST:/remote/path/就是以遠端的maxubuntu身份來執行。 B.路徑的表示法可以是絕對路徑,也可以是相對路徑。例如:
scp linux_guide.odt REMOTE:docs/linux/相同於
scp linux_guide.odt REMOTEHOST:/home/maxsolar/docs/linux/05. 第三式:遠端同步 利用rsync搭配ssh可以使兩地主機資料同步且避免封包被解析出原始資料。
rsync -av -e 'ssh -l username' REMOTEHOST:/home/ /export/home/將server1的/home備份到本機的/export/home來。
rsync -avz --delete -e 'ssh -l username' REMOTEHOST::/home/ /export/home/兩個冒號是使用遠端的rsync server,若本地端loding很重時可以使用。 詳細的筆記請參閱:rsync簡易用法 06. 第四式:加密的ftp傳輸 透過sftp來代替傳統未加密的ftp協定。
sftp maxsolar@REMOTEHOST所有的指令都有分成本機或遠端,例如ls是顯示遠端清單,lls顯示local清單。
get:抓取資料。搭配-P把metadata(權限、mtime、atime全部保留)一起轉移到本機。 put:上傳資料。更多的資訊請man sftp。不過你應該可以使用filezilla來搭配sftp: 從此後可以快快樂樂的使用sftp,把ftp忘記。不過他並不提供匿名的ftp服務,因此不適合對外當成file server。另外,假設某一端的網路環境較慢,sftp傳輸的速率也會比傳統未加密的ftp來得慢。 您可以再參考:[筆記]ssh蕩劍十式(2)
2009年2月25日 星期三
監看系統sockets狀態
aptitude install sockstat分析一下他的用法:
-c: 顯示已連線的socket -l: 顯示監聽中的socket。不加參數時,預設顯示-cl。 -h: help -p簡單好用,跟大家分享。8080: 指定port來顯示 -P 2340: 指定pid來顯示 -U maxsolar: 指定使用者 -G maxsolar: 指定群組
螢幕畫面錄影--xvidcap
dpkg -l xvidcap || aptitude install xvidcap -y
其實還有透過vnc來作螢幕錄影的工具,不過實在沒有時間去嘗試;如果你有相關的紀錄或經驗,請你不吝告訴筆者。
實際上xvidcap的運行是有些缺點在的:
1.xvidcap會不預期的當掉:筆者的經驗是好不容易辛辛苦苦想錄下螢幕的動作,但是xvidcap老早就當了,而且你也不知道到何時當掉的,每次辛苦的動作又要重來,令人生氣@@
2.xvidcap很吃資源:特別是你有開compiz的話,特別容易。筆者的電腦配備算是不錯(AMD Athlon 64 X2 Dual Core Processor 5000+,4G DDR3,nvidia 8800GTS顯示卡)要錄全螢幕(1680x1050)的畫面,總是不超過2分鐘必定當住。就算把特效關掉,我也不敢保證能夠安穩的錄多久@_@。我想畫面大小就看個人的配備而定了;至少當你需要的時候,是有那麼一個工具可以給你使用的!
3.無法紀錄聲音。
2009年2月24日 星期二
資源回收桶應用
在windows xp裡,刪除了一個檔案(當然是指圖形下),使用者可以很輕易的在資源回收桶裡找到該檔案並還原至原來的位置;however,我目前的gnome的環境已經到2.22,nautilus已經到2.20,竟然還是沒有實現原地回復的功能,必須要自己跑到垃圾桶下把檔案放到他應有的位置。在終端機環境裡,利用rm來刪除資料除了使用rm -i來多一層讓自己麻煩的問答外(特別是該目錄下有超過1000個檔案),一旦刪除了就沒有後悔的餘地;偏偏刪除的當下認為可以刪除,過幾天後才後悔為什麼不留著...
本文分別提供圖形與文字介面的資源回收桶介紹,有誤刪檔案情況的朋友可以參考。
1.圖形介面的檔案回復:nautilus沒辦法從垃圾桶復原當原來的位置,因此我們不考慮用他;我們使用在XFce的好用檔案管理員:thunar來當我們桌面環境的預設管理。
dpkg -l thunar || aptitude install thunar安裝完後,可以開啟他,試著刪除隨便一個檔案:
![]() |
| Fig 1.按右鍵可以選擇在桌面製作一個軟連結(捷徑),或是傳送到mail client,或是傳到floppy上。介面很接近pcmanfm,不過功能上是比較完整一點。 |
我們試著刪除這個檔案,再到垃圾桶裡去找他:
![]() |
| Fig 2.在垃圾桶裡找到這個檔案,可以不必為了到底他原本的位置在哪裡而傷腦筋;可以利用restore的功能,就會回復到原來的位置。 |
這是一個相當貼心的功能!thunar裡除了好用的檔案管理之外,你還可以使用他的重新命名檔案工具:Bulk Rename(批次重新命名),不過這不在本文的範圍,我關心的重新命名比較接近變更副檔名、變換大小寫。
如果你的需求跟我接近,或許您還可以參考:bash練習(1)--大小寫互換。
2.文字介面下的檔案回復:
我們需要一個可以刪除該檔案,又能夠把刪除的檔案回覆到原地的好工具:safedelete。不過debian並沒有維護這個好東西,他是由redhat來維護的,不過別擔心,我們可以透過alien來把他轉換成deb來安裝:
wget -c ftp://ftp.muug.mb.ca/mirror/redhat/redhat/linux/7.1/en/powertools/i386/RedHat/RPMS/safedelete-1.3-10.i386.rpm && dpkg -l alien || aptitude install alien -y接著,我參考Jamyy大大的部落格,裡面詳細的介紹基本的設定跟應用。如果你想知道safedelete所帶來的command有哪些,可以透過
alien safedelete-1.3-10.i386.rpm
dpkg -i safedelete*deb
dpkg -L safedelete | grep bin可得知有四個command可用:safedelete, undelete,safecnvt跟safedelchk。
首先,在家目錄的.bashrc或是.profile多增加幾個變數跟別名:
export SAFEDAYS=30 #30天保存期限 alias rm='/usr/bin/safedelete' alias rmreal='/bin/rm -i'修改完別忘了讓shell重新讀取.bashrc或.profile。接著我們檢視一下safedelete的參數:
-i, --interactive -v, --verbose -f, --force -r, -R, --recursive看來跟原本的rm接收的參數都一樣,很好,那麼直接把rm換成safedelete是很安全的。
再檢視undelete的參數:
-i , --info, 也就是檢視檔案的詳細資訊,包含權限等等。 -l, --list, 列出清單 -f, --file -r, --replace -p, --pattern <pattern> 是很常用到的參數。 -a, --all,也是很常用到的參數。那麼safedelchk的參數呢?
不加參數時,就是清除超過保期限的檔案。
-d 10: root only command。
root要刪除所有超過10天的檔案。所得到的後果是,root的safedelete的SAFEDAYS
變成10天,無論原先的設定是大於或小於10天。這個期限跟使用者設定的天數無關。
-u : root only command。root使用safedelchk不帶參數時,會清除所有超過保存期限
的檔案;root透過-u參數讓自己只清除被自己刪除的檔案,以避免清除到使用者的資料。
不過man page裡提到一個有趣的現象:
假設使用者使用"su"變成root,雖然身份是root,但是login shell還是使用者本人,
此時使用safedelchk -u還是刪到自己的。
正確的切換到root身份及root的shell應該要使用"su -"才對,請注意。
safecnvt則是一個轉換log版本的指令,在此我們可以忘記他。
根據以上,我們作幾個小筆記:rm ~/.happy
undelete ~/.happy #一個檔案簡單的回覆
rm -r ~/.books/ #刪除一整個資料夾
undelete -l #先列出有哪些被我們自己刪過的檔案
undelete -p /home/$USER/.books/* -a
#回復符合pattern的所有檔案。
#就算指復原一個檔案,也會把該資料夾復原回來。
safedelchk #清除超過保存天數的檔案。
需要注意的是,這個rm是safedelete的alias阿!如果想要用原本的rm硬幹的話,就用我們剛剛的別名吧:
rmreal -rf .no_more_ms/
參考來源:Jamyy's Weblog
檔案來源:http://rpm.pbone.net/index.php3/stat/4/idpl/2402345/com/safedelete-1.3-10.i386.rpm.html
gromit螢幕畫筆
dpkg -l gromit || aptitude install gromit -y安裝完後,可以開啟一個command接受視窗(利用Alt+F2),啟動gromit。此時的gromit在背景standby,想要使用畫筆快捷鍵整理如下:
pause key: 啟動/關閉gromit畫筆。(無法控制桌面) ctrl+pause: 返回桌面控制狀態。(gromit畫筆還留在螢幕上) shift+pause: 清除畫筆。(按一次清除後,需要再按pause一次才能真的清除畫筆,算是bug) alt+pause: 離開gromit。(離開後gromit不在背景待命,若要使用畫筆需再次呼叫)當你安裝好gromit之後,試著啟動她;預設會有下列功能:
左鍵: 紅筆 shift+左鍵: 藍筆 ctrl+左鍵: 黃筆 alt+左鍵: 粉紅色筆 中鍵: 使畫筆上色過的部份變成檸檬綠。 右鍵: 橡皮擦 shift+右鍵: 大橡皮擦不過,你一定跟我一樣,認為想要其他的功能該怎麼辦呢?這時請先複製一份設定檔到自己的家目錄來:
cp /etc/gromit/gromitrc ~/.gromitrc你可以複製我的.gromitrc來作修改,仔細推敲裡面的設定檔,您可以製作出更多的自訂功能!
# Configuration file for gromit #edited by Jim T. Tang in 2009/02/24 # 定義Tools。 #定義畫筆,預設紅筆 "drawpen" = PEN (size=7 color="red"); #定義藍筆 "drawpen_blue" = "drawpen" (color="blue"); #定義藍色箭頭 "drawpen_blue_arrow" = "drawpen_blue" (arrowsize=1); #定義黃筆 "drawpen_yel" = "drawpen" (color="yellow"); #定義黃色箭頭 "drawpen_yel_arrow" = "drawpen_yel" (arrowsize=1); #定義粉紅色筆 "drawpen_pink" = "drawpen" (color="#ff00aa"); #定義粉紅色箭頭 "drawpen_pink_arrow" = "drawpen_pink" (arrowsize=1); #定義綠色筆 "drawpen_green" = "drawpen" (color="green"); #定義綠色箭頭 "drawpen_green_arrow" = "drawpen_green" (arrowsize=1); #定義檸檬綠筆 "drawpen_limegreen" = "drawpen" (color="Limegreen"); #定義檸檬綠筆箭頭 "drawpen_limegreen_arrow" = "drawpen_limegreen" (arrowsize=1); #定義橡皮擦以及其大小 "eraser" = ERASER (size = 75); #定義標注畫筆痕跡的顏色(檸檬綠) "gruner Marker" = RECOLOR (color = "Limegreen"); # Mapping to Pointing devices(定義控制鍵) #定義不使用任何按鍵時,使用預設畫筆(紅色) "Core Pointer" = "drawpen"; #定義搭配shift鍵,為藍色畫筆。 "Core Pointer"[SHIFT] = "drawpen_blue"; #定義搭配ctrl鍵,為黃色畫筆。 "Core Pointer"[CONTROL] = "drawpen_yel"; #定義搭配alt鍵,為粉紅色畫筆。 "Core Pointer"[META] = "drawpen_pink"; #定義搭配shift+crtl鍵,為檸檬綠畫筆。 "Core Pointer"[SHIFT,CONTROL] = "drawpen_limegreen"; #定義搭配ctrl+alt鍵,為綠色畫筆。 "Core Pointer"[CONTROL,META] = "drawpen_green"; #定義搭配shift+alt鍵,為藍色箭頭。 "Core Pointer"[SHIFT,META] = "drawpen_blue_arrow"; #定義搭配shift+alt+ctrl鍵,為綠色箭頭。 "Core Pointer"[CONTROL,SHIFT,META] = "drawpen_limegreen_arrow"; #定義滑鼠中鍵,為標注顏色的檸檬綠畫筆。 "Core Pointer"[2] = "gruner Marker"; #定義滑鼠右鍵,為橡皮擦。 "Core Pointer"[3] = "eraser"; #定義shift+滑鼠右鍵為大橡皮擦。 "Core Pointer"[3 SHIFT] = "eraser" (size = 150);這時gromit會讀取這個設定檔,而略過/etc/gromit/gromitrc。再啟動一次gromit來試試看吧: 很不錯吧,至少我們可以有一個很棒的螢幕畫筆小工具了!本文的最後,來個小小地結論來評論gromit的優缺點: 優點:gromit的自訂非常高,搭配的方式也很容易理解,自訂性筆ZoomIt高太多了。 缺點:跟ZoomIt比起來,她無法輸入文字,也無法放大螢幕,算是令人覺得可惜的地方。但是真正致命的的地方,是當gromit畫筆越來越多時,xserver的負擔會成指數般的變大;筆者在畫兩張快取圖時,後面的文字滑鼠已經寫過很久了,結果五秒鐘後才在螢幕顯現。因此使用gromit只好盡量避免太多筆劃產生,特別是你的機器有開Compiz特效時。 更多的功能,老話一句,man一下gromit就知道! 你可以參考Simon的網站,他的readme寫得很詳細,裡面也有更多的自訂方法以及他所知的bug。










