1. 程式人生 > >ssh安裝及配置詳解

ssh安裝及配置詳解

ssh(secure shell) --加密遠端登入管理伺服器,加密的資料傳輸
一、SSH為SecureShell的縮寫,由IETF的網路工作小組(NetworkWorkingGroup)所制定;SSH為建立在應用層傳輸層基礎上的安全協議。SSH是目前較可靠,專為遠端登入會話和其他網路服務提供安全性的協議。利用SSH協議可以有效防止遠端管理過程中的資訊洩露問題。SSH最初是UNIX系統上的一個程式,後來又迅速擴充套件到其他操作平臺。SSH在正確使用時可彌補網路中的漏洞。SSH客戶端適用於多種平臺。幾乎所有UNIX平臺—包括HP-UX、Linux、AIX、Solaris、DigitalUNIX、Irix,以及其他平臺,都可執行SSH。

telnet --通過字元介面遠端管理伺服器(明文)
ssh/openssh --加密的遠端管理,加密的資料傳輸(scp/winscp/sftp)

client(192.168.0.254)ssh<--->server(192.168.0.172)sshd(金鑰對(公鑰/私鑰))
1、可以使用ssh協議遠端加密管理伺服器
2、使用SSH協議進行資料傳輸(scp)
二、 從 

客戶端來看,SSH提供兩種級別的安全驗證。
第一種級別(基於口令的安全驗證)
只要你知道自己帳號和口令,就可以登入到遠端主機。所有傳輸的資料都會被加密,但是不能保證你正在連線的伺服器就是你想連線的伺服器。可能會有別的伺服器在冒充真正的伺服器,也就是受到“中間人”這種方式的攻擊。
第二種級別(基於密匙的安全驗證)
需要依靠 密匙,也就是你必須為自己建立一對密匙,並把公用密匙放在需要訪問的伺服器上。如果你要連線到SSH伺服器上,客戶端軟體就會向伺服器發出請求,請求用你的密匙進行安全驗證。伺服器收到請求之後,先在該伺服器上你的主目錄下尋找你的公用密匙,然後把它和你傳送過來的公用密匙進行比較。如果兩個
密匙
一致,伺服器就用公用密匙加密“質詢”(challenge)並把它傳送給客戶端軟體。客戶端軟體收到“質詢”之後就可以用你的私人密匙解密再把它傳送給伺服器用這種方式,你必須知道自己密匙的口令。
但是,與第一種級別相比,第二種級別不需要在網路上傳送口令。
第二種級別不僅加密所有傳送的資料,而且“中間人”這種攻擊方式也是不可能的(因為他沒有你的私人密匙)。但是整個登入的過程可能需要10秒


dsa
rsa --ssh預設的加密方式,非對稱的公鑰加密演算法,安全,資料傳輸速度慢
RSA是目前最有影響力的公鑰加密演算法,它能夠抵抗到目前為止已知的絕大多數密碼攻擊,已被ISO推薦為公鑰資料加密標準。

點選這裡 點選這裡 點選這裡 點選這裡 點選這裡
保密級別 對稱金鑰長度(bit) RSA金鑰長度(bit) ECC金鑰長度(bit) 保密年限
80 80 1024 160 2010
112 112 2048 224 2030
128 128 3072 256 2040
192 192 7680 384 2080
256 256 15360 512 2120

# rpm -qa |grep ssh --預設情況下,LINUX發行版都預安裝這個軟體
openssh-server-4.3p2-36.el5 --服務端 sshd
openssh-askpass-4.3p2-36.el5 --圖形的客戶端
openssh-4.3p2-36.el5 --公共軟體包
openssh-clients-4.3p2-36.el5 --字元的客戶端ssh scp sftp


