telnet:遠程登錄,23/tcp應用層協議
C/S
S:telnet服務器
C:telnet客戶端
ssh:Secure SHell 也是遠程登錄協議,也是應用層協議:22/tcp
ssh整個通訊過程和認證過程都是加密的,還能實現主機認證
用戶認證過程加密
數據傳輸過程加密
另外一種不用傳遞密碼的驗證方式,只需要通過用戶名+隨機數就可以登錄認證:
客戶端和服務器端都維護一個對稱秘鑰,客戶端生成一對公鑰和私鑰,然后把公鑰先給服務器,以后客戶端要登錄的時候,直接生成一個隨機數據+用戶名,用對稱秘鑰加密,然后用私鑰再加密,發送給服務器,服務器用對稱秘鑰揭秘,再用公鑰解密,如果能得到數據,就說明客戶端是合法的客戶端。
主機認證過程:
基于口令認證(用戶名和密碼)
基于秘鑰認證(即上面說的那種:用戶名+隨機數)
協議:規范
實現:服務器端,客戶端
Linux:openSSH
C/S架構
服務器端:sshd,配置文件在/ect/ssh/sshd_config
客戶端:ssh,配置文件在/ect/ssh/ssh_config
ssh-keygen:秘鑰生成器(為某個用戶生成一對秘鑰)
ssh-copy-id:將公鑰傳輸至遠程服務器
scp:跨主機安全復制工具
ssh:指定那一個主機用戶來登錄
ssh username@HOST
ssh -l username HOST
ssh username 'command' 以某個用戶在遠程服務器上執行某任務
scp:
scp SRC DEST (源可以本地也可以是服務器)
-r
-a
scp username@HOST:/path/to/somefile /path/to/local 遠程到本地
scp /path/to/local username@HOST:/path/to/somefile 本地到遠程
ssh-keygen: 幫我們在客戶端生成一對秘鑰
-t rss
~/.ssh/id_rsa
~/.ssh/id_rsa.pub
公鑰追加保存到遠程主機某用戶的家目錄下的.ssh/authorized_keys文件或.ssh/authorized_keys2文件當中
ssh v1(無法避免中間人攻擊),v2
主機秘鑰
非對稱加密
Secret key--服務器
Public key--客戶端
客戶端我們去哪里拿到他的公鑰?如果本地沒有,通訊時接收對方公鑰
客戶端拿到公鑰之后,生成對稱密碼,把這個密碼發送給服務器(秘鑰交換)
接下來數據用對稱密碼加密(因為對稱加密比非對稱加密快:十的三次方數量級)
為了安全性:
1.用普通用戶登錄,之后再切換root用戶
2.定期更新密碼