ssh密鑰驗證
SSH遠程管理服務
1,定義
-
SSH是一種安全通道協議,是用來實現字符界面的遠程登陸,遠程複製等功能的,我們日常生活可以使用該功能來進行遠程操控,省去了很多麻煩。
-
SSH協議對通信雙方的數據進行了加密處理,其中包括用戶登陸時輸入的用戶口令。因此SSH協議具有很好的安全性。
2,SSH支持的客戶端和服務端
- SSH客戶端:Putty,Xshall,CRT
- SSH服務端:OpenSSH
3,配置文件
-
我們正在使用的centos7系統已經默認安裝openssh相關的軟件包,並且已經將sshd服務添加爲開機自啓。
-
執行“systemctl start sshd”命令即可啓動sshd服務
-
sshd服務默認使用的是TCP的22端口
-
sshd服務的默認配置文件爲/etc/ssh/sshd_config
注:ssh_config和sshd_config都是ssh服務器的配置文件前者是
針對客戶端的配置文件,後者則是針對服務器的配置文件下面是sshd_config的重要配置
Port 22 #監聽端口22
ListenAddress 0.0.0.0 #監聽地址爲任意網段,也可以指定OpenSSH服務器的具體IP
LoginGraceTime 2m #登陸驗證時間爲2分鐘
PermitRootLogin no #禁止root用戶登錄
MaxAuthTries 6 #最大重試次數爲6
PermitEmptyPasswords no #禁止空密碼用戶登錄
UseDNS no #禁止DNS反向解析,以提高服務器的響應速度
示例
#只允許zhaohua,muzi,用戶登錄,且其中muzi用戶僅能夠從ip地址爲192.168.199.30的主機遠程登陸
AllowUsers zhaohua [email protected] #多個用戶以空格分離
#禁止某些用戶登錄,用法和Allowusers類似(不要同時使用)
Denyusers zhaohua
SSHD服務驗證
兩種驗證方式
1.密碼驗證
最基本的對服務器中本地系統用戶的登錄名稱,密碼進行驗證。非常簡單,但容易被破解。所以我們不推薦如此使用。
2.密鑰對驗證
要求提供相匹配的密鑰信息才能通過驗證。通過先在客戶端中創建一對密鑰文件(公鑰,私鑰),然後將公鑰文件放到服務器中的之的指定位置。遠程登陸時,系統將公鑰,私鑰進行加密,解密關聯驗證。能增強安全性,並且還可以免交互登錄。
公鑰和私鑰的關係
- 公鑰和私鑰是成雙成對的,這兩個密鑰互不相同,可以互相加密和解密。
- 不能根據一個密鑰來推算出另一個密鑰
- 公鑰對外公開,私鑰只有私鑰的持有人才知道
當我們密碼驗證和密鑰對驗證都開啓時,優先使用密鑰對驗證。當然,我們也可以根據實際情況來進行設置驗證方式。
1.開啓密鑰和密碼驗證
PasswordAuthentication yes #啓用密碼驗證
PubkeyAuthentication yes #啓用密鑰對驗證
AuthorizedKeysFile .ssh/authorized_keys #指定公鑰庫文件
2.使用SSH客戶端程序
1,ssh遠程登陸
當用戶第一次登陸SSH服務器時,必須接受服務器發來的的ECDSA密鑰(根據提示輸入“yes”)然後再輸入密碼,驗證成功就可以登錄了。
命令
ssh 用戶@IP地址
例: ssh [email protected]
-p :指定非默認的端口號,缺省時默認使用22端口
3.scp遠程複製
- 下行復制
命令
scp [email protected]:/etc/locale.conf /root/sshfuzhi.txt
scp -r [email protected]:/etc/lvm /root/sshfuzhi.txt #複製目錄時需加-r,表示遞歸複製
- 上行復制
命令
scp -r /etc/ssh/ [email protected]:/opt
sftp(安全ftp)
因爲ssh使用了加密和解密技術,所以安全性比普通的FTP要高,但是傳輸速率要更低。
命令
sftp [email protected] #登錄到[email protected]
sftp> get [-r] 文件或目錄 文件保存位置(可缺省,缺省時代表複製到當前目錄) #當要傳輸目錄時,需要加入-r代表遞歸複製 ,將遠程主機的文件下載到我們的主機上
sftp>put [-r] #將我們本機的文件,上傳到遠程主機上
首先,我們先要登錄到遠程主機上面;
登陸後,我們可以利用ls查看對方的目錄,或者直接進行傳輸,將對方的an文件傳輸到我們的opt目錄。
或者使用put指令,將我們主機上面的文件傳輸到對方主機
上傳之後我們可以進行查詢,看看是否傳輸成功。
或者我們可以指定接收目錄,將我們的文件傳輸到該目錄
配置密鑰對驗證
1,在客戶端創建密鑰對
- 通過ssh-keygen工具爲當前用戶創建密鑰對文件。可用的加密算法爲RSA,ECDSA或DSA等(ssh-keygen命令的“-t”選項用於指定算法類型)
可以先建立一個admin用戶
useradd admin
echo "123123" | passwd --stdin admin
su -admin
然後再進行創建密鑰對
ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_ecdsa): #指定私鑰位置,可以直接回車代表使用默認位置
Created directory '/home/admin/.ssh'. #生成的私鑰,存放在宿主目錄中的隱藏目錄.ssh/下
Enter passphrase (empty for no passphrase): #設置私鑰的密碼
Enter same passphrase again: #確認輸入
2.查看密鑰位置
在配置完密鑰對之後,我們可以進行查看密鑰對來確認,密鑰對存放於.ssh中,通過以下命令可以進行查看
ls -l ~/.ssh/id_ecdsa*
-rw------- 1 admin admin 314 12月 9 15:10 /home/admin/.ssh/id_ecdsa
-rw-r--r-- 1 admin admin 189 12月 9 15:10 /home/admin/.ssh/id_ecdsa.pub
3.查看公鑰文本
cat authorized_keys #這時已經在.ssh/目錄下了,所以使用相對路徑
4.將公鑰文件上傳至服務器並且導入
後面我們就應該將公鑰導入服務器中,讓服務器與客戶端進行配對
ssh-copy-id -i id_ecdsa.pub [email protected] #可以直接在服務器的/home/zhao/.ssh/目錄中導入公鑰文本
5.最後進行密鑰驗證登錄
ssh [email protected] #使用密鑰對驗證
Enter passphrase for key '/home/admin/.ssh/id_ecdsa': #輸入私鑰的密碼
TCP Wrapper(訪問控制)
定義
- 將TCP服務程序“包裹”起來,代爲監聽TCP服務程序的端口,增加了一個安全檢測的過程,外來的連接請求必須先通過這層安全檢測,獲得許可後才能真正訪問對應的服務程序。
- 對於大多是的Linux發行版來說,TCP Wrappers 是默認提供的共嗯那個。
TCP Wrapper保護機制的兩種實現方式
- 1,直接使用tcpd程序對其他服務程序進行保護,需要運行tcpd程序
- 2,由其他網絡服務程序調用libwrap.so.*鏈接庫,不需要運行tcpd程序。此方式的應用更加廣泛,也更有效率。
TCP Wrapper的格式
<服務程序列表>:<客戶端地址列表>
(1)服務程序列表
ALL:代表所有的服務。
單個服務程序:如“vsftpd"。
多個服務程序組成的列表:如"vsftpd,sshd"。
(2)客戶端地址列表
ALL:代表任何客戶端地址。
LOCAL:代表本機地址。
多個地址以逗號分隔
允許使用通配符“*”和“?”,前者代表任意長度字符,後者僅代表一個字符
網段地址,如“192.168.199.”或者192.168.199.0/255.255.255.0
區域地址,如".benet.com”匹配benet.com域中的所有主機。
TCP wrappers 機制的基本原則:
基本策略
- 首先檢查/etc/hosts.allow文件,如果找到相匹配的策略,則允許訪問;
- 否則繼續檢查/etc/hosts.deny文件,如果找到相匹配的策略,則拒絕訪問;
- 如果檢查上述兩個文件都找不到相匹配的策略,則允許訪問。
常用情況
- "允許所有,拒絕個別”
只需在/etc/ hosts.deny文件中添加相應的拒絕策略 - ”允許個別,拒絕所有”
除了在/etc/hosts.allow中添加允許策略之外,還需要在/etc/hosts.deny文件中設置""ALL:ALL"的拒絕策略。
示例
比如我們在192.168.199.0網段中,我們只想讓192.168.199.20訪問192.168.199.30,需要做如下設置
先在/etc/hosts.allow設置只允許20IP通過
然後再在/etc/ hosts.deny中不允許所有網段通過
之後我們就發現10IP已經無法進入了,但20IP還是可以進入。