SSH服務詳解

来源:http://www.cnblogs.com/znix/archive/2017/10/22/7711494.html
-Advertisement-
Play Games

第1章 SSH服務 1.1 SSH服務協議說明 SSH 是 Secure Shell Protocol 的簡寫,由 IETF 網路工作小組(Network Working Group )制定;在進行數據傳輸之前,SSH先對聯機數據包通過加密技術進行加密處理,加密後在進行數據傳輸。確保了傳遞的數據安全 ...


第1章 SSH服務

1.1 SSH服務協議說明

SSH Secure Shell Protocol 的簡寫,由 IETF 網路工作小組(Network Working Group )制定;在進行數據傳輸之前,SSH先對聯機數據包通過加密技術進行加密處理,加密後在進行數據傳輸。確保了傳遞的數據安全。

SSH是專為遠程登錄會話和其他網路服務提供的安全性協議。利用 SSH 協議可以有效的防止遠程管理過程中的信息泄露問題,在當前的生產環境運維工作中,絕大多數企業普遍採用SSH協議服務來代替傳統的不安全的遠程聯機服務軟體,如telnet(23埠,非加密的)等。

在預設狀態下,SSH服務主要提供兩個服務功能:

一是提供類似telnet遠程聯機伺服器的服務,即上面提到的SSH服務。

另一個是類似FTP服務的sftp-server,藉助SSH協議來傳輸數據的.提供更安全的SFTP服務(vsftpproftp)

1.1.1 ssh遠程連接排錯過程

1.2 SSH加密技術說明

簡單的說,SSH加密技術就是將人類可以看得懂的數據,通過一些特殊的程式演算法,把這些數據變成雜亂的無意義的信怠,然後,通過網路進行傳輸,而當到了目的地後,在通過對應的解密演算法,把傳過來的加密的數據信怠解密成加密前的可讀的正常數據。因此,當數據在互聯網上傳輸時即使被有心的黑客監聽竊取了,也很難獲取到真正黑要的數據。

當前,網路上的數據包加密技術一般是通過所謂的一對公鑰與私鑰(PublickeyandPivatekey)組合成的密鑰對進行加密與解密操作。如下圖,A-Server要給B_Client傳數據,首先會通過本地的公鑰加密後再到發到網路上傳輸。而加密的數據到達B_Client端後,再經由B_Client本地的私鑰將加密的數據解密出來。由於在intemet上傳輸過程中的數據是加密過的,所以,傳輸的數據內容一般來說是比較安全的。

 

圖1-1 ssh認證連接的過程

1.2.2 ssh實現安全鏈接建立,利用要是和鎖頭

1. 鑰匙=私鑰 鎖頭=公鑰,私鑰可以解密公鑰

2. 公鑰可以再網路中傳輸,私鑰再本地主機保存

1.2.3 ssh加密演算法

v1漏洞: 密鑰不更換

v2 定期更換密鑰

利用Diffie-Hellman機制定期更新密鑰

1.3 ssh知識要點

* ssh是安全的加密協議,用於遠程鏈接linux伺服器

* ssh 預設埠是22,安全協議版本sshv2,出來2之外還有1(有漏洞)

* ssh服務端主要包括兩個服務功能 ssh遠程鏈接和sftp服務

* linux ssh 客戶端包括ssh 遠程鏈接命令,以及遠程拷貝scp命令

1.4 SSH服務軟體詳細說明

1.4.1 什麼是ssh服務

SSH服務端是一個守護講程 (daemon).他在後臺運行並響應來自客戶端的連接請求。 SSH服務端的講程名為sshd,負責實時監聽遠程SSH客戶端的遠程連接請求,併進行處理,一般包括公共密鑰認證、密鑰交換、對稱密鑰加密和非安全連接等。這個SSH服務就是我們前面基礎系統優化中保留開機自啟動的服務之。

ssh客戶端包含ssh以及像scp(遠程拷貝) slogin(遠程登陸) sftp(安全FTP文件傳輸)等應用程式。

