| 站 內 搜 尋 |
|
日 曆 |
|||||||||||||||||||||||||||||||||||||||||||||||||
| 近 期 文 章 |
| 文 章 分 類 |
使用 RSA 來登入 SSH!
在 GNU/Linux 的世界裡,使用網路來遠端操縱主機是極為稀鬆平常的小技巧。我們不必親自跑到 GNU/Linux 前面才能操作主機,只要透過網路,就算是遠在天涯您還是可以輕易得操作 GNU/Linux 主機,就像是您是坐在主機前一樣。
而其中的代表便是 SSH (Secure Shell)。SSH 使用了 公/私鑰
系統來確保您透過網路來操作 GNU/Linux 時的安全性,像是您在鍵入密碼、開啟某份機密文件、修改主機設定...
時,沒有人有辨法能得知您的操作指令及所傳送的內容。您可以在 用
GPG 來保護您的郵件!(一) 裡大略得了解到 公/私鑰 的運作方式。
當我們第一次登入 SSH 伺服器時,您會收到類似的以下資訊:
千萬別急著按下『yes』。記得我們在 用 GPG 來保護您的郵件!(一) 裡的警告嗎?
$ 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』。那麼有什麼好方法能夠利用 公/私鑰 系 統來確認彼此的身份呢?
解決方案之一便是我們自行建立我們自已的 SSH 金鑰,然後將我們的 SSH 公共金鑰用 磁片當面交付給 SSH 主機的管理者,在 SSH 主機的管理者認可後,我們便能使用我們的私人密鑰來 和 SSH Server 直接連線。記得嗎?公/私鑰 的特性:
而這樣將只有 SSH 主機的管理者認可的人才能使用 SSH 登入系統,而其它像是使用密碼來進行認証就可以廢棄不用了,免得一天到晚有人進來 SSH 主機踹密碼。
被私人密鑰所加密的訊息,只有公共金鑰能解開。
這樣會在 ~/.ssh 裡產生一對 1024 位元的金鑰,其中 id_rsa.pub 是公共金鑰,而 id_rsa 則 是私人密鑰。請注意 id_rsa 的 權限是否為 600:
$ 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
然後,將 id_rsa.pub 用磁片當面交付給 SSH 主機的管理者。
$ 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
並重新啟動 SSH。
# 設定 root 無法以 SSH 登入
PermitRootLogin no
# 設定只有 ming 這個帳號可以登入
AllowUsers ming
# 關閉帳號密碼認証
ChallengeResponseAuthentication no
請注意到,並沒有限定公共金鑰的擁有者和登入帳號必須相同。您可以使用 -l 參數來以其它的帳號登入 SSH 主機。例:
cat id_rsa.pub >> /home/ming/.ssh/authorized_keys
之後,該使用者的 SSH 登入方式就有所差異了:
ssh -l ming luna.com.tw
只要在 SSH 主機的 /home/ming/.ssh/authorized_keys 找到對應的公共金鑰的人都可以用 ming 來直接登入 SSH 主機。而沒有將公共金鑰放在 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 主機的管理者所認可帳號才能登入這台 SSH 主機,而其它的人根本就無門可入。這樣子應該能有效得提昇 SSH 主機的安全性了。
# ssh -l ming luna.com.tw
Permission denied (publickey).
好文~
在論壇看到很多次,都有點模糊...
你寫得清楚詳細多了。
有空來去試看看...
[回應] 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