詳解ssh通過公鑰密碼、免密碼登錄以及導入公鑰文件三種形式實現遠程登錄
SSH(Secure Shell)是一種安全通道協議,主要用來實現字符界面的遠程登錄、遠程復制等功能,SSH協議對通信雙方的數據傳輸進行了加密處理,其中包括用戶登錄時輸入的用戶口令,與TELNET(遠程登錄,明文傳遞)等應用相比,SSH協議提供了更好的安全性
對稱加密算法
采用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密,也稱為單密鑰加密。加密和解密是一樣的,例如密碼123,都是明文,用戶密碼並不多,有可能其他數據密碼也用這個密碼,一旦截獲,直接可以使用。沒有安全性可言。
非對稱加密算法
非對稱加密算法(asymmetric cryptographic algorithm)又名“公開密鑰加密算法”,非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey),其特點加密速度慢、安全
用戶A利用工具使用密碼生成一個公鑰和私鑰,用戶B亦是如此;公鑰是一把鎖,私鑰是一把鑰匙。現在要加密一個文件,此時文件想給用戶B查看,要將B的公鑰下載下來,把文件加密,把文件再傳遞給用戶B,用戶B可以用自己私鑰和密碼打開,互相不需要知道對方的密碼就可以打開,保護密碼安全
實驗環境
- 系統環境:centos6.5
- SSH服務器端:192.168.1.77
- SSH客戶端: 192.168.1.20
搭建步驟:
一、準備工作
1、服務器端、客戶端關閉防火墻、Selinux
[root@redhat6 ~]# vim /etc/sysconfig/selinux
[root@redhat6 ~]# chkconfig iptables off #開機啟動關閉防火墻
二、ssh服務結合PAM認證提高服務器安全性
1、服務器端編輯ssh主配置文件
[root@redhat6 ~]# vim /etc/ssh/sshd_config
解析參數:
Port 22 //服務的默認端口
ListenAddress 0.0.0.0 //監聽的IP地址,其實是監聽的網卡,在哪一個網卡上面提供這麽一個遠程連接,也就是通過監聽哪個IP過來ssh的訪問,沒有寫IP,不允許ssh訪問
Protocol 2 //使用的是ssh協議的第二版本,2代表版本號
HostKey /etc/ssh/ssh_host_rsa_key //私鑰保存位置,有兩種模式rsa,dsa; 公鑰是從服務器傳遞給客戶端的ServerKeyBits 1024 //私鑰的位數
SyslogFacility AUTH //日誌記錄SSH登錄情況
LogLevel INFO //日誌等級
GSSAPIAuthentication yes //GSSAPI認證開啟,GSSAPI是要經過DNS服務器驗證,此時還沒有搭建服務器,開啟此參數就要等很長時間,DNS來解析主機名,搜索其他DNS服務器,一般情況下,關閉客戶端,服務器端未必掌控,改掉之後很快就會讓你輸入密碼
PermitRootLogin yes //允許root用戶登陸
PubkeyAuthentication yes //是否使用公鑰驗證
AuthorizedKeysFile .ssh/authorized_keys //公鑰保存位置,.ssh是該用戶家目錄下的.ssh
PasswordAuthentication yes //允許使用密碼驗證登陸
PermitEmptyPasswords no //不允許空密碼登陸
LoginGraceTime 2m //超時,等待兩分鐘如果不輸入密碼就會關掉
MaxAuthTries 6 //最大的認證次數,輸入用戶名、密碼錯誤,最多能輸出多少次
AllowUsers //僅允許某用戶能夠訪問(白名單)
DenyUsers //僅拒絕固定用戶登錄(黑名單)
[root@redhat6 ~]# /etc/init.d/sshd restart #重新啟動ssh服務
2、添加測試用戶
[root@redhat6 ~]# useradd zhangsan
[root@redhat6 ~]# passwd zhangsan
[root@redhat6 ~]# useradd lisi
[root@redhat6 ~]# passwd lisi
3、客戶端遠程登錄測試
[root@Init5 ~]# ssh [email protected]
[root@Init5 ~]# ssh [email protected]
[root@Init5 ~]# ssh [email protected]
[zhangsan@redhat6 ~]$ ifconfig
4、使用su命令切換root身份
[zhangsan@redhat6 ~]$ su - root
5、服務器端開啟PAM認證
[root@redhat6 ~]# gpasswd -a zhangsan wheel #將zhangsan用戶添加到wheel組中
[root@redhat6 ~]# id zhangsan
[root@redhat6 ~]# vim /etc/pam.d/su #開啟su命令支持的PAM模塊認證
6、修改服務器端配置文件並測試
[root@redhat6 ~]# vim /etc/ssh/sshd_config
[root@redhat6 ~]# /etc/init.d/sshd restart #重啟ssh服務
[root@Init5 ~]# ssh [email protected] #zhangsan用戶訪問服務器
[root@Init5 ~]# ssh [email protected] #lisi用戶訪問服務器
三、通過密鑰對認證登錄
1、服務器端編輯配置文件
[root@redhat6 ~]# vim /etc/ssh/sshd_config
[root@redhat6 ~]# /etc/init.d/sshd restart
2、客戶端zhangsan用戶生成秘鑰對、並上傳服務器端
[root@Init5 ~]# su - zhangsan #切換zhangsan用戶
[zhangsan@Init5 ~]$ ssh-keygen -t rsa #生成公、私鑰
ssh-keygen:生成、管理和轉換認證密鑰對,它支持RSA和DSA兩種認證密鑰
-t:指定要創建的密鑰類型
rsa:秘鑰的算法類型
[zhangsan@Init5 ~]$ cd .ssh/
[zhangsan@Init5 .ssh]$ ls
[zhangsan@Init5 .ssh]$ ssh-copy-id -i id_rsa.pub [email protected] #上傳公鑰至服務器端~/.ssh目錄下
ssh-copy-id:可以把本地主機的公鑰復制到遠程主機的authorized_keys文件上
-i:指定公鑰文件
3、服務器端查看上傳公鑰
[root@redhat6 ~]# cd /home/lisi/.ssh/
[root@redhat6 .ssh]# cat authorized_keys
四、測試客戶端訪問服務器端
1、使用公鑰密碼登錄
[root@Init5 ~]# su - zhangsan
[zhangsan@Init5 ~]$ ssh [email protected] #遠程登錄lisi用戶
[lisi@redhat6 ~]$ ifconfig
2、設置ssh代理功能實現免密登錄
[root@Init5 ~]# su - zhangsan
[zhangsan@Init5 ~]$ ssh-agent bash #密鑰管理器,運行ssh-agent以後,使用ssh-add將私鑰交給ssh-agent保管,其他程序需要身份驗證的時候可以將驗證申請交給ssh-agent來完成整個認證過程,不需要重新輸入密碼
[zhangsan@Init5 ~]$ ssh-add #將私鑰添加到ssh代理中
[zhangsan@Init5 ~]$ ssh [email protected] #連接服務器
3、將私鑰文件導入windows遠程連接工具登錄
[root@redhat6 .ssh]# vim /etc/ssh/sshd_config #修改主配置文件
[root@redhat6 .ssh]# /etc/init.d/sshd restart #重啟sshd
詳解ssh通過公鑰密碼、免密碼登錄以及導入公鑰文件三種形式實現遠程登錄