CentOS6下ssh簡介及openssh的應用

1. ssh及openssl簡介:


SSH:

ssh是secure shell,是用來通過網絡來提供安全的遠程訪問的工具,C/S結構,在ssh之前,最早的遠程計算機連接工具是telnet

telnet是使用明文通信的,所以安全性很差,除非緊急情況,否則不要使用telnet。

ssh則比telnet安全許多,而openssl則是ssh的一種開源實現,


OPENSSH


它可以作爲 rlogin、 rsh rcp 以及 telnet 的直接替代品使用。 更進一步, 其他任何 TCP/IP 連接都可以通過 SSH 安全地進行隧道/轉發。 OpenSSH 對所有的傳輸進行加密, 從而有效地阻止了竊聽、 連接劫持, 以及其他網絡級的***。OpenSSH 由 OpenBSD project 維護。

登錄過程和使用 rlogin 或 telnet 建立的會話非常類似。 在連接時, SSH 會利用一個密鑰指紋系統來驗證服務器的真實性。 只有在第一次連接時, 用戶會被要求輸入 yes。 之後的連接將會驗證預先保存下來的密鑰指紋。 如果保存的指紋與登錄時接收到的不符, 則將會給出警告。 指紋保存在 ~/.ssh/known_hosts 中, 對於 SSH v2 指紋, 則是 ~/.ssh/known_hosts2。


默認情況下, 較新版本的 OpenSSH 只接受 SSH v2 連接。 如果能用版本 2 則客戶程序會自動使用, 否則它會返回使用版本 1 的模式。 此外, 也可以通過命令行參數 -1 或 -2 來相應地強制使用版本 1 或 2。 保持客戶端的版本 1 能力是爲了考慮較早版本的兼容性。



SSH有兩個版本:

1. sshv1  

sshv1 基於CRC-32做MAC(完整性校驗),無加密,只是校驗碼,強烈建議不使用。非常不安全


2. sshv2


sshv2 基於雙方主機的協商選擇使用最安全的MAC方式

加密機制及MAC機制由雙方協商選定:

基於DH算法,實現密鑰交換,基於RSA或DSA實現身份認證

客戶端通過檢查服務器端的主機密鑰來判斷是否能夠繼續通信


實際使用中,可以通過命令行參數Protocol 2,1 來相應地強制使用版本 1 或 2。 

保持客戶端的版本 1 能力是爲了考慮較早版本的兼容性。

也可以只寫2,而放棄兼容不安全的sshv1



2. OPENSSH客戶端:


openssh是C/S架構,所以就有服務端和客戶端兩部分組成,linux下常用的客戶端軟件ssh, windows下常用的有putty,xshell,secrecrt,sshshellclient等


2.1 openssh的客戶端組件:


2.1.1 ssh 配置文件是/etc/ssh/ssh_config


語法:

ssh [username]@host [COMMAND]  [-p PORT]
ssh -l username host [COMMAND]


#若沒指定username,則使用本地當前用戶嘗試登陸,如果遠程主機不存在此用戶,會報錯

#COMMAND,就是不遠程登陸,只是在遠程主機上執行COMMAND,然後將結果返回給本機。


例如:

需要獲取192.168.229.202主機的ifconfig信息,ssh端口監聽在2222端口上:

#ssh [email protected] ifconfig -p 7767



2.1.2 scp: 利用ssh協議在主機之間實現安全文件傳輸的工具


語法:

scp SRC1...DEST


分兩種情況:

1. 原文件在本機,目標爲遠程

#scp /path/to/somefile ...USERNAME@HOST:/path/to/somewhere

是將本地/path/to/somefile文件,以USERNAME用戶登陸到遠程主機HOST上,複製到遠程主機的/path/to/somewhere


例如: 

將本地/etc/fstab文件複製到www.881027.com主機上/tmp下, 注意www.881027.com主機的ssh端口是2222

#scp -P 2222 /etc/fstab [email protected]:/tmp
#注意, 參數-P的位置一定要緊跟在scp命令後面,而且-P指定的是遠程主機的ssh端口
#注意, 如果當前本機登陸的用戶是root,則[email protected]中的root@可以省略


2. 源文件在遠程,本地爲目標

#scp USERNAME@HOST:/path/to/somewhere /path/to/somewhere
-r: 複製目錄時使用
-p: 保持源文件的元數據信息,包括屬主,屬組,mode,timestamp (如果遠程主機不存在這個用戶,也不行)
-q: 靜默模式
-P PORT: 指定ssh協議監聽的端口
例如:
將遠程主機/tmp/fstab文件下載到本機/etc下
#scp -P 2222 [email protected] /etc

2.1.3 sftp: 基於ssh的ftp服務