ssh的工作機制大致是本地的ssh客戶端先發送一個連接請求到遠程的ssh服務端,服務端檢查連接的客戶端發送的數據包和IP地址,如果確認合法,就會發送密鑰給 SSH的客戶端,此時,客戶端本地再將密鑰發回給服務端,自此連接建立。

1.4.2 ssh軟體安裝

客戶端

[root@nfs01 ~]# rpm -qf `which ssh`

openssh-clients-5.3p1-122.el6.x86_64

服務端軟體

[root@nfs01 ~]# rpm -qf `which sshd`

openssh-server-5.3p1-122.el6.x86_64

1.4.3 openssh-clinets 軟體的主要內容:

[root@nfs01 ~]# rpm -ql openssh-clients

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

/usr/bin/.ssh.hmac

/usr/bin/scp                  ---遠程複製命令

/usr/bin/sftp                 ---遠程文件傳輸服務

/usr/bin/slogin              ---遠程登陸命令

/usr/bin/ssh                  ---ssh遠程登陸管理主機

/usr/bin/ssh-add

/usr/bin/ssh-agent

/usr/bin/ssh-copy-id        ---ssh服務分發公鑰命令

/usr/bin/ssh-keyscan

1.4.4 openssh-server 軟體的主要內容

[root@nfs01 ~]# rpm -ql openssh-server

/etc/rc.d/init.d/sshd      #ssh服務啟動腳本

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

/etc/sysconfig/sshd        #ssh創建密鑰有關

/usr/sbin/.sshd.hmac       #ssh加密演算法有關文件

/usr/sbin/sshd             #ssh服務進程啟動命令

註意:使用sshd採用絕對路徑進行啟動

[root@test ~]# sshd

sshd re-exec requires execution with an absolute path

1.5 ssh服務配置文件說明:

01. 配置文件中所有註釋信息,表示預設參數配置

02. 配置文件中#空格 後面內容表示說明信息

              #參數 表示配置參數信息

03. 配置文件參數信息修改後,一旦變為註釋,即還原為預設配置

1.5.1 ssh服務的配置文件路徑

vim  /etc/ssh/sshd_config

修改SSH服務的運行參數,是通過修改配置文件/etc/ssh/sshd_config實現的。

一般來說SSH服務使用預設的配置已經能夠很好的工作了,如果對安全要求不高,僅僅提供SSH服務的情況,可以不需要修改任何配置。

1.5.2 配置文件中常用配置說明

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

#       $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $

 

# This is the sshd server system-wide configuration file.  See

# sshd_config(5) for more information.

 

# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin

 

# The strategy used for options in the default sshd_config shipped with

# OpenSSH is to specify options with their default value where

# possible, but leave them commented.  Uncommented options change a

# default value.

 

# OpenSSH is to specify options with their default value where

# possible, but leave them commented.  Uncommented options change a

# default value.

 

Port 25113                   #

ListenAddress 10.0.0.41   #監聽地址(本地網卡地址),指定本地網卡那個網卡提供服務

PermitRootLogin no         #是否允許root用戶登陸

#PermitEmptyPasswords no  #禁止空密碼登陸

#UseDNS no                   #不使用DNS

GSSAPIAuthentication no    #API認證

# 連接慢的解決

#AddressFamily any         #指定監聽ipv4地址,或是ipv6地址,或者所有都監聽

配置文件內容說明:

