今天的 Tetralet 又在唧唧喳喳了



« 九月 2010 »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      






 

使用 RSA 來登入 SSH!

Tetralet | 18 元月, 2006 11:23

在 GNU/Linux 的世界裡,使用網路來遠端操縱主機是極為稀鬆平常的小技巧。我們不必親自跑到 GNU/Linux 前面才能操作主機,只要透過網路,就算是遠在天涯您還是可以輕易得操作 GNU/Linux 主機,就像是您是坐在主機前一樣。

而其中的代表便是 SSH (Secure Shell)。SSH 使用了 公/私鑰 系統來確保您透過網路來操作 GNU/Linux 時的安全性,像是您在鍵入密碼、開啟某份機密文件、修改主機設定... 時,沒有人有辨法能得知您的操作指令及所傳送的內容。您可以在 用 GPG 來保護您的郵件!(一) 裡大略得了解到 公/私鑰 的運作方式。

當我們第一次登入 SSH 伺服器時,您會收到類似的以下資訊:

$ ssh luna.com.tw
The authenticity of host 'luna.com.tw (60.248.131.86)' can't be established.
RSA key fingerprint is 5c:d2:5f:d5:c4:92:15:dc:2b:80:a1:1d:14:f3:7d:2f.
Are you sure you want to continue connecting (yes/no)?
千萬別急著按下『yes』。記得我們在 用 GPG 來保護您的郵件!(一) 裡的警告嗎?
雖然公共金鑰可以亂給,但千萬不 能亂拿。因為您接受了那份公共金鑰,就代表您完全信任這份金鑰的擁有者。所以我們不 會輕易接受經由網路或是電子郵件所得到的金鑰;我們喜歡當面交付公共金鑰,並會要求對方出示 身份証或護照以示証明。

所以聰明的我們才不會輕易得按下『yes』。那麼有什麼好方法能夠利用 公/私鑰 系 統來確認彼此的身份呢?

解決方案之一便是我們自行建立我們自已的 SSH 金鑰,然後將我們的 SSH 公共金鑰用 磁片當面交付給 SSH 主機的管理者,在 SSH 主機的管理者認可後,我們便能使用我們的私人密鑰來 和 SSH Server 直接連線。記得嗎?公/私鑰 的特性:

私人密鑰所加密的訊息,只有公共金鑰能解開。
而這樣將只有 SSH 主機的管理者認可的人才能使用 SSH 登入系統,而其它像是使用密碼來進行認証就可以廢棄不用了,免得一天到晚有人進來 SSH 主機踹密碼。

實作方法如下。首先,我們要先自行產生一對 SSH 金鑰:
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tetralet/.ssh/id_rsa):(金鑰存放位置)
Enter passphrase (empty for no passphrase):(鍵入私人密鑰密碼,千萬不可使用空密碼)
Enter same passphrase again:(再鍵入一次以進行確認
Your identification has been saved in /home/tetralet/.ssh/id_rsa.
Your public key has been saved in /home/tetralet/.ssh/id_rsa.pub.
The key fingerprint is:
fa:c4:df:a8:48:f1:b2:8c:2d:6e:e7:d1:a4:c2:20:9e tetralet@debian
這樣會在 ~/.ssh 裡產生一對 1024 位元的金鑰,其中 id_rsa.pub公共金鑰,而 id_rsa 則 是私人密鑰。請注意 id_rsa 的 權限是否為 600:
$ ls -l ~/.ssh
總計 12
-rw------- 1 tetralet tetralet 951 Jan 1 12:00 id_rsa
-rw-r--r-- 1 tetralet tetralet 236 Jan 1 12:00 id_rsa.pub
然後,將 id_rsa.pub 用磁片當面交付給 SSH 主機的管理者。

而 SSH 主機的管理者可以修改 SSH 主機的 /etc/ssh/sshd_config 如下:
# 設定 root 無法以 SSH 登入
PermitRootLogin no

# 設定只有 ming 這個帳號可以登入
AllowUsers ming

# 關閉帳號密碼認証
ChallengeResponseAuthentication no
並重新啟動 SSH。

然後,將拿到的公共金鑰加入登入使用者的 ~/.ssh/authorized_keys 中:
cat id_rsa.pub >> /home/ming/.ssh/authorized_keys
請注意到,並沒有限定公共金鑰的擁有者和登入帳號必須相同。您可以使用 -l 參數來以其它的帳號登入 SSH 主機。例:
ssh -l ming luna.com.tw
之後,該使用者的 SSH 登入方式就有所差異了:
# ssh -l ming luna.com.tw
Warning: Permanently added the RSA host key for IP address '60.248.131.86' to the list of known hosts.
Enter passphrase for key '/home/tetralet/.ssh/id_rsa':
(請在此鍵入
私人密鑰密碼
只要在 SSH 主機的 /home/ming/.ssh/authorized_keys 找到對應的公共金鑰的人都可以用 ming 來直接登入 SSH 主機。而沒有將公共金鑰放在 SSH 主機上的使用者將二話不說直接被踢出去:
# ssh -l ming luna.com.tw
Permission denied (publickey).
從此之後,唯有提供了公共金鑰並通過 SSH 主機的管理者所認可帳號才能登入這台 SSH 主機,而其它的人根本就無門可入。這樣子應該能有效得提昇 SSH 主機的安全性了。
迴響

好文~

在論壇看到很多次,都有點模糊...
你寫得清楚詳細多了。
有空來去試看看...

[回應] jimmy @ 07/02/2006, 13:08

Re: 使用 RSA 來登入 SSH!

好文,

想問一下,在MS-Windows下putty要怎如何設定..

[回應] redjoe @ 16/02/2006, 09:41

真不錯~

大大寫的文章都很實用
可以帶給很多Linux初學者不錯的觀念
雖然上課都有聽過了 不過來看大大 您的blog 就像是在複習一樣~ 很多也都是去上課聽不到的

大大 您可以考慮出書 或 是去補習班教書了吧>

[回應] DUCATI @ 24/03/2006, 13:45

authimage
驗證碼皆為英文大寫字母
僅輸入前4碼即可。後2碼是假的,欺敵用。
這是為了防制 Spam 而設計的。若造成您的不便還請見諒!
Accessible and Valid XHTML 1.0 Strict and CSS
Powered by LifeType - Design by BalearWeb