博文目錄
1、SSH遠程管理
2、使用SSH客戶端程序
3、構建密鑰對驗證的SSH體系算法
SSH是一種安全通道協議,主要用來實現字符界面的遠程登陸、遠程複製等功能。SSH協議對通訊雙方的數據傳輸進行了加密處理,其中包括用戶登陸時輸入的用戶口令。與早期的Telent、RSH、RCP、等應用相比,SSH協議提供了更好的安全性。數據庫
在Centos 7.4系統中,OpenSSH服務器由openssh、openssh-server等軟件包提供(默認已安裝),並已將sshd添加爲標準的系統服務。執行「systemctl start sshd」命令便可啓動sshd服務,包括root在內的大部分用戶均可以遠程登陸系統。sshd服務的配置文件默認位於/etc/ssh/sshd_config目錄下,正確調整相關配置項,能夠進一步提升sshd遠程登陸的安全性。vim
sshd服務使用的默認端口號爲22,必要時建議修改此端口號,並指定監聽服務的具體IP地址,以提升在網絡中的隱蔽性。V2版本要比V1版本的安全性要更好,禁用DNS反向解析能夠提升服務器的響應速度。centos
[root@centos01 ~]# vim /etc/ssh/sshd_config <!--編輯sshd主配置文件--> 17 Port 22 <!--監聽端口爲22--> 19 ListenAddress 192.168.100.10 <!--監聽地址爲192.168.100.10--> 21 Protocol 2 <!--使用SSH V2協議--> 118 UseDNS no <!--禁用DNS反向解析--> ...... <!--此處省略部份內容--> [root@centos01 ~]# systemctl restart sshd <!--重啓sshd服務-->
sshd服務默認容許root用戶登陸,但在Internet中使用時是很是不安全的。關於sshd服務的用戶登陸控制,一般應禁止root用戶或密碼爲空的用戶登陸。另外,能夠限制登陸驗證的時間(默認爲2分鐘)及最大重試次數,若超過限制後仍未能登陸則斷開鏈接。安全
[root@centos01 ~]# vim /etc/ssh/sshd_config <!--編輯sshd主配置文件--> 37 LoginGraceTime 2m <!--登陸驗證時間爲2分鐘--> 38 PermitRootLogin yes <!--禁止root用戶登陸--> 40 MaxAuthTries 6 <!--最大重試次數爲6--> 67 PermitEmptyPasswords no <!--禁止空密碼用戶登陸--> ...... <!--此處省略部份內容--> [root@centos01 ~]# systemctl restart sshd <!--重啓sshd服務-->
對於服務器的遠程管理,除了用戶帳戶的安全控制之外,登陸驗證的方式也很是重要。sshd服務支持兩種驗證方式——密碼驗證、密鑰對驗證,能夠設置只使用其中一種方式,也能夠兩種方式都啓用。服務器
- 密碼驗證:對服務器中本地系統用戶的登陸名稱、密碼進行驗證。這種方式使用最爲簡便,但從客戶端角度來看,正在鏈接的服務器有可能被假冒;從服務器角度來看,當遭遇密碼窮舉第三者時防護能力比較弱。
- 密鑰對驗證:要求提供相匹配的密鑰信息才能經過驗證。一般先在客戶端中建立一對密鑰文件(公鑰、私鑰),而後將公鑰文件放到服務器中的指定位置。遠程登陸時,系統將使用公鑰,私鑰進行加密/解密關聯驗證,大大加強了遠程管理的安全性。該方式不易被假冒,且能夠免交互登陸,在Shell中被普遍使用。
當密碼驗證,密鑰對驗證都啓用時,服務器將優先使用密鑰對驗證。對於安全性要求較高的服務器,建議將密碼驗證方式禁用,只容許啓用密鑰對驗證方式;若沒有特殊要求,則兩種方式均可以啓用。網絡
[root@centos01 ~]# vim /etc/ssh/sshd_config <!--編輯sshd主配置文件--> 43 PubkeyAuthentication yes <!--啓用密鑰對驗證--> 47 AuthorizedKeysFile .ssh/authorized_keys <!--指定公鑰庫文件--> 66 PasswordAuthentication yes <!--啓用密碼驗證--> ...... <!--此處省略部份內容--> [root@centos01 ~]# systemctl restart sshd <!--重啓sshd服務-->
其中,公鑰文件用來保存多個客戶端上傳的公鑰文本,以便與客戶端本地的私鑰文件進行匹配。dom
在Centos 7.4系統中,OpenSSH客戶端由openssh-clients軟件包提供(默認已安裝),其中包括ssh遠程登陸命令,以及scp、sftp遠程複製和文件傳輸命令等。ssh
經過ssh命令能夠遠程登陸sshd服務,爲用戶提供一個安全的Shell環境,以便對服務器進行管理和維護。使用時應指定登陸用戶、目標主機地址做爲參數。示例以下:ide
[root@centos02 ~]# ssh root@192.168.100.10 root@192.168.100.10's password: Last login: Mon Nov 11 19:02:50 2019 from 192.168.100.254 [root@centos01 ~]# [root@centos01 ~]# [root@centos01 ~]# ssh root@192.168.100.10 The authenticity of host '192.168.100.10 (192.168.100.10)' can't be established. ECDSA key fingerprint is SHA256:PUueT9fU9QbsyNB5NC5hbSXzaWxxQavBxXmfoknXl4I. ECDSA key fingerprint is MD5:6d:f7:95:0e:51:1a:d8:9e:7b:b6:3f:58:51:51:4b:3b. Are you sure you want to continue connecting (yes/no)? yes <!--接受密鑰--> Warning: Permanently added '192.168.100.10' (ECDSA) to the list of known hosts. root@192.168.100.10's password: <!--輸入密碼--> Last login: Mon Nov 11 19:03:08 2019 from 192.168.100.20 [root@centos01 ~]# who <!--確認當前用戶--> root pts/1 2019-11-11 19:03 (192.168.100.20) root pts/2 2019-11-11 19:04 (192.168.100.10)
若是sshd服務器使用了非默認的端口(如2222),則在登陸時必須經過「-p」選項指定端口號。示例以下:
[root@centos01 ~]# vim /etc/ssh/sshd_config<!--修改ssh主配置文件--> Port 2222 <!--修改監聽端口號爲2222--> [root@centos01 ~]# systemctl restart sshd <!--重啓sshd服務--> [root@centos02 ~]# ssh -p 2222 root@192.168.100.10 <!--客戶端登陸ssh--> root@192.168.100.10's password: <!--輸入密碼--> Last login: Mon Nov 11 19:20:28 2019 from 192.168.100.10 [root@centos01 ~]# <!--成功登陸-->
經過scp命令能夠利用SSH安全鏈接與遠程主機相互複製文件,使用scp命令時,除了必須指定複製源、目標以外,還應指定目標主機地址、登陸用戶,執行後根據提示輸入驗證口令便可。示例以下:
[root@centos02 ~]# scp root@192.168.100.10:/etc/ssh/sshd_config ./ <!--將遠程主機數據複製到本地數據,保存在當前位置--> root@192.168.100.10's password: <!--輸入密碼--> sshd_config 100% 3910 3.6MB/s 00:00 [root@centos02 ~]# scp -r ./sshd_config root@192.168.100.10:/opt <!--將本地數據上傳到遠程主機目錄的opt中--> root@192.168.100.10's password: <!--輸入密碼--> sshd_config 100% 3910 1.2MB/s 00:00
經過sftp命令能夠利用SSH安全鏈接與遠程主機上傳、下載文件,採用了與FTP相似的登陸過程和交互環境,便於目錄資源管理。示例以下:
[root@centos01 ~]# cd /opt/ <!--進入opt目錄--> [root@centos01 opt]# sftp root@192.168.100.20 <!--登陸sftp--> root@192.168.100.20's password: <!--輸入密碼--> Connected to 192.168.100.20. sftp> pwd <!--查看客戶端登陸sftp的位置默認在宿主目錄--> Remote working directory: /root sftp> put sshd_config <!--上傳數據到遠程主機--> Uploading sshd_config to /root/sshd_config sshd_config 100% 3910 6.4MB/s 00:00 sftp> get sshd_config <!--下載數據到本地--> Fetching /root/sshd_config to sshd_config /root/sshd_config 100% 3910 3.6MB/s 00:00 sftp> exit <!--退出登陸-->
密鑰對驗證方式能夠遠程登陸提供更好的安全性。在Linux服務器、客戶端中構建密鑰對驗證SSH體系的基本過程。以下圖所示,整個過程包括四步,首先要在SSH客戶端以zhangsan用戶身份建立密鑰對,而且要將建立的公鑰文件上傳至SSH服務器端,而後要將公鑰信息導入服務器端的目標用戶lisi的公鑰數據庫,最後以服務器端用戶lisi的身份登陸驗證。
在客戶端中,經過ssh-keygen工具爲當前用戶建立密鑰對文件。可用的加密算法爲ECDSA或DSA(ssh-keygen命令的「-t」選項用於指定算法類型)。示例以下:
[root@centos02 ~]# ssh-keygen -t dsa <!--建立密鑰對--> Generating public/private dsa key pair. Enter file in which to save the key (/root/.ssh/id_dsa): <!--指定私鑰位置--> Created directory '/root/.ssh'. 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: SHA256:zv0EdqIuOfwSovN2Dkij08y9wZ0f1+IyhY7LFNKKzkk root@centos02 The key's randomart image is: +---[DSA 1024]----+ | | | | | | | . | | o . o S.+ . | | * *.+.=.+.= | |o E.*o+==.+ o | | =o..*Oo++ + | | ++oo+*+o. . | +----[SHA256]-----+ [root@centos02 ~]# ls -lh ~/.ssh/id_dsa* <!--確認生成的密鑰文件--> -rw------- 1 root root 668 11月 12 16:11 /root/.ssh/id_dsa -rw-r--r-- 1 root root 603 11月 12 16:11 /root/.ssh/id_dsa.pub
新生成的密鑰對文件中,id_das是私鑰文件,權限默認爲600,對於私鑰文件必須妥善保管,不能泄露給他人;id_dsa.pub是公鑰文件,用來提供給ssh服務器。
將上一步生成的公鑰文件上傳至服務器,並部署到服務器端用戶的公鑰數據庫中。上傳公鑰文件時能夠選擇SCP、FTP、HTTP甚至發送E-mail等任何方式。
root@centos02 ~]# ssh-copy-id -i ./.ssh/id_dsa.pub root@192.168.100.10 <!--將公鑰文件上傳至服務器並導入公鑰文本--> /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "./.ssh/id_dsa.pub" The authenticity of host '192.168.100.10 (192.168.100.10)' can't be established. ECDSA key fingerprint is SHA256:PUueT9fU9QbsyNB5NC5hbSXzaWxxQavBxXmfoknXl4I. ECDSA key fingerprint is MD5:6d:f7:95:0e:51:1a:d8:9e:7b:b6:3f:58:51:51:4b:3b. Are you sure you want to continue connecting (yes/no)? yes <!--輸入yes--> /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@192.168.100.10's password: <!--輸入密碼--> Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.100.10'" and check to make sure that only the key(s) you wanted were added.
當私鑰文件(客戶端)、公鑰文件(服務器)均部署到位之後,就能夠在客戶端中進行測試了。首先確認客戶端中當前的用戶爲root,而後經過ssh命令以服務器端用戶root的身份進行遠程登陸。若是密鑰對驗證方式配置成功,則在客戶端將會要求輸入私鑰短語,以便調用私鑰文件進行匹配(若未設置私鑰短語,則直接登入目標服務器)。
[root@centos02 ~]# ssh root@192.168.100.10 <!--登陸ssh服務器--> Last login: Tue Nov 12 16:03:56 2019 from 192.168.100.254 [root@centos01 ~]# who <!--登陸成功服務器,查看都有哪些用戶--> root pts/0 2019-11-12 17:35 (192.168.100.20) root pts/2 2019-11-12 16:03 (192.168.100.254)
—————— 本文至此結束,感謝閱讀 ——————