8 在Linux 7中配置和保護OpenSSH服務

Linux OpenSSH 軟件 PuTTY 學習之旅 學習之旅 2017-10-28

8 在Linux 7中配置和保護OpenSSH服務

Linux 7 Basic NO.8

大家好!本節將講解在Linux 7中如何使用OpenSSH配置遠程系統上的安全命令行訪問。

如有不足,請指出並指正。 ^-^


什麼是OpenSSH Secure Shell (SSH) ?

  • OpenSSH這一術語指系統中使用的Secure Shell軟件的軟件實施。

  • OpenSSH Secure Shell (ssh)用於在遠程系統上安全運行shell。如果您在可提供SSH服務的遠程Linux系統中擁有用戶賬戶,則ssh是通常用來遠程登錄到該系統的命令。ssh命令也可用於在遠程系統中運行各種命令。


SSH的全稱Secure Shell,是Client/Server模式,默認端口號為22,相比Telnet,更加安全,因為Telnet是明文傳輸的

SSH其實用於商業,而OpenSSH即為開源的,在Linux中大都存在

SSH客戶端語法:

ssh [username@hostname] [-p 端口號] 端口號默認為22,實際使用中為了安全,可以將其更改為其它端口號,如2222

eg:

ssh -X [email protected]


當客戶端連接服務器時,服務器需要驗證客戶端的身份,有兩種驗證方式。

1、基於用戶名和密碼身份驗證

實驗環境,兩臺機器如下,

  • classroom.example.com 充當ssh server

  • desktop0.example.com 充當ssh client

當我們執行如下命令時,可以看到客戶端需要與服務器建立連接,此時需要輸入yes,客戶端將會接受到服務器發送過來的一個密鑰,該密鑰可用於之後驗證客戶端與服務器之間的連接,如果輸入no,將斷開連接

注意:使用“基於用戶名和密碼身份驗證”這種方式驗證連接,第一次連接時,因為無法確定所連接的classroom這臺服務器就是我們需要的,可能是同名的第三方的機器,所以,第一次需要輸入yes,服務器發送密鑰給客戶端,以便在之後的連接中,可以使用該密鑰進行驗證。

輸入yes後,回車。再次連接時,發現此時不需要再進行密鑰的發送和接受,只需要驗證密鑰,輸入密碼即可

[root@desktop0 ~]# ssh -X [email protected]

8 在Linux 7中配置和保護OpenSSH服務

客戶端接收了來自服務端的公鑰並保存在本地,在服務端則還有相對應的私鑰,這密鑰是成對出現的,如果服務端的私鑰被修改了,那麼,客戶端在連接時,將會失敗。

基於用戶名和密碼身份驗證原理:

  1. 客戶端向服務器發送一個連接的請求

  2. 第一次連接服務器,服務器向客戶端發送一個公鑰,客戶端選擇接收,該密鑰被保存在用戶的家目錄下的隱藏文件~/.ssh/known_hosts

  3. 客戶端使用服務器傳送過來的公鑰對用戶密碼進行加密,併發送給服務器

  4. 服務器接收到客戶端發送過來的密碼,服務器使用自己的私鑰解密,驗證密碼合法性,於/etc/shadow進行驗證

接下來,我們進行一個測試,將服務端的私鑰刪除,客戶端連接會出現什麼情況?

如下圖,可以看到,客戶端已經無法連接到服務端,直接報錯,我們把客戶端的公鑰也情況,還是一樣無法連接,此時,只需要將服務端ssh的服務重新啟動一下,這時服務端將會自動生成一對密鑰(公鑰和私鑰)

8 在Linux 7中配置和保護OpenSSH服務

這裡可以看到服務端的公鑰和私鑰,並且還存在兩對密鑰,主要是其加密方式不一樣

8 在Linux 7中配置和保護OpenSSH服務

8 在Linux 7中配置和保護OpenSSH服務

此時,因為客戶端無法去驗證公鑰,所以,無法進行連接,即使刪除客戶端的公鑰,也是一樣,因為服務端已經不存在密鑰,只能重新啟動服務端的ssh服務,使其重新生成一對密鑰

8 在Linux 7中配置和保護OpenSSH服務

8 在Linux 7中配置和保護OpenSSH服務

此時,再進行連接時,相當於第一次連接,需要進行公鑰的傳送接受。

2、基於密鑰的身份驗證

在上面的實驗中,我們發現這種“基於用戶名和密碼身份驗證”的驗證方式不是很方便,因為為交互式的,需要我們進行確認輸入密碼,接下來,將進行“基於密鑰的身份驗證”這種驗證方式的實驗,大家可以體驗以下有什麼區別

實驗環境跟上面的一樣

