SSH遠程連接服務


一、SSH 原理圖

二、SSH 原理描述

  2.1:什么是SSH

    SSH是專門為了遠程登錄會話和其他網絡服務提供的安全性協議,使用SSH協議可以有效的防止遠程連接會話的時候出現信息泄密,在數據傳輸的時候SSH會先對聯機的數據包通過加密技術進行加密處理,加密后在進行數據的傳輸,確保了傳輸中的安全性,SSH服務主要提供兩個服務功能:一個是遠程聯機的SSH服務,一個是借助SSH協議來傳輸數據的SFTP服務

 

  2.2:SSH原理闡述

    ① 服務端開啟ssh服務監聽22端口

    ② 客戶端發送聯機請求(攜帶IP和端口)

    ③ 客戶端服務端進行聯機加密認證

    ④ 認證通過聯機成功

 

  2.3:SSH的兩種認證方式

    ① 基於密碼口令的認證

    ② 基於秘鑰的安全認證

 

  2.4:SSH認證類型闡述

    基於密碼口令的方式:

      基於密碼的安全認證就是我們一直在用的,只要知道服務器的SSH連接賬號和密碼(當然也要知道服務器的IP和端口(默認22)),就可以通過客戶端遠程登錄到主機了,所以的傳輸過程都是加密的

    基於秘鑰的安全認證:

      ① 運行SSH服務,生成密鑰對

      ② 客戶端發送公鑰到服務端(通過ssh-copy-id或者其他的方式)

      ③ 客戶端發送連接請求

      ④ 服務端進行對密鑰的驗證

      ⑤ 驗證成功服務端將用公鑰加密質詢,發送給客戶端

      ⑥ 客戶端用自己的私鑰解密質詢

      ⑦ 客戶端將解密后的質詢發送給服務端

      ⑧ 服務端驗證質詢

      ⑨ 驗證通過,建立連接

 

  2.5:SSH聯機加密過程原理闡述

    ① SSH服務端先生成一個1024-bit的公鑰

    ② 客戶端發送請求

    ③ 服務端把公鑰發給客戶端

    ④ 客戶端生成256-bit的私鑰,並且和服務端發過來的公鑰進行整合

    ⑤ 客戶端把整合的秘鑰對發給服務端

    ⑥ 使用秘鑰對進行聯機

  PS: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 擴展(非交互式功能)

  5.1:expect

  5.2:sshpass

  5.3:pssh

六、SSH 總結

  ① 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的東西,然后再登錄即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM