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