1. 程式人生 > >2.1 ssh服務

2.1 ssh服務

empty config 公有 創建 安全性 aaa ges net a算法

SSH服務

ssh: secure shell, protocol, 22/tcp, 安全的遠程登錄

1 SSH是標準的網絡協議,可用於大多數UNIX操作系統,能夠實現字符界面的遠程登錄管理,它默認使用22號端口,采用密文的形式在網絡中傳輸數據,相對於通過明文傳輸的Telnet,具有更高的安全性。

2 SSH協議版本
v1: 基於CRC-32做MAC,不安全;man-in-middle
v2:雙方主機協議選擇安全的MAC方式基於DH算法做密鑰交換,基於RSA或DSA實現身份認證

3 兩種方式的用戶登錄認證:
基於password
基於key

兩種驗證有何不同之處

這兩者都是通過密文傳輸數據的。
不同的是,口令用戶驗證方式傳輸的是用戶的賬戶名和密碼,這要求輸入的密碼具有足夠的復雜度才能具有更高的安全性。

而基於密鑰的安全驗證必須為用戶自己創建一對密鑰,並把共有的密鑰放在需要訪問的服務器上。當需要連接到SSH服務器上時,客戶端軟件就會向服務器發出請求,請求使用客戶端的密鑰進行安全驗證。服務器收到請求之後,先在該用戶的根目錄下尋找共有密鑰,然後把它和發送過來的公有密鑰進行比較。如果兩個密鑰一致,服務器就用公有的密鑰加密“質詢”,並把它發送給客戶端軟件。客戶端收到質詢之後,就可以用本地的私人密鑰解密再把它發送給服務器。這種方式是相當安全的。

OpenSSH

基於C/S結構

ssh, 配置文件:/etc/ssh/ssh_config

ssh客戶端

語法:ssh [選項][用戶@] host [命令]

選項

-p:遠程服務器監聽的端口

-b:指定連接的源IP
-v:調試模式
-C:壓縮方式
-X:支持x11轉發
-t:強制偽tty分配

ssh -t remoteserver1 ssh remoteserver2

SSH客戶端

1 允許實現對遠程系統經驗證地加密安全訪問
2 當用戶遠程連接ssh服務器時,會復制ssh服務器/etc/ssh/ssh_host*key.pub(CentOS7默認是ssh_host_ecdsa_key.pub)文件中的公鑰到客戶機的~./ssh/know_hosts中。下次連接時,會自動匹配相應私鑰,不能匹配,將拒絕連接。

基於passwd驗證原理

1 客戶端發起ssh請求,服務器會把自己的公鑰發送給用戶

2 用戶會根據服務器發來的公鑰對密碼進行加密

3 加密後的信息回傳給服務器,服務器用自己的私鑰解密,如果密碼正確,則用戶登錄成功

技術分享圖片

基於key驗證原理

技術分享圖片

        1 首先在客戶端生成一對密鑰(ssh-keygen)

        2 並將客戶端的公鑰ssh-copy-id 拷貝到服務端

        3 當客戶端再次發送一個連接請求,包括ip、用戶名

        4服務端得到客戶端的請求後,會到authorized_keys中查找,如果有響應的IP和用戶,就會隨機生成一個字符串,例如:acdf

        5 服務端將使用客戶端拷貝過來的公鑰進行加密,然後發送給客戶端

        6 得到服務端發來的消息後,客戶端會使用私鑰進行解密,然後將解密後的字符串發送給服務端

       7服務端接受到客戶端發來的字符串後,跟之前的字符串進行對比,如果一致,就允許免密碼登錄

實現

基於密鑰的安全驗證必須為用戶自己創建一對密鑰,並把共有的密鑰放在需要訪問的服務器上。當需要連接到SSH服務器上時,客戶端軟件就會向服務器發出請求,請求使用客戶端的密鑰進行安全驗證。服務器收到請求之後,先在該用戶的根目錄下尋找共有密鑰,然後把它和發送過來的公有密鑰進行比較。如果兩個密鑰一致,服務器就用公有的密鑰加密“質詢”,並把它發送給客戶端軟件(putty,xshell等)。客戶端收到質詢之後,就可以用本地的私人密鑰解密再把它發送給服務器,這種方式是相當安全的。

步驟:
1、在客戶端生成一對密鑰
2、將公鑰傳輸至服務器端某用戶的家目錄下的 .ssh/authorized_keys 文件中(多個公鑰需要進行追加)
3、測試登錄
首先,我們需要生成一對密鑰

基於key驗證登錄

  1. 在客戶端生成密鑰對

    [root@CentOS7 .ssh]# ssh-keygen -t rsa 使用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:

    SHA256:xrg3GeMda+MI1InqgZwb/ok5x/h+Y5ZJ4A07MYwTjrs [email protected]

    The key‘s randomart image is:

    2.將公鑰發送給服務器端

    [root@CentOS7 .ssh]# ssh-copy-id 192.168.231.192 #ssh-copy-id會自動復制本機的ssh公鑰到對端主機

    3、驗證結果

    [root@CentOS7 .ssh]# ssh 192.168.231.192

實現批量基於Key驗證

實例:實現100臺主機的基於key驗證 //結合expect工具將公鑰推送到到100臺主機上

#!/bin/bash

    **rpm -q expect&> /dev/null||yum install expect -y**

    **ssh-keygen -P"" -f "/root/.ssh/id_rsa"**

    **password=centos**

    **whileread ipaddr;do #調用expcet腳本**

    **expect <<EOF**

    **set timeout 10**

    **spawn ssh-copy-id$ipaddr**

    **expect {**

"yes/no"{ send "yes\n";exp_continue }

"password"{ send "$password\n" }

    **}**

    **expect eof**

    **EOF**

    **done < ip.txt**

想要完成多主機基於Key驗證,方法有二:

方法一:將所有主機包括本主機的公鑰復制到一臺主機上,然後再將這臺主機上的 authorized_keys 文件復制到其他所有主機上,推薦。

方法二:所有主機使用同一對密鑰,因為基於 Key 驗證,破解一臺主機後所有主機也可以免密登陸,所以破解難度與方法一相同。

SSH應用

? scp命令用於基於ssh登陸進行安全的遠程文件全量拷貝。

scp [email protected]:/root/.ssh/authorized_keys [email protected]:/root/.ssh/ #將遠程74主機上的文件復制到遠程主機69上

語法:scp [選項][用戶@]網絡地址:/遠程文件 本地目錄
scp [選項] 本地文件 [用戶@]網絡地址:/遠程目錄
scp [選項][用戶@]網絡地址:/遠程文件 [用戶@]網絡地址:/遠程目錄

選項

-C: 壓縮數據流
-r: 遞歸復制
-p: 保持原文件的屬性信息
-q: 靜默模式
-P PORT: 指明remote host的監聽的端口

rsync命令用於基於ssh登陸進行安全的遠程文件增量拷貝。

語法:rsync [選項] 本地文件 網絡地址:遠程文件

          rsync [選項] 網絡地址:遠程文件 本地文件
          rsync [選項] 本地文件/網絡地址:遠程文件

root@CentOS7 rsync]# tree #源主機上的文件
.
├── dir1
│ ├── 9x9table.sh #目標主機上有刪除修改
│ ├── chessboard.sh #目標主機沒有此文件
│ ├── copycmd.sh #目標主機有增加修改
│ ├── Ddos.sh
│ └── dir3 #目標主機沒有這個目錄
│ ├── guess.sh
│ └── Hanoi_Tower.sh
└── dir2
├── isosceles_triangle.sh
├── MageAwk.sh #目標主機沒有此文件
├── matrix.sh
└── md5break.sh

3 directories, 10 files
[root@CentOS7 rsync]# ssh 192.168.30.75 "tree /data/rsync/" #目標主機上的文件
/data/rsync/
├── dir1
│ ├── 9x9table.sh
│ ├── copycmd.sh
│ └── Ddos.sh
└── dir2
├── isosceles_triangle.sh
├── matrix.sh
└── md5break.sh

基於ssh和rsh服務實現高效率的遠程系統之間復制文件

使用安全的shell連接做為傳輸方式
? rsync –av /etc server1:/tmp 復制目錄和目錄下文件

rsync -av /etc/ 192.168.30.74:/data #會只復制etc下的文件,類似於cp -r

? rsync –av /etc/ server1:/tmp 只復制目錄下文件

rsync -av /etc 192.168.30.74:/data #會連同etc目錄一同復制,類似於cp --parents

比scp更快,只復制不同的文件

選項:
-n 模擬復制過程
-v 顯示詳細過程
-r 遞歸復制目錄樹
-p 保留權限
-t 保留時間戳
-g 保留組信息
-o 保留所有者信息
-l 將軟鏈接文件本身進行復制(默認)
-L 將軟鏈接文件指向的文件復制
-a 存檔,相當於–rlptgoD,但不保留ACL(-A)和SELinux屬性(-X)

--existing 只同步目標端已有的文件 --ignore-existing 只復制目標端不存在的文件

rsync -av --existing /data/rsync/ 192.168.30.75:/data/rsync

技術分享圖片

rsync -av --ignore-existing /data/rsync/ 192.168.30.75:/data/rsync

技術分享圖片

--backup 備份文件 --backup-dir= 備份至指定目錄

技術分享圖片

--exclude 排除匹配的文件

技術分享圖片

--remove-source-files 刪除已經同步的源文件

技術分享圖片

--delete 刪除目標端的不同步文件(多刪,少補)

技術分享圖片

2.1 ssh服務