SSH 協議與OpenSSH詳解

1. ssh概述 算法

ssh是(Secure SHell protocol) 的簡寫,安全外殼協議(SSH)是一種在不安全網絡上提供安全遠程登陸及其它安全網絡服務的協議。 shell

2. ssh 主要功能 vim

  • 一個就是相似 telnet 的遠程聯機使用 shell 的服務器,即 ssh 安全

  • 另外一個就是相似 FTP 服務的 sftp-server ,提供更安全的 FTP 服務 bash

3. ssh 工做原理 服務器

ssh

  • 服務器創建公鑰: 每一次啓動 sshd 服務時,該服務會主動去找 /etc/ssh/ssh_host* 的文件,若系統剛剛安裝完成時,因爲沒有這些公鑰,所以 sshd 會主動去計算出這些須要的公鑰,同時也會計算出服務器本身須要的私鑰 網絡

  • 客戶端主動聯機請求: 若客戶端想要聯機到 ssh 服務器,則須要使用適當的客戶端程序來聯機,包括 ssh, putty 等客戶端程序鏈接 架構

  • 服務器傳送公鑰給客戶端: 接收到客戶端的要求後,服務器便將第一個步驟取得的公鑰傳送給客戶端使用 (此時應是明碼傳送,反正公鑰原本就是給你們使用的) ssh

  • 客戶端記錄並比對服務器的公鑰數據及隨機計算本身的公私鑰: 若客戶端第一次鏈接到此服務器,則會將服務器的公鑰記錄到客戶端的用戶家目錄內的 ~/.ssh/known_hosts 。如果已經記錄過該服務器的公鑰,則客戶端會去比對這次接收到的與以前的記錄是否有差別。若接受此公鑰, 則開始計算客戶端本身的公私鑰 tcp

  • 回傳客戶端的公鑰到服務器端: 用戶將本身的公鑰傳送給服務器。此時服務器:具備服務器的私鑰與客戶端的公鑰,而客戶端則是: 具備服務器的公鑰以及客戶端本身的私鑰,你會看到,在這次聯機的服務器與客戶端的密鑰系統 (公鑰+私鑰) 並不同,因此才稱爲非對稱加密系統

  • 開始雙向加解密: (1)服務器到客戶端:服務器傳送數據時,拿用戶的公鑰加密後送出。客戶端接收後,用本身的私鑰解密 (2)客戶端到服務器:客戶端傳送數據時,拿服務器的公鑰加密後送出。服務器接收後,用服務器的私鑰解密,這樣就能保證通訊安全

4. ssh 組成

(1). ssh 協議使用的是tcp 22號端口,telnet 使用的是tcp 的23號端口,ssh協議是C/S架構,分爲服務器端與客戶端。

(2). 服務器端的程序有 sshd

客戶端的程序有,Windows下 putty,SecureCRT,SSHSSH Secure Shell Client …… Linux下有,ssh

5. ssh 工具實現

OpenSSH 包括sshd主程序與ssh客戶端

6. sshd 配置文件詳解

vim /etc/ssh/sshd_config

#1. SSH Server 全局設定,port ,協議 ……

  • # Port 22  #默認端口,也可使用多個端口

  • Protocol 2 #協議版本號

  • # ListenAddress 0.0.0.0 #默認值是監聽全部接口的 SSH 要求

  • # PidFile /var/run/sshd.pid #放置 SSHD 這個 PID 的文件

  • # LoginGraceTime 2m #2分鐘以內不輸入密碼,自動斷開

  • # Compression delayed  #使用壓縮數據模式進行傳輸,登入後纔將數據壓縮 (delayed)

#2. 主要私有Key 存放文件

  • # HostKey /etc/ssh/ssh_host_key # SSH version 1 使用的私鑰

  • # HostKey /etc/ssh/ssh_host_rsa_key # SSH version 2 使用的 RSA 私鑰

  • # HostKey /etc/ssh/ssh_host_dsa_key # SSH version 2 使用的 DSA 私鑰

#3. 關於登陸文件的數據與daemon的名稱

  • SyslogFacility AUTHPRIV #記錄日誌/var/log/secure

  • # LogLevel INFO #日誌等級

#4. 安全設置

  • # PermitRootLogin yes #是否容許 root 登入

  • # StrictModes yes #是否讓 sshd 去檢查用戶家目錄或相關文件的權限數據

  • # PubkeyAuthentication yes #使用密鑰登陸系統

  • # AuthorizedKeysFile .ssh/authorized_keys #用戶登陸公鑰存放位置

  • PasswordAuthentication yes #登陸密碼認證

  • # PermitEmptyPasswords no #否容許以空的密碼登入

  • # RhostsAuthentication no #系統不使用 .rhosts認證

  • # IgnoreRhosts yes #是否取消使用 ~/.ssh/.rhosts 來作爲認證

  • # RhostsRSAAuthentication no #專門給 version 1 用的,使用 rhosts 文件在 /etc/hosts.equiv

  • # HostbasedAuthentication no #上面的項目相似,不過是給 version 2 使用的

  • # IgnoreUserKnownHosts no #是否忽略家目錄內的 ~/.ssh/known_hosts

  • ChallengeResponseAuthentication no #容許任何的密碼認證

  • UsePAM yes #利用 PAM 管理使用者認證,能夠記錄與管理

