一、SSH 原理圖?
二、SSH原理描述
? ? ? ? 1、什么是SSH
? ? ? ? ? ? ?SSH是專門為了遠程登錄會話和其他網絡服務提供的安全性協議,使用SSH協議可以有效的防止遠程連接會話的時候出現信息泄密,在數據傳輸的時候SSH會先對聯機的數據包通過加密技術進行加密處理,加密后在進行數據的傳輸,確保了傳輸中的安全性,SSH服務主要提供兩個服務功能:一個是遠程聯機的SSH服務,一個是借助SSH協議來傳輸數據的SFTP服務
? ? ? ? 2、SSH原理闡述
? ? ? ? ? ? ??① 服務端開啟ssh服務監聽22端口
② 客戶端發送聯機請求(攜帶IP和端口)
③ 客戶端服務端進行聯機加密認證
④ 認證通過聯機成功
? ? ? ? 3、SSH的兩種認證方式
? ? ? ? ? ? ??① 基于密碼口令的認證
② 基于秘鑰的安全認證
? ? ? ? 4、SSH認證類型闡述
? ? ? ? ? ? ??基于密碼口令的方式:
基于密碼的安全認證就是我們一直在用的,只要知道服務器的SSH連接賬號和密碼(當然也要知道服務器的IP和端口(默認22)),就可以通過客戶端遠程登錄到主機了,所以的傳輸過程都是加密的
基于秘鑰的安全認證:
① 運行SSH服務,生成密鑰對
② 客戶端發送公鑰到服務端(通過ssh-copy-id或者其他的方式)
③ 客戶端發送連接請求
? ? ? ? ? ? ? ? ? ? ? ④ 服務端進行對密鑰的驗證
⑤ 驗證成功服務端將用公鑰加密質詢,發送給客戶端
⑥ 客戶端用自己的私鑰解密質詢
⑦ 客戶端將解密后的質詢發送給服務端
⑧ 服務端驗證質詢
⑨ 驗證通過,建立連接
? ? ? ? 5、SSH聯機加密過程原理闡述
補充:SSH2版本中為了修補SSH1中不驗證整合秘鑰對的漏洞,加入了一個確認聯機正確性的Diffie-Hellman機制(每次聯機都會進行秘鑰對的校驗)
三、SSH搭建部署
安裝ssh服務
yum -y?install?openssh openssl
啟動服務
systemctl start sshd
配置文件
tree?/etc/ssh/
/etc/ssh/
├── moduli
├── ssh_config?? 客戶端配置文件
├── sshd_config 服務端配置文件
├── ssh_host_ecdsa_key
├── ssh_host_ecdsa_key.pub
├── ssh_host_ed25519_key
├── ssh_host_ed25519_key.pub
├── ssh_host_rsa_key
└── ssh_host_rsa_key.pub
使用
基于密碼的連接
ssh?root@192.168.163.129
也可以之家連接執行命令
ssh?root@192.168.163.130?ifconfig?ens33
四、SSH企業級優化
在SSH 配置文件中有很多項是可以做優化的vim?/etc/sshd_config?
Port????#默認22端口,修改其他端口
ListenAddress?????# 指定特定的監聽地址PermitEmptyPasswords????# 是否允許密碼為空的用戶遠程登錄,默認為no
PermitRootLogin????# 是否允許root登錄,默認yes,改為no安全些
UseDNS????# dns解析,默認yes 要改為no 提高速度GSSAPIAuthentication????# 解決linux之間使用遠程連接慢的問題??
快速更改優化方法使用sed命令\cp?/etc/ssh/sshd_config{,.bak}
sed?-i?'s%#Port 22%Port 56666%'?/etc/ssh/sshd_config
sed?-i?'s%#PermitEmptyPasswords no%PermitEmptyPasswords no%'?/etc/ssh/sshd_config?
sed?-i?'s%#PermitRootLogin yes%PermitRootLogin no%'?/etc/ssh/sshd_config?
sed?-i?'s%#UseDNS yes%UseDNS no%'?/etc/ssh/sshd_config?
sed?-i?'s%GSSAPIAuthentication yes%GSSAPIAuthentication no%'?/etc/ssh/sshd_config?a=$(ifconfig??|?awk?-F [" ":]+?'NR==2{print $3}') |?
sed?-i?'s%#ListenAddress 0.0.0.0%ListenAddress '$a' %'?/etc/ssh/sshd_config?egrep?"UseDNS|GSSAPIAuthentication|PermitRootLogin|PermitEmptyPasswords|ListenAddress|Port"?/etc/ssh/sshd_config?
?一條命令搞定a=$(ifconfig?|?awk?-F [" ":]+?'NR==2{print $3}') |?sed?-ir?'13 iPort 56666\nPermitRootLogin no\nPermitEmptyPasswords no\nUseDNS no\nGSSAPIAuthentication no\nListenAddress '$a''?/etc/ssh/sshd_config??
重啟服務systemctl restart sshd
五、SSH擴展(非交互式功能)
? ? ? ? ? 1、expect
? ? ? ? ? 2、sshpass
? ? ? ? ? 3、pssh
六、SHH總結
? ? ? ? ?① SSH是安全加密協議,用于遠程連接linux服務器
? ② SSH默認端口是22,安全協議版本是SSH2,除了SSH2還有SSH1,但是1有漏洞
? ③ SSH服務端只要包含兩個服務,一個是SSH一個是SFTP
? ④ Linux SSH 客戶端包含ssh遠程連接命令,以及遠程scp命令等
? ⑤ SSH配置文件的優化很重要,可以提高服務器的安全性,也可以提高遠程連接的速度
七、SSH錯誤及解決辦法
首先、確保server端的ssh服務是開的(service shhd start)
然后在client端輸入:?ssh?usrname@serverip (遠程登錄)
scp?filename usrname@serverip:/URL?(遠程傳輸)
常出現的問題:
問題一
ssh登錄的時候鏈接端口失敗
提示(1):
# ssh 192.168.***.**
ssh: connect to host 192.168.***.** port 22: No route to host
這由于server端沒有開機或是網絡不通(這個原因很多,最簡單的是網線沒有插。還有就是可能會是網卡down了等)如果是網卡down了ifup相應的網卡再試試
提示(2):
# ssh zhou@192.168.***.**
ssh: connect to host 192.168.***.** port 22: Connection refused
這是由于對方server的ssh服務沒有開。這個server端開啟服務即可。
如何開啟ssh服務呢?
首先確保要登錄的主機安裝了openssh-client(ubuntu有默認安裝,如果沒有則sudo?apt-get?install?openssh-client),如果要使本機開放SSH服務就需要安裝 openssh-server?sudo?apt-get?install?openssh-server
?然后確認sshserver是否啟動了:
???ps?-e |grep?ssh
如果看到sshd那說明ssh-server已經啟動了。
如果沒有則可以這樣啟動:sudo?/etc/init.d/ssh?start
ssh-server配置文件位于/ etc/ssh/sshd_config,在這里可以定義SSH的服務端口,默認端口是22,你可以自己定義成其他端口號,如222。
然后重啟SSH服務:
sudo?/etc/init.d/ssh?stop
sudo?/etc/init.d/ssh?start
然后使用以下方式登陸SSH:
ssh?zhou@192.168.***.** zhou為192.168.***.**機器上的用戶,需要輸入密碼。
斷開連接:exit
問題二、
ssh到server上的時候密碼是對的但是報如下信息:
# ssh 192.168.***.**
root@192.168.***.**'s password:
Permission denied, please try again.
這個是由于如果不輸入用戶名的時候默認的是root用戶,但是安全期間ssh服務默認沒有開root用戶的ssh權限
解決方法:
要修改root的ssh權限,即修改?/etc/ssh/sshd_config文件中
PermitRootLogin no 改為 PermitRootLogin?yes
問題三
登錄是出現如下提示:
ssh?root@192.168.***.**
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint?for?the RSA key sent by the remote host is
76:fb:b3:70:14:48:19:d6:29:f9:ba:42:46:be:fb:77.
Please contact your system administrator.
Add correct host key?in?/home/fante/.ssh/known_hosts?to get rid of this
message.
Offending key?in?/home/fante/.ssh/known_hosts:68
RSA host key?for?192.168.***.** has changed and you have requested strict checking.
Host key verification failed.
server端密碼或是其他發生改變的時候。
解決方法一般就需要刪除~/.ssh/known_hosts的東西,然后再登錄即可。