1. 程式人生 > >詳解ssh通過公鑰密碼、免密碼登錄以及導入公鑰文件三種形式實現遠程登錄

詳解ssh通過公鑰密碼、免密碼登錄以及導入公鑰文件三種形式實現遠程登錄

eve 模式 tables col symmetric trie ado grace 日誌

簡介

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通過公鑰密碼、免密碼登錄以及導入公鑰文件三種形式實現遠程登錄