2.1 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
兩種驗證有何不同之處
這兩者都是通過密文傳輸數據的。
不同的是,口令用戶驗證方式傳輸的是用戶的賬戶名和密碼,這要求輸入的密碼具有足夠的復雜度才能具有更高的安全性。
OpenSSH
基於C/S結構
ssh, 配置文件:/etc/ssh/ssh_config
ssh客戶端
語法:ssh [選項][用戶@] host [命令]
選項:
-p:遠程服務器監聽的端口
-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驗證登錄
-
在客戶端生成密鑰對
[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服務