SSH服務實現

SSH遠程登錄

TSL 傳輸層安全協議 -->ssl傳輸層安全協議的實現方法和工具 -->ssh是利用到ssl部分功能的一種安全登錄服務
使用ssh代替telnet (telnet是明文傳輸 極不安全)
ssh 1,2 版本1有大量漏洞,已被破解,所以儘量使用版本2

#whereis sshd
Openssh
openssh 客戶端
open-askpass
openssh-clients
openssh-server 服務端

/etc/ssh
ssh_config 客戶端配置文件
sshd_config 服務端配置文件
2
ssh_host_dsa_key
ssh_host_dsa_key.pub
1
moduli
ssh_host_key
ssh_host_key.pub

ssh_host_rsa_key
ssh_host_rsa_key.pub

ssh可以提供端口轉發 可以將不安全的通信經過ssh轉發實現加密通信 (如:可以通過ssh轉發郵件)

ssh認證:
主機認證:用戶驗證主機的身份
用戶認證:主機驗證用戶的身份
    -->基於口令
    -->基於密鑰
    -->基於主機(不安全 基本沒人用)
主機認證方法:
    服務端使用自己私鑰加密一段數據 併發給客戶端 客戶端試圖從某個文件中找到一    段跟密文匹配的公鑰 如果能解密 則證明服務端身份 如果無法找到 或者無法解密
    一般情況下 遠程主機的公鑰 在客戶端主機的~/.ssh/known_hosts (已有的遠程主機公鑰)  ~/.ssh/unknown_hosts (遠程主機公鑰黑名單)
    如果都沒有找到 則在用戶界面顯示 服務端的RSA 提示用戶是否連接
    no -->斷開 下次連接仍然提示
    yes-->加入known_hosts 下次連接不再提示
客戶端認證:
拿到服務端公鑰之後 用戶隨機生成對稱密鑰 用服務端公鑰加密對稱密鑰 發送給服務端
之後的所有通信過程由此對稱密鑰加密 一般這種對稱密鑰會定期(比如每隔30min)自動更換

用戶生成一對密鑰對 將公鑰發送給服務器上的此用戶賬戶的家目錄下~/.ssh/authorized_keys2
一般 身份認證時 密鑰優先

ssh服務配置文件:/etc/ssh/sshd_config

Port 22 是否開放22端口
如果開放 會被掃描到 招來***
Protocol 啓用哪種協議? 放前面的優先 所以2 放前面
AddressFamily any     IPv4/v6 都啓用
ListenAddress x.x.x.x    監聽哪個或者那些地址0.0.0.0代表所有
#KeyRegenerationInterval 1h 會話密鑰多長時間更換一次
#ServerKeyBits 768
#PermitRootLogin yes    是否允許root登錄 默認允許
            建議啓用此項 改爲no 不允許 登錄時先用普通用戶登錄 然後
            再切換到root 進行管理
#LoginGraceTime 2m    寬限期 接受用戶提供賬戶密碼時 如果用戶無響應 2min自動斷開
#StrictModes yes    檢查用戶家目錄權限 如果用戶家目錄權限全局可寫才能登錄
#Strictkey checking modes    yes 問對方是否識別 no 不問對方一律通過?
#MaxAuthTries 6        最大嘗試次數

#PubkeyAuthentication yes 是否開啓基於密鑰的認證
#AuthorizedKeysFile     .ssh/authorized_keys 如果開啓密鑰認證 那麼遠程服務器的用戶公鑰存放位置
PasswordAuthentication yes    是否開啓基於口令的認證
ChallengeResponseAuthentication no
#PrintMotd yes    是否打印Motd
#Banner /etc/issue.net    對用戶的警告和提示信息 從此文件中讀取
Subsystem       sftp    /usr/libexec/openssh/sftp-server    子系統是否可使用sftp
# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV    使用系統syslog記錄日誌
#LogLevel INFO    日誌級別 QUIET FATAL ERROR INFO DEBUG DEBUG2 DEBUG3 (區別於syslog的日誌級別)

/var/log/secure        登錄日誌在此位置查看

AllowUsers    只有明確定義的才允許
AllowGroups
DenyUsers    黑名單
DenyGroups
如果Allow和Deny全都啓用 當雙方無衝突 則Deny將會被忽略
如果某個用戶在Allow和Deny中都有定義 則Deny他
#AllowTcpForwarding yes 是否允許使用TCP做轉發
#X11Forwarding no    是否允許使用X11圖形界面轉發

PortForwarding 端口轉發

-L    客戶端開放3025 連接服務端的sshd的3025 然後由客戶端將sshd連接映射到它的25端口
-R    客戶端啓動sshd開放3025 讓遠程服務器開啓隨機端口登錄自己的3025 自己將自己的3025當成郵件服務器的25 自己將郵件發給自己的3025 由3025---加密--->服務器的隨機端口 由服務器的隨機端口 轉發給服務器自己的25

L本地轉發(本地監聽3025) R遠程轉發(遠程監聽3025)
誰發起連接 誰監聽3025
本地轉發比較可靠

進程在:/usr/sbin/sshd
#service sshd start
#netstat -tnlp
#

CE
只允許192.168.0.0/24網段的sshd訪問
vim /etc/hosts.allow    裏面寫的是服務名?進程名?
    +>sshd: 192.168.0.
vim /etc/hosts.deny
    +>sshd: ALL
基於用戶的訪問控制:
在sshd_confing的用戶控制列表定義

將自己主機生成的公鑰文件追加到遠程主機的用戶家目錄
#cat "公鑰文件" |ssh username@host 'cat - >> /username/.ssh/authorized_keys'
#ssh-copy-id username@host

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