ssh遠端登入的過程
1.sshd啟動的時候會產生一個公鑰,每個小時更新一次公鑰
2.當客戶端收到服務端公鑰會版本協商(sshv1,sshv2)使用sshv1登入時不能登入ssh2 ,使用sshv2時可以登入ssh1,ssh2
3.版本協商完後,服務端會發公鑰(/etc/ssh/ssh_host_ras.pub給客戶端,這一步是沒加密
4.客戶端返回確認資訊,把一個session_key通過公鑰加密發給服務端
ssh的加密方式遠端連線原理很簡單,就是使用者將自己的公鑰儲存在遠端主機上。登入的時候,遠端主機會向用戶傳送一段隨機字串,使用者用自己的私鑰加密後,再發回來。遠端主機用事先儲存的公鑰進行解密,如果成功,就證明使用者是可信的,直接允許登入shell,不再要求密碼。



ssh的配置檔案 :
# ls /etc/ssh/ssh*_config -l
-rw-r--r-- 1 root root 1827 2009-06-23 /etc/ssh/ssh_config 客戶端的配置檔案
-rw------- 1 root root 3323 2009-06-23 /etc/ssh/sshd_config 服務端的配置檔案

# cat /etc/ssh/sshd_config |grep -v '#'|grep -v ^$
Port 22 --監聽埠
Protocol 2 --使用版本2
ListenAddress 0.0.0.0 --監聽地址
LoginGraceTime 2m --登入超時時間
PermitRootLogin yes --允許root通過ssh登入
MaxAuthTries 6 --密碼嘗試6次
RSAAuthentication yes --支援ras加密
PubkeyAuthentication yes --是否支援金鑰對驗證
AuthorizedKeysFile .ssh/authorized_keys --服務端更新金鑰對金鑰對驗證時,客服端公鑰儲存檔案

PermitEmptyPasswords no --是否允許空密碼登入
PasswordAuthentication yes --是否支援賬號/密碼登入方式
UseDNS no --禁用DNS反解
Subsystem sftp /usr/libexec/openssh/sftp-server --支援sftp
AllowUsers root 只允許root 可以遠端
DenyUsers
AllowGroups

客戶端的命令:
# rpm -ql openssh-clients-4.3p2-36.el5|grep bin
/usr/bin/scp --支援遠端主機之間檔案拷貝
scp -P 2222 /root/test.txt [email protected]:/tmp/test.txt
scp -P 2222 -r /root/ [email protected]:/tmp/test.txt
scp [email protected]:/etc/hosts /var/tmp --從0.254主機上下載一個檔案
scp /etc/hosts [email protected]:/var/tmp --往0.254上傳一個檔案

/usr/bin/sftp --sftp的客戶端
# /usr/bin/sftp -oport=2222 [email protected]



/usr/bin/ssh
# ssh -p 2222 [email protected]

/usr/bin/ssh-copy-id --拷貝公鑰至遠端主機對應的目錄


ssh驗證:
1.基於賬號/密碼的驗證

服務端:私鑰
客服端:公鑰

2.基於金鑰對的驗證
服務端:公鑰
客服端:私鑰


client(192.168.0.254)<-->server(192.168.0.2)

a. 在客戶端生成金鑰對
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): --儲存私鑰的路徑
Enter passphrase (empty for no passphrase): --給私鑰加密(123456)
Enter same passphrase again: --確認密碼
Your identification has been saved in /root/.ssh/id_rsa. --私鑰
Your public key has been saved in /root/.ssh/id_rsa.pub. --公鑰
ccess control configuration prevents your request from being

u01-→ u01/.ssh/authorized_keys
b. 拷貝公鑰至伺服器,拷貝目標路徑:(你想用哪個使用者登入就拷貝哪個使用者的家目錄$HOME/.ssh/authorized_keys)
第一種方法(手工拷貝):
在伺服器上的操作:
#useradd kiki
# sudo -u kiki mkdir /home/kiki/.ssh
# sudo -u kiki chmod 700 /home/kiki/.ssh

在客戶端上上傳公鑰
# scp -P2222 /root/.ssh/id_rsa.pub [email protected]:~/.ssh/authorized_keys

第二種方法(使用工具自動完成):
# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected] --一條命令搞定

c. 測試金鑰對的登入:
# ssh [email protected]
Address 192.168.0.16 maps to test, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
Enter passphrase for key '/root/.ssh/id_rsa': --輸入私鑰的加密密碼(123456)
Last login: Fri Aug 19 15:47:02 2011 from 192.168.0.222
[[email protected] ~]$ --這樣就不需要輸入kiki使用者的密碼

d.在windows的客戶端使用金鑰對驗證:
1、生成金鑰對
2、上傳
3、轉換:
# ssh-keygen -i -f key_pub >> /root/.ssh/authorized_keys


sshd 訪問次數限制

編譯PAM的配置檔案(tty終端)
# vim /etc/pam.d/login



    #%PAM-1.0 
    auth      required  pam_tally2.so   deny=3  lock_time=300 even_deny_root root_unlock_time=10 

auth [user_unknown=ignore success=ok ignoreignore=ignore default=bad] pam_securetty.so一定要寫在第一行。或者是最前面

even_deny_root    也限制root使用者; 
 
deny           設定普通使用者和root使用者連續錯誤登陸的最大次數,超過最大次數,則鎖定該使用者 
 
unlock_time        設定普通使用者鎖定後,多少時間後解鎖,單位是秒; 
 
root_unlock_time      設定root使用者鎖定後,多少時間後解鎖,單位是秒;

如果想限制遠端登入,需要改SSHD檔案(遠端登入)
# vim /etc/pam.d/sshd

#%PAM-1.0 
• auth          required        pam_tally2.so        deny=3  unlock_time=300 even_deny_root root_unlock_time=10

ssh使用者登入失敗次數過多被鎖定,手動解鎖:
• 檢視使用者登入失敗的次數
• 1. [[email protected] pam.d]# pam_tally2 --user redhat 
2. Login           Failures Latest failure     From 
3. redhat              7    07/16/12 15:18:22  tty1 


確定用/lib64/security/pam_tally2.so模組
pam_tally2 --user kiosk ----檢視登入失敗次數
pam_tally2 -r -u kiosk ----登入次數為0即可登入

pam_tally -user kiosk -reset ----清空登入值
或:


faillog -u kiosk -r ----清空指定使用者kiosk登入次數