井號(#)註釋的參數信息為預設配置

井號(#)後面有空格的為描述信息

井號(#)後面沒有空格的為參數信息

另外:配置文件參數信息修改後,一旦變為註釋,即還原為預設配置

1.5.3 配置文件語法檢查方法

使用sshd -t 命令 對配置文件的語法進行檢查

正確

[root@backup ~]# sshd -t /etc/ssh/sshd

Extra argument /etc/ssh/sshd.

語法格式有錯誤  ↓

[root@test ~]# sshd -t /etc/ssh/sshd_config

/etc/ssh/sshd_config: line 50: Bad configuration option: uthorizedKeysFile

/etc/ssh/sshd_config: terminating, 1 bad configuration options

1.5.4 ListenAddress 監聽地址的說明

圖1-2 ssh服務監聽參數說明

如圖所示,sshd_config配置文件中實際監聽本地的網卡,並非網路地址

監聽地址只能監聽本地網卡上配置的地址,監聽的網卡可以對請求做出相應,為未監聽的網卡不響應請求。

1.5.5 SSH配置文件相關參數詳細說明

命令參數

參數說明

Port

指定sshd進程監聽的埠號,預設為22.可以使用多條指令監聽多個埠.

預設將在本機的所有網路接□上監聽,但是可以通過ListenAddress指走只在某個特定的介面上監聽.

PermitEmptyPasswords

是否允許密碼為空的用戶遠程登錄.預設為"no"

PermitRootLogin

是否允許root登錄.可用值如下:"yes"(預設)表示允許."no"表示禁止.

"without-password"表示禁止使用密碼認證登錄."forced-commands-only"表示只有在指走了command選項的情況下才允許使用公鑰認證登錄.同時其它認證方法全部被禁止.這個值常用於做遠程備份之類的事情.

1.多開一個視窗

2.臨時多部署一條連接方式

3.給普通用戶sudo許可權

UseDNS

指定定sshd是否應該對遠程主機名進行反向解折,以檢查此主機名是否與其IP地址真實對應.預設值為"yes”.

ListenAddress

指定監聽並提供服務相應的網卡地址信息

1.5.6 快速修改配置參數

sed -i '13 iPort 52113\nPermitRootLogin no\nPermitEmptyPasswords no\nUseDNS no\nGSSAPIAuthentication no'  /etc/ssh/sshd_config

1.6 ssh服務認證類型

01. 基於口令認證方式

02. 基於密鑰認證方式

1.6.1 基於密碼的認證類型

基於口令的安全驗證的方式就是大家現在一直在用的,只要知道伺服器的SSH連接帳號和口令(當然也要知道對應伺服器的 IP及開放的 SSH埠,預設為22 ),就可以通過 ssh客戶端登錄到這台遠程主機。此時,聯機過程中所有傳輸的數據都是加密的。

演示了 SecureCRssh客戶端連接,口令驗證的測試。

[root@test ~]# ssh 10.0.0.250

The authenticity of host '10.0.0.250 (10.0.0.250)' can't be established.

RSA key fingerprint is d3:41:bb:0d:43:88:da:a3:2c:e8:36:91:11:c9:e4:9c.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '10.0.0.250' (RSA) to the list of known hosts.

[email protected]'s password:    #需要輸入密碼

Last login: Mon Oct 16 21:13:58 2017 from 10.0.0.1

[root@test ~]#

1.6.2 基於密鑰的安全認證方法

基於密鑰的安全驗證方式是指,需要依靠密鑰,也就是必須事先建立一對密鑰對,然後把公用密鑰(鎖頭)Public key)放在需要訪問的目標伺服器上,另外,還需要把私有密鑰(鑰匙)(Private key)放到SSH的客戶端或對應的窖戶端伺服器上。

私鑰不能在網路中傳輸---私鑰可以解密公鑰

公鑰可以再網路中傳輸---公鑰不能解密私鑰

此時,如果要想連接到這個帶有公用密鑰的SSH伺服器,客戶端SSH軟體或者客戶端伺服器就會向SSH伺服器發出請求,請求用聯機的用戶密鑰進行安全驗證。SSH伺服器收到請求之後,會先在該SSH伺服器上連接的用戶的家目錄下尋找事先放上去的對應用戶的公用密鑰,然後把它和連接的SSH客戶端發送過來的公用密鑰進行比較。如果兩個密鑰一致,SSH伺服器就用公用密鑰加密"質詢"challenge)並把它發送給SSH客戶端。

1.7 基於秘鑰登錄配置

 

1.7.1 環境準備

作用

主機名

ip

管理伺服器

m01

10.0.0.61

備份伺服器

backup

10.0.0.41

存儲伺服器

nfs01

10.0.0.31

1.7.2 第一個裡程碑: 在備份伺服器上創建密鑰對

[root@backup ~]# ssh-keygen -t rsa

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:

72:48:65:1d:25:69:e1:4c:ae:2b:6f:a5:aa:70:96:1e root@backup

The key's randomart image is:

+--[ RSA 2048]----+     #2048表示加密的位數為2048

|        o.==.      |

|       o =+.       |

|      .  .+        |

|     . . .         |

|      o S           |

|     . o ..        |

|  . E . .o         |

|   = . oo           |

|    o..o.           |

+-----------------+

參數說明:

      -t 指定創建密鑰對的類型,可以創建的類型如下↓

Specifies the type of key to create.  The possible values are rsa1” for protocol version 1 and “dsa”, “ecdsa” or “rsa” for protocol version 2.

查看創建出來的密鑰對:

[root@backup ssh]# ll ~/.ssh/

total 12

-rw------- 1 root root 1675 Oct 18 11:07 id_rsa         #私鑰文件

-rw-r--r-- 1 root root  393 Oct 18 11:07 id_rsa.pub    #公鑰文件

-rw-r--r-- 1 root root  784 Oct 11 16:27 known_hosts

1.7.3 第二個裡程:將公鑰分發給存儲伺服器

[root@backup ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.31 #用戶使用當前用戶

root@172.16.1.31's password:   #註意:首次分發密鑰需要輸入對端伺服器的用戶密碼

Now try logging into the machine, with "ssh '172.16.1.31'", and check in:

 

  .ssh/authorized_keys    #公鑰分發到對端後進行改名

 

to make sure we haven't added extra keys that you weren't expecting.

說明:

   通過 man 手冊找到密鑰分發的命令格式。

   -i 參數指定 公鑰文件的存放位置

[use@]表示使用的用戶,預設使用當前登陸的用戶

[root@backup ~]# man ssh-copy-id

Formatting page, please wait...

SSH-COPY-ID(1)                                                  SSH-COPY-ID(1)

NAME

       ssh-copy-id  -  install  your  public  key in a remote machine's autho-

       rized_keys

SYNOPSIS

       ssh-copy-id [-i [identity_file]] [user@]machine

1.7.4 第三個裡程碑:進行登錄測試

[root@backup ~]# ssh nfs01

Last login: Wed Oct 18 10:13:17 2017 from 10.0.0.1

[root@nfs01 ~]#

1.8 telnet服務簡介

1.8.1 部署telnet服務

第一個裡程碑:安裝telnet服務軟體

[root@test ~]# yum install telnet telnet-server -y

第二個裡程碑:設置開機自啟動

[root@test ~]# vim /etc/xinetd.d/telnet

修改xinetd下的配置文件,從而管理telnet服務

[root@test ~]# vim /etc/xinetd.d/telnet
# default: on
# description: The telnet server serves telnet sessions; it uses \
#       unencrypted username/password pairs for authentication.
service telnet
{
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        log_on_failure += USERID
        disable         = no
}

第三個裡程碑: 啟動xinetd 服務,讓telnet能夠開機自啟動

[root@test ~]# /etc/init.d/xinetd start

Starting xinetd:                                           [  OK  ]

1.8.2 客戶端測試

說明:

    telnet服務預設不支持root用戶直接登陸。

[C:\]$ telnet 10.0.0.250

Connecting to 10.0.0.250:23...

Connection established.

To escape to local shell, press 'Ctrl+Alt+]'.

CentOS release 6.9 (Final)

Kernel 2.6.32-696.el6.x86_64 on an x86_64

test login: oldboy

Password:

Last login: Wed Oct 18 09:41:19 from 10.0.0.1

[oldboy@test ~]$

1.8.3 sshtelnet區別(對比示意圖)

01ssh是加密的服務協議,telnet服務是非加密的

02.ssh服務預設支持root用戶登陸,telnet用戶預設不支持root用戶登陸

 

1.9 進行免密碼scp傳輸測試

[root@backup ~]# scp -rp  /etc/hosts nfs01:/tmp/

hosts                                         100%  357     0.4KB/s   00:00  

1.9.1 scp的基本語法使用:

scp - secure copy (remote file copy program)

每次都是全量拷貝,增量拷貝rsync

推:PUSH

scp -P22 -rp /tmp/oldboy [email protected]:/tmp

參數說明:

<- -P(大寫,註意和ssh命令的不同)接埠,預設22埠時可以省略-P22;

<- -r遞歸,表示拷貝目錄;

<- -p表示在拷貝前後保持文件或目錄屬性;

<- -l limit 限制速度。

<- /tmp/oldboy為本地的目錄。“@”前為用戶名,“@”後為要連接的伺服器的IPIP後的:/tmp目錄,為遠端的目標目錄。

說明:

以上命令作用是把本地/tmp/oldboy拷貝到遠端伺服器10.0.0.143/tmp目錄;

拉:PULL

scp -P22 -rp [email protected]:/tmp/oldboy /opt/

說明:

還可以把遠端目錄抓到本地

結論:

scp為遠程拷貝文件或目錄的命令,更多用法,請man scp

拷貝許可權為連接的用戶對應的許可權

1.10 使用sftp進行基於密鑰的文件傳輸

1.10.1 sftp簡介

sftpSecure File Transfer Protocol的縮寫,安全文件傳送協議。可以為傳輸文件提供一種安全的網路的加密方法。sftp ftp 有著幾乎一樣的語法和功能。SFTP SSH的其中一部分.

1.10.2 sftp命令說明

[root@m01 ~]# sftp -oPort=22  172.16.1.31

Connecting to 172.16.1.31...

sftp>

說明:

   -o        連接的時候指定選項

Port=22  埠指定為22

1.10.3 sftp使用參數說明

操作遠程伺服器

ls    顯示遠端主機的列表

cd   切換遠程的工作目錄

pwd  顯示遠程的工作目錄

操作本地伺服器

lls   顯示本地主機的列表

lcd   切換本地的工作目錄

lpwd  查看本地目錄信息

上傳下載文件參數

get   --- 表示從遠程伺服器

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 熟悉Oracle上機環境及Oracle客戶端的配置;熟練掌握和使用DDL語言,建立、修改和刪除資料庫表、主鍵、外鍵約束關係和索引。 (修改資料庫表名) 將資料庫表S1改名為Student_Temp。 在定義外鍵約束條件時,不能把其他表中沒有的屬性定義在本表的外鍵中,否則會生辰一個錯誤; 在建表時,因 ...
  • 一、流程式控制制語句 1) 迴圈語句 == loop .. end loop 簡單的迴圈,至少被執行一次 == while ... loop end loop == for 2) 控制語句 == goto 用於跳轉到指定的標號去執行,不建議使用 語法: goto 標號名 == null 語句 null語 ...
  • 一、概述 pl/sql (procedural lanaguage/sql)是 oracle 在標準 sql 上的擴展 。不僅允許嵌入sql 語言,還可以定義變數和常量,允許使用條件語句和迴圈語句,允許使用例外處理錯誤。 -- 可以用來編寫過程,函數,和觸發器 -- 上述對象是放在資料庫中的 //數 ...
  • 工作中遇到的數據更新,學習記錄。 1、使用update進行數據更新 1)最簡單的更新 update tablea a set a.price=1.00 2)帶條件的數據更新 update tablea a set a.price = 2.00 where a.id='02' 3)兩張表關聯更新為固定 ...
  • 瞭解UART原理; 掌握S3C2410/S3C2440中UART的使用 ...
  • Centos 7 安裝與配置 1. 安裝VMware。 2. 安裝centos7 首先右鍵“新建虛擬機”,選擇 “典型”安裝,如下圖: 點擊下一步,選擇“稍後安裝操作系統”,如圖: 選擇好對應的操作系統, 然後,選擇centos的目錄路徑,如圖: 指定磁碟容量,預設20g,可以調整。空間逐漸增加,上 ...
  • 瞭解S3C2410/S3C2440的時鐘體繫結構 掌握通過設置MPLL改變系統時鐘的方法 掌握在不同的頻率下設置存儲控制器的方法 掌握PWM定時器的用法 瞭解WATCHDOG定時器的用法 ...
  • 瞭解ARM體系CPU的7種工作模式 瞭解S3C2410/S3C2440中斷體繫結構 掌握S3C2410/S3C2440的中斷服務程式的編寫方法 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...