顯示具有 SSH 標籤的文章。 顯示所有文章
顯示具有 SSH 標籤的文章。 顯示所有文章

2011年11月3日 星期四

SSH遠端連線-用金鑰認證

     在本機架設ssh-server,開啟ssh遠端連線的服務,方便自己可以在遠端用ssh連線到本機來操控。通常在ssh連線到ssh-server時, server會問使用者要登入操作的「帳號和密碼」,這也就是常用的「帳密認證」方式,這樣的方式對於想要「自動登入到ssh-server作一些例行性操作」會造成一些困擾,在自動操作的過程中會停下來等待使用者輸入「帳密」。

     ssh-server 支援另一種認證方式-「金鑰」認證,使用者自行產生一對「公私鑰」,將私鑰內容複製到ssh-server上的認證檔裡,這樣我們便可以在有存放私鑰的主機上用ssh連線到遠端的ssh-server,而server會在連線時比對私鑰內容,符合正確便認證通過。

整個操作過程如下:











     首先我們在clien端要先安裝ssh的client端套件(openssh)。
     透過該透件提供的指令「ssh-keygen」來製造金鑰,預設是以rsa的方式產生金鑰,並指定金鑰存放的位置。上圖顯示,在本機使用者以「帳號:geego」產生rsa的金鑰,該金鑰存放在預設的位置(使用者帳號的家目錄底下)「/home/geego/.ssh/」。










從上圖我們可以看到在本機上,ssh-keygen指令已經幫我們產生一對公鑰(id_rsa.pub)和私鑰(id_rsa),並放在該使用者(geego)的家目錄底下「/home/geego/.ssh/」。

接下來,要將私鑰放到要登入的遠端Server上,在本機透過指令「ssh-copy-id」這個指令,如下圖:








     指令「ssh-copy-id」,會將使用者指定的「個人私鑰內容(id_rsa)」放到遠端的server上登入帳號(southwind)的認證檔(/home/southwind/.ssh/authorized_keys)。



接下來用ssh登入到server看看
      可以看到在本機帳號「geego」,用帳號「southwind」登入到遠端server。
      可以在遠端登入的帳號(southwind)的家目錄下看到認證檔「authorized_keys」,該檔紀錄了所私鑰內容,並詳註這一把私鑰是哪一個主機的哪一個帳號(geego)。


結論:
      
      ssh可以幫我們製造公私鑰,並用私鑰的比對來作連線的認證。透過ssh-copy-id指令將私鑰的內容放到遠端server的認證檔裡(authorized_keys)。ssh會比對自己server裡的認證檔和要求連線主機的私鑰這兩個內容,如果相符就可以允許連線。不相符便重回帳密認證的方式。


操作流程:


a.ssh-keygen,在本機產生金鑰(id_rsa, id_rsa.pub)。
b.ssh-copy-id,將本機的金鑰的私鑰(id_rsa)內容,複製到遠端server的認證檔(autorized_keys)裡




2011年10月29日 星期六

Linux SSH Server設定檔(sshd_config)的心得

學過Linux的玩家都知道Linux可以安裝SSH-Server的服務,而該服務的設定檔是在「/etc/ssh/sshd_config」,不過筆者一開始有點搞不清礎設定檔的設定邏輯。後來經過一連串的試驗,終於弄清礎,所以將心得放上來紀錄一下。(人老了,記憶力會不好^__^)


▼下圖是ssh-server設定檔的部份內容:
套件:openssh-server的設定檔「sshd_config」


1號框框:裡頭說明,該設定檔用「#(commented)」為開頭來描述預設值為何,而如果將開頭的註解符號「#」拿掉,使用者就可以自己指定設定值。

2號框框:按1號框框的說明,我們可以揣摩出2號框框的意義是「SSH-Server預設是port:22作連線的服務。所以如果今天使用者想要更改port的位置為2222。此時有兩種方式來作設定,如下圖:
sshd對外連線所用的連接埠,在設定檔sshd_config的設置方式的正確方式













又如果我們希望除了預設的port:22作連線服務之外,還想額外增加port:2222也可以作為連線服務,此時可以如下圖的方式來設定:

實務上在設置sshd對外通訊連接埠的常用方式










結論:
         SSH-Server本身有預設的設定內容,全都「描述」在設定檔「/etc/ssh/sshd_config」裡頭,以「#」號作開頭。在這個檔案裡頭,其實「#」號開頭的內容只是作說明而已,對SSH-Server的運作來說,有沒有「#」號開頭的內容其實沒差。讀者可以試著把該檔的內容全部清除成空白,重新啟用sshd;會發現SSH-Server還可以正常以「預設值」來運作。
         不過如果設定檔內有『無#號開頭』的設定值,則以此設定值運作。

         因此,為了同時能紀錄SSH-Server的預設值,而又能自己指定設定值,最好的方式就是『保留有#號開頭的設定內容,將自己指定的設定值置放於該行之下,並且開頭不可有「#」號,這樣SSH-Sever才會以自己指定的設定值運作。如下:

#Port 22
Port2222