desktop0.example.com(客戶端)連接classroom.example.com(服務端)時,不需要輸入密碼即可登錄到服務端

[root@desktop0 ~]# ssh-keygen 在客戶生成一對密鑰(公鑰/私鑰)

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa): 是否將私鑰存儲在(默認就直接回車)

Enter passphrase (empty for no passphrase):是否加密私鑰 (默認直接回車為不加密)

Enter same passphrase again: 對應上面也直接回車即可

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.這裡同時產生了一個公鑰

The key fingerprint is:

0e:4a:29:75:0b:40:73:53:08:94:85:bd:9b:42:05:5e [email protected]

8 在Linux 7中配置和保護OpenSSH服務

8 在Linux 7中配置和保護OpenSSH服務

[root@desktop0 ~]# ssh-copy-id [email protected]

這條命令,可以將我們剛剛生成的公鑰拷貝給服務端,即你想要連接哪臺服務器,就將公鑰拷貝過去即可

8 在Linux 7中配置和保護OpenSSH服務

[root@desktop0 ~]# ssh -X [email protected]

執行完上面的操作後,我們發現再次連接到服務端時,已經不需要密碼了,因為服務端有從客戶端拷貝過去公鑰

8 在Linux 7中配置和保護OpenSSH服務

基於密鑰身份驗證原理:

  1. 客戶端首先在本地生成一對密鑰,然後客戶端通過ssh-copy-id把公鑰傳送給目標服務器

  2. 客戶端使用服務器的公鑰加密一段數據再使用自己的私鑰加密傳送給目標服務器(雙向驗證)

    客戶端驗證服務器的合法性

    服務器也要驗證客戶端的合法性

  3. 驗證通過客戶端和服務器建立連接

當我們在使用自動化的任務時,比如拷貝文件/etc/passwd到服務端classroom的目錄/mnt下,根本可以不用輸密碼,使用腳本直接運行即可

8 在Linux 7中配置和保護OpenSSH服務

此時,對於客戶端來說,私鑰就很重要了,如果私鑰被他人拷貝到其它電腦,那麼也可以不需要任何密碼即可連接到相應的服務端,客戶端私鑰位置如下

8 在Linux 7中配置和保護OpenSSH服務

接下來,進行私鑰加密的實驗(主要用在外網進行連接時)

[root@desktop0 ~]# ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

/root/.ssh/id_rsa already exists.

Overwrite (y/n)? y 此時提示私鑰已經存在,y確認覆蓋

Enter passphrase (empty for no passphrase): 輸入密碼進行私鑰加密,

Enter same passphrase again: 輸入密碼進行私鑰加密

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

85:bf:5a:a2:45:f9:60:64:0e:0f:ce:34:9d:11:9c:b3 [email protected]

8 在Linux 7中配置和保護OpenSSH服務

此時,因為客戶端重新生成了一對密鑰,所以,需要重新拷貝公鑰到服務端

8 在Linux 7中配置和保護OpenSSH服務

8 在Linux 7中配置和保護OpenSSH服務

再次進行連接時,需要輸入前面客戶端給私鑰加密的密碼,才可進行連接。

現在問題出現了,私鑰是安全了,但是又變成了這種交互式的連接,怎麼實現自動化呢?

8 在Linux 7中配置和保護OpenSSH服務

此時,我們需要在客戶端啟用ssh-agent,命令如下

[root@desktop0 ~]# ssh-agent bash

[root@desktop0 ~]# ssh-add

8 在Linux 7中配置和保護OpenSSH服務

現在再進行連接時,就可以不用輸入密碼了。

通過以上操作,對私鑰進行加密,這樣他人拿到你的私鑰也需要密碼才能進行連接


SSH服務端的配置

ssh服務端軟件,防火牆默認打開22端口

openssh-server-6.4p1-8.el7.x86_64 服務端軟件

openssh-clients-6.4p1-8.el7.x86_64 客戶端軟件

關於ssh軟件,Linux即使是最小化安裝,也是默認安裝和默認開啟的

8 在Linux 7中配置和保護OpenSSH服務

如下,ssh默認監聽的端口為22,監聽的地址為任意IP

8 在Linux 7中配置和保護OpenSSH服務

對於客戶端為Linux系統的,直接ssh直接連接即可,如果為Windows系統的,可以安裝相應的ssh客戶端,如putty,Secure CRT,Xmanager等

ssh服務端軟件的配置文件路徑如下

8 在Linux 7中配置和保護OpenSSH服務

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

/etc/ssh/ssh_config 客戶端配置文件

[root@classroom ~]# vim /etc/ssh/sshd_config

可以使用以上命令進行修改,如修改ssh監聽的端口或者地址等

可以通過 man sshd_config查看配置文件的幫助

相關推薦

推薦中...