sftp登陸進去,可以使用很多bash的命令,例如ls,cd, mkdir, put, get等ftp命令


用法: sftp USERNAME@HOST

例如:

sftp登陸到www.881027.com,ssh端口2222,並下載www.881027.com主機上/etc/fstab文件到本地

#sftp -oPort=2222 sbi.881027.com
#-oPort 來指定遠程的端口,不指定默認22


3. openssh的服務器端: sshd


配置文件: /etc/ssh/sshd_config

ssh端口,控制sshd服務的各種運行參數等,下面最佳實踐裏有很多應用

這個命令可以通過

#man sshd_config

來查看每一個參數的詳細說明和使用幫助


服務腳本: /etc/rc.d/init.d/sshd

控制sshd服務狀態,啓動,停止,重啓,查看狀態等

腳本配置文件: /etc/sysconfig/sshd



3.1 經常需要修改的參數:

PORT:修改默認監聽的端口
ListenAddress 0.0.0.0 ;默認表示監聽本地所有地址,也可以設定只監聽特定ip地址
Protocol 2,1 ;優先選擇2,向下兼容sshv1
HostKey /etc/ssh/ssh_host_rsa_key;當客戶端連接時候,發送的密鑰
HostKey /etc/ssh/ssh_host_dsa_key;當客戶端連接時候,發送的密鑰, DSA只能做身份驗證
KeyRegenerationInterval 1h;密鑰交換間隔,服務器自動進行的
LoginGraceTime 2m;登陸窗口寬限期, 就是彈出登陸窗口後,給你輸入賬號密碼的時間
PermitRootLogin yes 
    yes:允許root用戶首次直接ssh登錄
    no: 不允許root用戶首次直接ssh登陸,但是根據需要,可以從普通用戶su - root
MaxAuthTries 6;最多登陸失敗次數
MaxSessions 10;最多可支持的session數
RSAAuthentication yes ;是否啓用RSA驗證
PubkeyAuthentication yes ;是否啓用公鑰驗證(非對稱加密)
AuthorizedKeysFile .ssh/authorized_keys ;授權的密鑰文件, 我們可以通過追加公鑰信息到這個authorized_keys,來免密碼登陸
ClientAliveInterval 0 ;服務器端向客戶端請求消息的時間間隔,0 爲不發送
ClientAliveCountMax 300 ;服務器發出請求後客戶端沒有響應的次數達到一定值
等等

我只列舉一些常用的選項,還有很多選項沒有一一列舉,可以#man sshd_config去翻文檔吧。



4. sshd認證方式:

1. 基於口令的認證:

沒啥好說的, 用戶名,密碼認證


2. 基於密鑰(公鑰中的密鑰)的認證:

邏輯:

a. 需要一對兒密鑰,本地保留private key,

b. 將public key放到遠程主機上的用戶家目錄: ~/.ssh/

c. 將本地public key追加到 遠程主機家目錄 ~/.ssh/authorized_users


步驟:

        #ssh-keygen -t rsa  生成密鑰對
        默認密鑰爲id_rsa, id_rsa.pub
        -f path/to/somefile: 密鑰文件保存位置
        -p '' 指定oldpasswd



也可以使用工具直接生成密鑰對兒,直接上傳到遠程主機:

        #ssh-copy-id -i ~/.ssh/id_rsa.pub USERNAME@HOST
        ssh-copy-id -i id_rsa.pub "-p 7767 [email protected]"
        ssh -p 222 hostname


5. ssh服務的最佳實踐:


1. 不要使用默認端口22

2. 不要使用protocol 1

3. 限制可登陸的用戶

白名單:

AllowUsers user1 user2 user3...

AllowGroups grp1 grp2 ....

黑名單:

DenyUsers user1 user2 

DenyGroups grp1 grp2


#黑白名單不能同時使用,只能使用一種


4. 設定空閒會話超時時長

ClientAliveInterval 300  #秒數

ClientAliveCountMAX 0#空閒計數最大值爲0


5. 利用防火牆設置ssh訪問策略:


6. 僅監聽在特定的IP地址上,而非本機所有的IP地址


7. 使用強密碼策略

#tr -dc A-Za-z0-9 < /dev/urandom | head -c 20 | xargs


8. 使用基於密鑰的認證


9, 禁止使用空密碼


10. 禁止管理員直接登錄


11. 顯示ssh的訪問頻度

iptables可以做到


12. 做好日誌,經常分析


把服務器按照最佳實踐來優化一番,在去對比下 lastb的ssh***,就會看到明顯的效果。等以後學到iptables,在做更進一步的優化吧。


另外,提一個小軟件dropbear,是嵌入式輕量級的shh客戶端工具,可以編譯安裝試試。比openssh小很多,但是功能卻很完整的ssh開源工具。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章