#5. 登陸後項目

  • # PrintMotd yes #登入後是否顯示出一些信息

  • # PrintLastLog yes #顯示上次登入的信息

  • # TCPKeepAlive yes #當達成聯機後,服務器會一直傳送 TCP 封包給客戶端以判斷對方式否一直存在聯機

  • UsePrivilegeSeparation yes #是否權限較低的程序來提供用戶操做

  • MaxStartups 10 #同時容許幾個還沒有登入的聯機畫面

  • DenyUsers * #設定受阻止的使用者名稱

  • DenyUsers test  #阻止用戶

  • DenyGroups test #阻止組

#6. SFTP 設定

  • Subsystem sftp /usr/lib/ssh/sftp-server

  • # UseDNS yes #爲了要判斷客戶端來源是正常合法的,所以會使用 DNS 去反查客戶端的主機名,不過在內網這項目設定爲 no 會讓聯機達成速度比較快


7. sftp 講解  


(1). 使用方式:sftp root@localhost

(2). sftp 支持的命令

針對遠程服務器主機 (Server) 的行爲

  • 變換目錄到 /etc/test 或其餘目錄        
    cd /etc/test         
    cd PATH

  • 列出目前所在目錄下的文件名        
    ls         
    dir

  • 創建目錄        
    mkdir directory

  • 刪除目錄        
    rmdir directory

  • 顯示目前所在的目錄        
    pwd

  • 更改文件或目錄羣組        
    chgrp groupname PATH

  • 更改文件或目錄擁有者        
    chown username PATH

  • 更改文件或目錄的權限        
    chmod 644 PATH         
    其中,644 與權限有關

  • 創建連接文件        
    ln oldname newname

  • 刪除文件或目錄        
    rm PATH

  • 更改文件或目錄名稱        
    rename oldname newname

  • 離開遠程主機        
    exit (or) bye (or) quit

  • 針對本機 (Client) 的行爲(都加上 l, L 的小寫 )

  • 變換目錄到本機的 PATH 當中        
    lcd PATH

  • 列出目前本機所在目錄下的文件名        
    lls

  • 在本機創建目錄        
    lmkdir

  • 顯示目前所在的本機目錄        
    lpwd

  • 針對資料上傳/下載的操做

  • 將文件由本機上傳到遠程主機 put [本機目錄或文件] [遠程]        
    put [本機目錄或文件]         
    若是是這種格式,則文件會放置到目前遠程主機的目錄下

  • 將文件由遠程主機下載回來 get [遠程主機目錄或文件] [本機]        
    get [遠程主機目錄或文件]         
    如果這種格式,則文件會放置在目前本機所在的目錄當中!可使用通配符,例如:         
    get *         
    get *.rpm


8. 遠程文件直接複製 scp

1
2
scp [-pr] [-l 速率] file [帳號@]主機:目錄名  #上傳
scp [-pr] [-l 速率] [帳號@]主機:file 目錄名  #下載

選項與參數:

1
2
3
-p :保留原來文件的權限數據
-r :複製來源爲目錄時,能夠複製整個目錄 (含子目錄)
-l :能夠限制傳輸的速度,單位爲 Kbits/s ,例如 [-l 800] 表明傳輸速限 100Kbytes/s

案例:

1
2
scp /etc/hosts* root @127.0.0.1 :~ #上傳
scp root@127.0.0.1:/etc/bashrc /tmp #下載


9. ssh的認證方式

基於口令的認證:這個就不用說了,就是輸入用戶名和密碼

基於密鑰的認證,具體步驟以下

(1).客戶端創建兩把鑰匙(公鑰與私鑰)

1
2
3
4
5
6
ssh-keygen [-t rsa|dsa] #可選 rsa 或 dsa
[root@localhost ~]# ssh-keygen #默認算法
[root@localhost ~]# ls -l .ssh/  
total 8   
-rw------- 1 root root 1675 May 27 03:05 id_rsa   
-rw-r--r-- 1 root root  408 May 27 03:05 id_rsa.pub

(2).將公鑰數據上傳到服務器上

scp ~/.ssh/id_rsa.pub root@192.168.1.254:~ #上傳到 root 的家目錄底下便可

(3).將公鑰放置服務器端的正確目錄與文件名(scp 或 ssh-copy-id)

方法一 scp

  • 創建 ~/.ssh 文件,注意權限須要爲 700

  • mkdir .ssh ; chmod 700 .ssh #權限設定中,務必是 700 且屬於使用者本人的帳號與羣組才行

  • 將公鑰內的數據使用 cat 轉存到 authorized_keys 內

  • cat id_rsa.pub >> .ssh/authorized_keys

  • chmod 644 .ssh/authorized_keys #這個檔案的權限設定中,就得要是 644 才能夠

方法二 ssh-copy-id

命令格式:ssh-copy-id –i /path/to/pubkey USERNAME@ERMOTE_HOST

案例:

ssh-copy-id –i .ssh/id_rsa.pub root@192.168.1.254

10. sshd 管理細則

  • 密碼應該常常換且足夠複雜

  • 非默認端口登陸

  • 限制登陸用戶地址

  • 禁止管理員直接登陸

  • 僅容許有限制用戶登陸

  • 使用基於密鑰的認證禁止使用版本1

    • 禁止使用版本1

相關文章
相關標籤/搜索