05.12 架構之ssh-key章節

第一章 ssh簡介

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

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

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


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

[root@nfs01 ~]# ssh -p22 [email protected]
root@10.0.0.41's password: 
Last login: Fri May 12 11:50:03 2017 from 10.0.0.253
[root@backup ~]# exit
logout
Connection to 10.0.0.41 closed.
[root@nfs01 ~]#

3. 基於密鑰(鑰匙鎖頭)的安全驗證
基於密鑰的安全驗證方式是指,需要依靠密鑰,也就是必須事先建立一堆密鑰對,然後把公用密鑰(鎖頭)放在需要訪問的目標服務器,另外,還需要把私有密鑰(鑰匙)(Private key)放到SSH的客戶端或對應的客戶端服務器上。
SSH客戶端收到質詢之後就可以用自己的私鑰解密,再把它發送給SSH服務器,使用這種方式,需要知道聯機用戶的密鑰文件。與第一種基於口令驗證的方式相比,第二種方式不需要在網絡上傳送口令密碼,所以安全性更高了,這時我們也要注意保護我們的密鑰文件,特別是私鑰文件,一旦被黑客獲取,危險就很大了。

4. SSH配置文件信息
修改SSH服務的運行參數,是通過修改配置文件/etc/ssh/sshd_config實現的。
一般來說SSH服務使用默認的配置已經能夠很好的工作了,如果對安全要求不高,僅僅提供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 指定監聽並提供服務相應的網卡地址信息。

5. 鑰匙和鎖頭的使用過程
連接服務的ssh客戶端,創建出密鑰和鎖頭
連接服務的ssh客戶端,將鎖頭髮送給ssh服務端
連接服務的ssh客戶端,發出連接請求
ssh服務端收到連接請求後,會發出質詢信息,你想鏈接我,你能打開我的鎖頭嗎
ssh客戶端利用鑰匙解密了質詢,至此鑰匙和鎖頭就匹配了,將匹配後的結果告知服務器端
ssh服務端認可匹配結果,連接請求建立


第二章 查看端口命令總結

1. ss

[root@nfs01 ~]# ss -lntup |egrep 22
udp    UNCONN     0      0                      *:57343                 *:*      users:(("rpc.statd",1223,7))
udp    UNCONN     0      0              127.0.0.1:975                   *:*      users:(("rpc.statd",1223,4))
udp    UNCONN     0      0                     :::40163                :::*      users:(("rpc.statd",1223,9))
tcp    LISTEN     0      128                   :::22                   :::*      users:(("sshd",1349,4))
tcp    LISTEN     0      128                    *:22                    *:*      users:(("sshd",1349,3))
tcp    LISTEN     0      128                    *:15735                 *:*      users:(("rpc.statd",1223,8))
tcp    LISTEN     0      128                   :::28156                :::*      users:(("rpc.statd",1223,10))

2. netstat

[root@nfs01 ~]# netstat -lntup |egrep 22
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1349/sshd           
tcp        0      0 0.0.0.0:15735               0.0.0.0:*                   LISTEN      1223/rpc.statd      
tcp        0      0 :::22                       :::*                        LISTEN      1349/sshd           
tcp        0      0 :::28156                    :::*                        LISTEN      1223/rpc.statd      
udp        0      0 0.0.0.0:57343               0.0.0.0:*                               1223/rpc.statd      
udp        0      0 127.0.0.1:975               0.0.0.0:*                               1223/rpc.statd     

3. lsof

[root@nfs01 ~]# lsof -i :22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1349 root    3u  IPv4  11110      0t0  TCP *:ssh (LISTEN)
sshd    1349 root    4u  IPv6  11112      0t0  TCP *:ssh (LISTEN)
sshd    2617 root    3r  IPv4  19684      0t0  TCP 10.0.0.31:ssh->10.0.0.253:54109 (ESTABLISHED)

4. namp

[root@nfs01 ~]# nmap -p 22 10.0.0.41

Starting Nmap 5.51 ( http://nmap.org ) at 2017-05-12 15:07 CST
Nmap scan report for 10.0.0.41
Host is up (0.00028s latency).
PORT   STATE SERVICE
22/tcp open  ssh
MAC Address: 00:0C:29:A0:B1:48 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds

5. telnet

telnet 10.0.0.41 22

第三章 scp用法

本地nfs客戶端推送到rsync服務端

[root@backup ~]# scp /etc/hosts root@172.16.1.31:/data/
root@172.16.1.31's password: 
hosts                                                                   100%  321     0.3KB/s   00:00

[root@nfs01 data]# ll
total 4
-rw-r--r-- 1 root root 321 May 12 16:01 hosts

本地nfs客戶端從rsync服務端拉

[root@backup ~]# scp [email protected]:/etc/hosts   /tmp/
root@172.16.1.31's password: 
hosts                                                                   100%  320     0.3KB/s   00:00   

第四章 SSH入侵案例說明

  1. 如何防止SSH登錄入侵小結:
  2. 用密鑰登錄,不用密碼登錄。
  3. 牤牛陣法:解決SSH安全問題
  4. 防火牆封閉,SSH,,指定源IP限制(局域網、信任公網)
  5. 開啓SSH只監聽本地內網IP(ListenAddress 172.16.1.61)
  6. 儘量不給服務器外網IP
  7. 最小化(軟件安裝-授權)
  8. 給系統的重要文件或命令做一個指紋 md5sum /etc/hosts >/tmp/hosts_finger.txt grep XXX
    /tmp/hosts_finger.txt
  9. 給他上鎖chattr +i +a

第五章 ssh+key共享密鑰部署流程說明

1. 生成鑰匙 鎖頭 (密鑰對)

[root@m01 ~]# ssh-keygen -t dsa 
   Generating public/private dsa key pair.                     #生成一對dsa類型的祕鑰對(公鑰和私鑰)
   Enter file in which to save the key (/root/.ssh/id_dsa):    #想要把你的密鑰對放在哪裏 默認即可
   Enter passphrase (empty for no passphrase):                 #給你的鑰匙鎖頭 加上個密碼把。 回車
   Enter same passphrase again:                                #確認   
   Your identification has been saved in /root/.ssh/id_dsa.    #私鑰放置的位置(鑰匙)
   Your public key has been saved in /root/.ssh/id_dsa.pub.    #公鑰放置的位置(鎖頭)
   The key fingerprint is:
   e8:26:51:ba:ed:f0:00:37:a7:3a:ab:ab:34:83:0a:9e root@m01
   The key's randomart image is:
   +--[ DSA 1024]----+
   |                  |
   |                  |
   |      .           |
   |     o .          |
   |  . = o S         |
   |.  o O            |
   |o+  * +           |
   |= =. B            |
   |*Eoo  o           |
   +-----------------+

[root@m01 ~]# ll ~/.ssh -d
drwx------ 2 root root 4096 2017-04-18 09:42 /root/.ssh
[root@m01 ~]# ls -l /root/.ssh/
total 12
-rw------- 1 root root  668 Jan  5 16:37 id_dsa                     ###私鑰 鑰匙 
-rw-r--r-- 1 root root  598 Jan  5 16:37 id_dsa.pub                 ####公鑰 鎖頭
-rw-r--r-- 1 root root 1576 Jan  5 14:58 known_hosts

第六章 公鑰(鎖頭)如何傳遠端端服務端

1. 查看sshd端口

[root@m01 ~]# netstat -lntup |egrep sshd
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1192/sshd           
tcp        0      0 :::22                       :::*                        LISTEN      1192/sshd  

2. 指定公鑰文件發送至服務端IP

[root@ansible01-61 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.111
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@172.16.1.111's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '172.16.1.111'"
and check to make sure that only the key(s) you wanted were added.

3. ssh-copy-id是個腳本文件

[root@m01 ~]# file `which ssh-copy-id`
/usr/bin/ssh-copy-id: POSIX shell script text executable

4. 刪除遠端服務器的公鑰文件

[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub "-p52113 [email protected]"
說明:根據命令腳本,修改$1傳參信息,從而實現根據ssh不同端口傳送公鑰文件 

============================================
#!/bin/bash
until [ $# -eq 0 ]
do
    echo $*
    shift
done
============================================

5. ssh-copy-id執行過程

ssh $1 "exec sh -c 'umask 077; test -d ~/.ssh || mkdir ~/.ssh ; cat >> ~/.ssh/authorized_keys && (test -x /sbin/restorecon && /sbin/restorecon ~/.ssh ~/.ssh/authorized_keys >/dev/null 2>&1 || true)'"

①. 臨時設置了一下umask 077 
②. 看目標服務器是否存在 ~/.ssh 目錄
③. 如果目錄不存在,則創建 mkdir ~/.ssh 
④. 把id_dsa.pub內容 放到了 ~/.ssh/authorized_keys   
authorized_keys文件內容實質上等於id_dsa.pub公鑰文件內容

6. ssh服務如何識別公鑰文件

[root@m01 ~]# vim /etc/ssh/sshd_config            
49 #AuthorizedKeysFile     .ssh/authorized_keys
說明:利用ssh服務配置文件,識別公鑰文件信息   

7. 操作後檢查直接輸入命令

[root@m01 ~]# ssh [email protected] hostname
nfs01

8. ssh服務分發公鑰實質執行過程

  1. 管理服務器創建私鑰和公鑰(密鑰對)
  2. 將公鑰文件遠程傳送複製到被管理服務器相應用戶~/.ssh下,並修改.ssh目錄權限爲700
  3. 修改公鑰文件文件名稱爲authorized_keys,授權權限爲600
  4. 利用ssh服務配置文件的配置參數,進行識別公鑰文件authorized_keys
  5. 進而實現基於密鑰遠程登錄服務器(免密碼登錄/非交互方式登錄)

第七章 ssh+key公鑰批量分發

1. 生成密鑰阻礙因素處理辦法(非交互)

[root@m01 script]# ssh-keygen -t dsa -f ~/.ssh/id_dsa  -P '' -q
ssh-dss AAAAB3NzaC1kc3MAAACBAI6xLEXhSXfNcpmh/64vmOhgZjU4y/KvYRvUkBptp7dDYhHeVLRh3fCMmuPy4PCyMg3eWbinWV2Wv9az83g/bG7sNhmwIWCeey/9UD7Iiyzv4azOHR65gbKoPfOGEOjZ1XvV3dJS9wjgyK59xuhOyYEP+dI86J8l8H7uJ131XH7NAAAAFQCjiQqnJZV44vroP+sP23MPYMOMGQAAAIALpuvd8WWO2dgrgFCOE9SDeZtlTDyeXLoqj/A+04SYFk3u6lh6R4iOVE6arWB9w81aPPh1X0mXXgKJT4j5o7iET/NS7jW43JGnyqsM8DFadQ1atNqzUHRezCfw96v7d8hWFuGEFnyckY3zJyeD/Ri9RDpCMxa/ZDsVZWU3U/Ld6gAAAIBgRsOUF4TNbK6AG6phjoLPIkLvpvOunZveB4e+Ul0ikJDIJror1NJM8epWzEuBUZQd4T+mrfW8q5UYNDAlwxsI4F9t1Cdc4EH5ce3/s+lFnIAdiR8thfn0IFMrFFb/iN8fcIaazcE8MNKyJLJyzPv0F19Kxco7lYv/0Wnq8YkwUQ==

2. ssh連接密碼信息阻礙問題解決方式

#!/bin/bash
for ip in 7 31 41
do
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.$ip"
done
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章