文章來源:http://www.everet.org/2012/01/management-remote-host/ 轉載請保留鏈接,謝謝。
對於管理遠程主機,我想大家都一般使用ssh吧,在本地是Linux的環境下,那麼都是挺方便的,什麼都不需要弄就可以用
ssh -l username hostname
來登錄遠程主機。而在Windows上,雖然有專門的ssh客戶端,不過在cygwin裡面還是挺親切的。對於cygwin,我們可以設置在安裝的時候選上OpenSSH,這樣就可以方便地在Windows上使用ssh了,當然還有很多非常棒的工具可以選擇安裝,在國內選擇163的鏡像速度還是挺快的。
每次登陸都要密碼?免口令SSH登陸!
我們可以創建創建公鑰和密鑰來實現免口令登陸,公鑰放到服務器那裡,這樣在登陸的時候只要公鑰密鑰匹配正確就可以不需要輸入密碼了。
好,現在我們來創建公鑰和密鑰,我們使用ssh-keygen來生成。
[plain] view plaincopy
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/Cedric Porter/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa_test.
Your public key has been saved in id_rsa_test.pub.
The key fingerprint is:
60:7c:f3:42:58:57:42:1f:dc:65:e2:05:3d:49:54:02 Cedric Porter@CedricPorter-PC
The key's randomart image is:
+--[ RSA 2048]----+
| ..+oEo**B|
| . o . o.o.B.|
| = + . . .|
| . + o |
| S . |
| . |
| |
| |
| |
+-----------------+
然後我們就在我們的HOME目錄下的.ssh目錄下創建了公鑰密鑰對。
我們可以看到
Cedric Porter@CedricPorter-PC ~/.ssh $ ls id_rsa id_rsa.pub known_hosts
其中,id_rsa為我們的密鑰,id_rsa.pub為我們的公鑰,我們把公鑰寫到服務器那裡的.ssh目錄下的authorized_keys裡面
Cedric Porter@CedricPorter-PC ~/.ssh $ scp ~/.ssh/id_rsa.pub
[email protected]:~/.ssh/authorized_keys
然後以後我們的ssh和scp都不需要在輸入密碼了。
每次都要打ssh -l root everet.org,很煩,使用縮寫!
我們可以使用別名,例如,我們可以把alias et='ssh -l root everet.org' 寫入到HOME目錄下的.bashrc中,利用別名完成。也可以把登錄命令寫到一個在環境變量的路徑中的一個文件中,例如寫到/usr/bin下。
[plain] view plaincopy
$ echo "alias et='ssh -l root everet.org'" >> ~/.bashrc
$ # 或者用下面的命令
$ echo "ssh -l root everet.org" > /usr/bin/et
$ chmod +x /usr/bin/et
$
$ # 以後就可以使用et來登錄了
Cedric Porter@CedricPorter-PC ~
$ et
Linux localhost.localdomain 2.6.33.4-95.fc13.i686.PAE #1 SMP Thu May 13 05:38:26 UTC 2010 i686 GNU/Linux
Ubuntu 10.10
Welcome to Ubuntu!
* Documentation: https://help.ubuntu.com/
Last login: Fri Jan 20 10:55:50 2012 from 123.65.146.220
root@localhost:~#
斷線,丟失之前的工作!?用screen解決ssh的斷線重連問題
# screen -ls
可以查看現在有的screen,如果找不到命令可以使用apt-get install screen,更詳細的說明請見IBM網站的教程
http://www.ibm.com/developerworks/cn/linux/l-cn-screen/
一般我們登錄後,我們可以使用screen -S et 來新建一個screen,於是當我們斷線後,我們可以重新連接使用screen -r et 恢復之前的會話。這個很好,當我們需要斷開連接去睡覺時,可以讓工作繼續。所以必要時我們應該使用screen來管理我們的會話。
與服務器同步數據
對於同步數據,發現rsync還是相當不錯滴。rsync是由Andrew Trigdell和Paul Macherras編寫的,其思想與rdist類似,不過側重點不同。rsync有點兒像加強版的rcp,同步時可以保存權限等信息,還可以增量復制。
下面我們來討論下在Ubuntu下開啟rsync。
我們修改/etc/default/rsync,讓它可以在開機自啟動。我們將其中的RSYNC_ENABLE=false改為RSYNC_ENABLE=true即可。
設置rsync。配置文件在/etc/rsyncd.conf,如果不存著則創建一個,如創建一個配置文件,vi /etc/rsyncd.conf 。
輸入下面內容
[et_wordpress]
path = /var/www/et
secrets file = /etc/rsyncd.secrets
read only = false
uid = root
gid = root
打完收工!現在重啟開啟rsync的daemon,輸入/etc/init.d/rsync start 。OK!
現在讓我們來在同步數據。
把服務器的數據下載回來,我現在在Windows上,使用cygwin,例如,我把的我的wordpress的文件同步回來,可以使用下述命令:
rsync -vzrtopg --delete --progress everet.org::et_wordpress /cygdrive/h/Coding/everet/et
當我在本地修改了文件,我可以把我的文件push到服務器上面:
rsync -vzrtopg --delete --progress /cygdrive/h/Coding/everet/et/* everet.org::et_wordpress
每次都輸入那麼一長串命令很麻煩吧?我們可以參看上面的第二個標題的使用縮寫命令來完成。
echo "rsync -vzrtopg --delete --progress everet.org::et_wordpress /cygdrive/h/Coding/everet/et" > /usr/bin/rcet
echo "rsync -vzrtopg --delete --progress /cygdrive/h/Coding/everet/et/* everet.org::et_wordpress" > /usr/bin/rcet2
然後我們就可以使用rcet 來下載服務器的數據,用rcet2 來把本地的數據推送到服務器。
對於我在cygwin下,每次推送到服務器是文件的屬主會發生變化,所以我們在推送完後還需要修改屬主,這個在cygwin會出現,不知在純Linux下會不會,不過應該不會滴。如果出現文件屬主改變的問題我們可以在推送完後修改下文件屬主。
ssh -l root everet.org "chown www-data:www-data -R /var/www/et"
好,我們把它加到我們的推送數據的別名縮寫中。修改/usr/bin/rcet2 文件內容為:
rsync -vzrtopg --delete --progress /cygdrive/h/Coding/everet/et/* everet.org::et_wordpress
ssh -l root everet.org "chown www-data:www-data -R /var/www/et"
echo "Done."
我們就可以方便地推送數據了
摘自 某花