securecrt免密碼登錄
一、前言
1. 環境
- 客戶端系統:win7
- securecrt版本:6.0.2
- 服務端系統:centos6.5
- 服務端ssh實現:openssh
2. 關於認證方式
我們知道ssh一般都會提供多種客戶端認證方式,其中最常用的是密碼和公鑰認證方式,本篇主要討論公鑰認證方式。有關客戶端認證的過程與原理,可以看另一篇文章:ssh的發展歷程與基本原理。
二、使用公鑰認證登陸的優點
1、公鑰認證允許使用空密碼,省去每次登錄都需要輸入密碼的麻煩
2、多用戶管理服務器時,可以通過多個公鑰登錄同一用戶下,可以避免因為密碼認證被用戶都需要密碼,導致的密碼容易泄密的危險。並且使用passwd修改密碼,也不會影響到其他用戶的登錄。
3、做空密碼的公鑰認證,為運維自動化提供了便捷方法。
三、生成公鑰和私鑰
以下是使用securecrt生成公鑰和私鑰的主要步驟,不用修改的界面就不放出來了,直接點下一步就是了。
選擇公鑰的類型為RSA:
因為我們不想輸入通行密碼,所以密碼直接留空,註釋框寫上自己想標註的內容就行了:
到了這一步,就是生成公鑰的時候了,註意框出來的內容,securecrt在生成公鑰的時候會根據鼠標的移動數據作為隨機的因素去生成,如果你到了這個界面切到別的地方去了,可能回來的時候發現進度條還沒動過。
key的格式選OpenSSH,完成。
生成有兩個文件,一個公鑰文件(Identity.pub)一個私鑰文件(Identity),需要把Identity.pub的內容追加到服務器的文件~/.ssh/authroized_keys中,如果.ssh目錄不存在,就創建一個:
mkdir ~/.ssh chmod 700 ~/.ssh touch ~/.ssh/authroized_keys chmod 600 ~/.ssh/authroized_keys
註意:.ssh 目錄的權限必須是0700,.ssh/authorized_keys 文件權限必須是0600,否則公鑰認證不會生效。
四、服務端設置
我們想達成的目的有:
- 讓客戶端免密登陸
- 禁止客戶端密碼登陸
- 修改默認端口,避免外部攻擊
1. 修改配置文件/etc/ssh/sshd_config
Port 1357 PermitRootLogin yes RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no
2. 重啟sshd服務
service sshd restart
3. 如果有開防火墻,還需要修改防火墻配置
打開防火墻配置文件/etc/sysconfig/iptables,找到原來22端口的配置:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
把22改成你想要改成的端口,這裏是1357,修改完保存配置並重啟防火墻。
service iptables restart
關於iptables的原理和基本用法,有興趣可以看看另外一篇:深入淺出iptables。
五、登陸服務器
建立連接,把公鑰選項提前,並去掉密碼登陸選項,然後點開公鑰的屬性選項。
選擇使用會話公鑰設置,然後選擇自己的私鑰文件,ok。
如果是第一次連接,會提示你去辨別是否接受這個新的host key,選接受並保存。
然後就可以直接登陸服務器了。
六、總結及註意
本文主要簡述從securecrt生成公鑰/密鑰到免密登陸服務器的過程,總體來說比較簡單。
不過有的細節不註意就可能導致失敗,譬如:
- 客戶端和服務端的ssh版本對不上
- 生成key的類型不對
- 服務端.ssh目錄或者授權文件的權限不對
- 服務器sshd配置修改錯誤或者修改完沒有重啟sshd服務
- 防火墻配置沒有修改,或者沒有重啟防火墻
七、參考
ssh 公鑰認證方式登錄
ssh配置公鑰私鑰登錄SecureCRT
securecrt免密碼登錄