本文是在課程課件基礎上修改的學習筆記
課程原地址:https://www.bilibili.com/video/BV1nW411L7xm
如有侵刪
運維基本功(一):Linux系統安裝
運維基本功(二):Linux基本命令
運維基本功(三):Linux檔案管理
運維基本功(四):Linux檔案管理-Vim編輯器概述
運維基本功(五):Linux檔案管理-用戶管理
運維基本功(六):Linux用戶管理-遠程管理
運維基本功(七):Linux的權限管理操作
運維基本功(八):Linux自有服務與軟體包管理
運維基本功(九): Linux自有服務-防火墻&計劃任務
運維基本功(十): Linux計劃任務以及行程檢測與控制
運維基本功(十一): LAMP專案部署實戰
運維基本功(十二): Linux命令回顧與擴展
運維基本功(十三): 再談用戶組管理
運維基本功(十四):Linux下yum源配置實戰
運維基本功(十五):Linux系統優化基礎
運維基本功(十六):遠程管理SSH服務
一、場景引入
1、任務背景
為了最大程度的保護公司內網服務器的安全,公司內部有一臺服務器做跳板機(跳板機(Jump Server),也稱堡壘機,是一類可作為跳板批量操作遠程設備的網路設備,是系統管理員或運維人員常用的操作平臺之一),運維人員在維護程序中首先要統一登錄到這臺服務器,然后再登錄到目標設備進行維護和操作,由于開發人員有時候需要通過跳板機登錄到線上生產環境查看一些業務日志,所以現在需要運維人員針對不同的人員和需求對賬號密碼進行統一管理,并且遵循權限最小化原則,

2、任務要求
- 跳板機上為每個開發人員創建一個賬號,并且只能在指定的目錄里管理自己的檔案,
- 線上生產服務器,禁止使用root用戶遠程登錄,
- 線上生產服務器sshd服務不允許使用默認埠,防止自動腳本攻擊默認埠,
- 線上生產服務器上開發人員使用的賬號code用戶的密碼使用工具隨機生成,
3、任務拆解
- 跳板機上為開發人員創建用戶及公共目錄供開發人員使用,并做好權限控制
- 所有線上生產服務器搭建ssh服務
- 對于ssh服務根據需求進行配置
- 禁止root用戶遠程登錄
- 更改默認埠(22=>10086)
- 線上生產服務器創建code用戶,并安裝工具來生成隨機密碼

4、涉及知識點
- 用戶權限管理(舊知識點)
- ssh服務配置(新知識點)
- 生成隨機密碼工具(新知識點)
二、理論儲備
1、什么是服務
- 運行在作業系統后臺的一個或者多個程式,為系統或者用戶提供特定的服務
- 可靠的,并發的,連續的不間斷的運行,隨時接受請求
- 通過互動式提供服務
2、服務架構模型
1、B/S架構
- B/S(browser/server) 瀏覽器/服務器
概念:這種結構用戶界面是完全通過瀏覽器來實作,使用http協議
優勢:節約開發成本

2、C/S架構
- C/S(client/server)客戶端/服務器
概念:指的是客戶端和服務端之間的通信方式,客戶端提供用戶請求介面,服務端回應請求進行對應的處理,并回傳給客戶端
優勢:安全性較高,一般面向具體的應用

3、兩者區別
B/S:
1、廣域網,只需要有瀏覽器即可
2、一般面向整個互聯網用戶,安全性低
3、維護升級簡單
C/S:
1、專用網路、小型局域網,需要具體安裝對應的軟體
2、一般面向固定用戶,安全性較高
思考:C/S B/S哪種更好呢?
思考1:
我們通過網路是如何找到我們想要訪問的服務的?
IP(提供服務的服務器)+Port(找到相應的服務)
3、埠號設定
說明:埠號只有整數,范圍是從0 到65535
? 1~255:一般是知名埠號,如:ftp 21號、web 80、ssh 22、telnet 23號等
? 256~1023:通常都是由Unix系統占用來提供特定的服務
? 1024~5000:客戶端的臨時埠,隨機產生
? 大于5000:為互聯網上的其他服務預留
思考2:
如何查看系統默認的注冊埠?
/etc/serivces
4、常見的網路服務
- 檔案共享服務:FTP、SMB、NFS
- 域名管理服務:DNS
- 網站服務:Apache(httpd)、Nginx、Lighttpd、IIS
- 郵件服務: Mail
- 遠程管理服務:SSH、telnet
- 動態地址管理服務:DHCP
5、SSH服務概述
? 熟悉Linux的人那肯定都對SSH不陌生,ssh是一種用于安全訪問遠程服務器的協議,遠程管理工具,它之所以集萬千寵愛為一身,就是因為它的安全性,那么它到底是怎么樣來保證安全的呢?到底是如何作業的呢?
? 首先,在講SSH是如何保證安全的之前,我們先來了解以下幾個密碼學相關概念:
1、加密演算法
①對稱加密演算法(DES)

- Jack想要給Harry發送資訊一個資訊A,為了安全起見,Jack使用一種加密演算法,比如給資訊通過加一個數字B得到一個新的數字C,然后以公開的方式發送給Harry
- Harry接受到數字C后,通過減去一個數字B得到最終的真正的資訊A
- Jack發送給Harry的資訊A稱為明文;加密后的資訊C稱為密文;加密用的B稱之為密鑰
- 加密演算法(方法)可以很復雜,不一定是加和減,也可以是乘和除等等
- 以上程序中,加密和解密的秘鑰是同一個密鑰B
總結:
- 發送方使用密鑰將明文資料加密成密文,然后發送出去
- 接收方收到密文后,使用同一個密鑰將密文解密成明文進行讀取
②非對稱加密演算法(RSA)

- 首先Harry生成一對有相互關系的密鑰對,比如e(公鑰)和f(私鑰);其中公鑰是可以公開給所有人的,私鑰必須Harry本人私自留存,不得泄露,
- 當Jack發送請求時,Harry會把自己的公鑰e發送給Jack
- Jack拿著Harry的公鑰e通過一種加密演算法將資訊A加密成密文C,以公開的方式發送給Harry
- Harry收到密文C后,通過自己本地留存的私鑰f將密文解密成最終的資訊A
- 以上程序中,加密使用的是公鑰e,解密使用的是私鑰f;使用不同的秘鑰加解密
總結:
- 發送方使用接收方發送過來的公鑰將明文資料加密成密文,然后發送出去
- 接收方收到密文后,使用自己本地留存的私鑰將密文解密成明文進行讀取
-
對稱加密演算法與非對稱加密演算法區別
- 對稱加密
- 使用同一個密鑰進行加密和解密,密鑰容易泄露
- 加密速度快,效率高,資料傳輸速度快,安全性較低
- 非對稱加密
- 使用不同的密鑰(公鑰和私鑰)進行加密和解密
- 加密速度遠遠慢于對稱加密,資料傳輸速度慢,安全性較高
- 對稱加密
問: 了解了加密演算法,那SSH到底是如何保證資料安全的呢?
答:SSH服務有兩種認證方式,分別是基于用戶名密碼認證和密鑰對認證
2、SSH基于用戶名密碼認證原理

-
SSH客戶端向SSH服務端發起一個登錄請求
-
SSH服務端將自己的公鑰發送給SSH客戶端
注意:如果是第一次訪問,則提示以下內容:
# ssh遠程登錄操作 首次 ssh 192.168.19.101 # 顯示結果 # 無法確認主機的真實性 The authenticity of host '192.168.19.101 (192.168.19.101)' can't be established. ECDSA key fingerprint is SHA256:Y/cQNWWkX15o2MsJ5HOQBI2m8S33qIA+x3zys8J4pOY. ECDSA key fingerprint is MD5:76:61:86:8b:d5:ee:bf:9c:60:e6:12:fa:f6:f0:74:36. Are you sure you want to continue connecting (yes/no)?yes Warning: Permanently added '192.168.19.101' (ECDSA) to the list of known hosts. #說明: #當客戶端輸入yes確認對方的公鑰指紋后,server端的公鑰就會被存放到客戶機的用戶家目錄里~/.ssh/known_hosts檔案中,下次再訪問就直接通過密碼登錄,不需要再確認公鑰, -
SSH客戶端使用服務端發過來的公鑰將自己的密碼加密并且發送給SSH服務端
-
SSH服務端收到SSH客戶端發過來的加密密碼后使用本地留存的私鑰進行解密
-
SSH服務端將解密出來的密碼和
/etc/shadow檔案里的用戶密碼對比認證 -
SSH服務端認證成功,則回傳登錄成功結果,并發送一個隨機會話口令給客戶端,該口令用于后面兩臺主機進行資料傳輸的一個臨時加密會話口令
3、 SSH介紹總結
- SSH是Linux下遠程管理的工具,相比Telnet安全,運維人員必備的神器!
- SSH的全稱Secure Shell,安全的shell,是Client/Server架構,默認埠號為22,TCP協議
- SSH其實用于商業,而OpenSSH即為開源的,在Linux中默認安裝
6、SSH服務配置
1、搭建所有服務的思路
- 關閉防火墻和selinux(實驗環境都先關閉掉)
- 配置yum源(公網源或者本地源)
- 軟體安裝和檢查
- 了解并修改組態檔
- 啟動服務檢查運行狀態并設定開機自啟動
2、搭建SSH服務
(一)關閉防火墻和selinux
# 關閉firewalld防火墻
# 臨時關閉
systemctl stop firewalld
# 關閉開機自啟動
systemctl disable firewalld
# 關閉selinux
# 臨時關閉
setenforce 0
# 修改組態檔 永久關閉
vim /etc/selinux/config
SELINUX=disabled
(二)配置yum源
注意:一般情況下使用網路源即可,如果沒有網路的情況下,才需要配置本地源
? 【配置開始】
①掛載鏡像光碟
# 建立光碟掛載目錄檔案夾
mkdir /dvd
# 手動掛載光碟
mount /dev/sr0 /dvd
# lsblk查看是否掛載成功 查看mount點或者查看掛載到的目錄內容
# 添加到開啟加載腳本 開機自動掛載光碟
echo "mount /dev/sr0 /dvd" >> /etc/rc.local
②配置本地yum源
cd /etc/yum.repos.d
mkdir bak
#移動默認源 備份并使其失效
mv ./* ./bak
#按照掛載光碟位置,配置光碟源
cd bak
cp CentOS-Media.repo ../
vim CentOS-Media.repo
#修改檔案第16行,修改為光碟掛載點/dvd/即可,修改第20行,開啟源使用
14 [c7-media]
15 name=CentOS-$releasever - Media
16 baseurl=file:///dvd/
17 file:///media/cdrom/
18 file:///media/cdrecorder/
19 gpgcheck=1
20 enabled=1
21 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
22
? 【配置結束】
(三)軟體安裝
①確認是否安裝
rpm -qa|grep openssh
查詢結果
# 服務端和客戶端的公共組件
openssh-7.4p1-16.el7.x86_64
# 客戶端安裝包
openssh-clients-7.4p1-16.el7.x86_64
# 服務端安裝包
openssh-server-7.4p1-16.el7.x86_64
②查看openssh-server軟體包的檔案串列
rpm -ql openssh-server
查詢結果
# 組態檔
/etc/ssh/sshd_config
/etc/sysconfig/sshd
# 服務管理腳本
/usr/lib/systemd/system/sshd.service => systemctl start sshd
# 檔案共享服務 提供檔案上傳下載的服務
/usr/libexec/openssh/sftp-server
# 二進制檔案程式檔案
/usr/sbin/sshd
# 公鑰生成工具
/usr/sbin/sshd-keygen
# man手冊
/usr/share/man/man5/sshd_config.5.gz
/usr/share/man/man8/sftp-server.8.gz
/usr/share/man/man8/sshd.8.gz
③查看openssh-clients軟體包的檔案串列
rpm -ql openssh-clients
查詢結果
# 客戶端組態檔
/etc/ssh/ssh_config
# 遠程copy命令 服務器間進行檔案傳輸
/usr/bin/scp
# sftp客戶端 上傳下載檔案操作
/usr/bin/sftp
/usr/bin/slogin
/usr/bin/ssh
/usr/bin/ssh-add
/usr/bin/ssh-agent
/usr/bin/ssh-copy-id
/usr/bin/ssh-keyscan
# 客戶端man手冊
/usr/share/man/man1/scp.1.gz
/usr/share/man/man1/sftp.1.gz
/usr/share/man/man1/slogin.1.gz
/usr/share/man/man1/ssh-add.1.gz
/usr/share/man/man1/ssh-agent.1.gz
/usr/share/man/man1/ssh-copy-id.1.gz
/usr/share/man/man1/ssh-keyscan.1.gz
/usr/share/man/man1/ssh.1.gz
/usr/share/man/man5/ssh_config.5.gz
/usr/share/man/man8/ssh-pkcs11-helper.8.gz
(四)查看了解并修改組態檔
# man 5 sshd_config
需求:禁止root用戶遠程登錄
vim /etc/ssh/sshd_config
# 打開檔案第38行 修改以下內容
#PermitRootLogin yes
PermitRootLogin no
(五)服務管理
# 重啟服務
systemctl restart sshd
# 查看狀態
systemctl status sshd
# 行程查看方式
ps aux |grep sshd
# 埠查看方式
netstat -lntp|grep sshd
# 開啟自啟動
systemctl enable sshd
7、任務解決方案
- 環境準備
| IP地址 | 主機名稱 | 服務器角色 |
|---|---|---|
| 192.168.19.100 | jumpserver | 跳板機 |
| 192.168.19.101 | realserver | 真實業務服務器 |
1、創建用戶并授權
公司的開發測驗服務器,有多個團隊使用:
①html 前端組 jerry tom
②server 后端組 xiaoming xiaoqiang
③app 手機軟體組 rose xiaohong
注意:在跳板機完成用戶創建及其授權
(一)用戶和用戶組創建
①添加用戶組
groupadd html
②添加用戶到用戶組中
useradd jerry -g html
useradd tom -g html
(二)使用非互動式設定密碼
echo 123456|passwd --stdin jerry
echo 123456|passwd --stdin tom
(三)為開發人員創建資料目錄并且設定相應的權限
mkdir -p /code/html
# 查看默認權限
cd /
ll -d /code/html
# 查詢結果
drwxr-xr-x. 2 root root 6 3月 21 23:16 /code/html
# 修改所屬組
chgrp html /code/html
# 增加組 寫權限
chmod g+w /code/html
# 查看默認權限
ll -d /code/html
# 查詢結果
drwxrwxr-x. 2 root html 6 3月 21 23:16 /code/html
# 設定粘滯位 其它用戶不允許洗掉不屬于它的目錄和檔案
chmod 1700 /code/html
# 查看默認權限
ll -d /code/html
# 查詢結果
drwxrwx--T. 2 root html 6 3月 21 23:16 /code/html
(四)測驗環境用戶環境和權限
測驗用戶權限是否設定成功,可以結合第(三)步一起完成
2、禁止root遠程登錄
注意:在生產服務器server端完成
參見上面sshd的組態檔的操作
3、更改默認埠
需求:防止掃IP使用默認埠暴力破解(一次一次試),故將默認埠更改為:3721
(一)確定當前服務器埠沒有被占用
netstat -lntp|grep 3721
# 或者
ss -nalp|grep 3721
# 或者
lsof -i :3721
(二)修改組態檔
vim /etc/ssh/sshd_config
# 找到檔案第13行添加以下內容
# Port 22
Port 3721
(三)重啟服務
systemctl restart sshd
# 或者
systemctl reload sshd
(四)測驗驗證
ssh @192.168.19.100
ssh: connect to host 192.168.19.100 port 22: Connection refused
#原因:埠號不對
#解決:指定埠 -p引數
ssh -p 3721 jerry@192.168.19.100
Tip:
更改客戶端組態檔,不想驗證指紋vim /etc/ssh/ssh_config #StrictHostKeyChecking ask StrictHostKeyChecking no
4、用戶密碼隨機
注意:在線上生產環境中創建一個開發人員專用的賬號
思路:
1、在線上生成環境,創建公共賬號(開發人員)
2、安裝隨機密碼生成工具pwgen
3、使用pwgen工具生成隨機密碼
4、給賬號設定密碼
(一)創建用戶
useradd code
(二)安裝pwgen
pwgen軟體需要配置epel源安裝
①配置epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
②安裝pwgen
yum install -y pwgen
(三) 生成隨機密碼
pwgen
(四)設定用戶密碼
echo 上面生成的密碼選一個 |passwd --stdin code
擴展
1、ssh客戶端工具
- 查看引數和幫助方法
ssh --help
man ssh
- 常見引數
# 指定連接用戶
-l
# ssh 192.168.19.101 -l jerry 相當于 ssh jerry@192.168.19.101
# 指定連接埠
-p
# 默認以當前機器用戶身份登錄,或者連接時指定用戶身份
2、scp客戶端工具
- 命令解釋:
cp 本地檔案的復制
scp 遠程檔案的復制
- 業務需求:
①在服務器A上將本地檔案復制到遠程服務器B
②在服務器A上將遠程服務器B的檔案復制到本地
這里以服務器A為操作服務器

- 解決方案
使用scp工具 注意這只是其中之一解決方案
- 使用方法
# scp 本地路徑 遠程路徑
scp jerry.html jerry@192.168.19.100:/home/jerry/
# scp 遠程路徑 本地路徑
scp jerry@192.168.19.100:/home/jerry/tom.html ./
- 引數說明
# 遞回拷貝目錄
-r
# 指定遠程服務器的埠
-P
3、pwgen常見引數使用
- 命令的使用
pwgen --help
# 用法: pwgen 選項引數 長度 生成個數
Usage: pwgen [ OPTIONS ] [ pw_length ] [ num_pw ]
# 密碼中至少包含一個大寫字母
-c or –capitalize
# 密碼中不包含大寫字母
-A or –no-capitalize
# 密碼中至少包含一個數字
-n or –numerals
# 密碼中不包含數字
-0 or –no-numerals
# 密碼中至少包含一個特殊符號
-y or –symbols
# 生成完全隨機密碼
-s or –secure
# 密碼中不包含歧義字符(例如1,l,O,0)
-B or –ambiguous
# 使用SHA1 hash給定的檔案作為一個隨機種子
-H or –sha1=path/to/file[#seed]
# 在列中列印生成的密碼
-C
# 不要在列中列印生成的密碼,即一行一個密碼
-1
# 不要使用任何元音,以避免偶然的臟話
-v or –no-vowels
- Eg.1:生成長度為10,包含大寫、數字、不包含模糊字符完全隨機的3個密碼
pwgen -cnBs1 10 3
4、踢出用戶
# 查看當前在線用戶
w
# 斷開ssh客戶端連接
# pkill -kill -t pts/1
5、VMware中的三種網路

由上圖可知:在VMware中,一共存在3種網路模式,
| 選擇網路連接屬性 | 意義 |
|---|---|
| Use bridged networking(使用橋接網路) | 使用(連接)VMnet0虛擬交換機,此時虛擬機相當于網路上的一臺獨立計算機,與主機一樣,擁有一個獨立的IP地址 |
| Use network address translation(NAT)(使用NAT網路) | 使用(連接)VMnet8虛擬交換機,此時虛擬機可以通過主機單向訪問網路上的其他作業站(包括Internet網路),其他作業站不能訪問虛擬機 |
| Use Host-Only networking(僅主機網路) | 使用(連接)VMnet1虛擬交換機,此時虛擬機只能與虛擬機、主機互連,與網路上的其他作業站不能訪問 |
VMnet0 橋接模式 : 和物理真機連接在同一交換機,相當于系統與Windows處于同一個網段
① 與物理真機同網段,如192.168.43.X
② 橋接模式可以連接外網(有網路)
橋接模式中,Linux系統就相當于一臺獨立的計算機,與Windows物理真機處于同一個網路環境中,

VMnet1 僅主機模式:封閉的網路環境,僅能與Windows物理真機進行連接,無法連接外網
① 與物理真機不在同一個網段,擁有獨立的IP網段
② 僅主機模式僅能用于內部連通(VMware=>JumpServer、RealServer)
③ 僅主機模式無法連接外網

VMnet8 NAT模式:相當于一個獨立的網路環境,與物理真機不處于同一個網段,但是其可以通過虛擬網路路由器(NAT地址轉化)連接外網,
① 與物理真機不在同一個網段,擁有獨立的IP網段
② 不僅可以進行內部連接(VMware=> CentOS6、CentOS7)
③ 擁有一個虛擬的路由器(NAT設備)可以讓我們虛擬機連接到外網環境

4、靜態IP配置
JumpServer網卡配置
給JumpServer配置兩張網卡(NAT模式 + 僅主機模式)

添加僅主機模式網卡:

重啟network網路,然后使用ifconfig獲取僅主機模式的網卡資訊,
# systemctl restart network
# ifconfig

由上圖可知,僅主機模式的網卡為ens37,NAT模式網卡為ens33,遇到一個問題,ens37這張網卡沒有組態檔:
# cd /etc/sysconfig/network-scripts/
# ls
添加ens37組態檔:
# cp ifcfg-ens33 ifcfg-ens37
# vim ifcfg-ens37
TYPE="Ethernet"
BOOTPROTO="none"
IPADDR=11.1.1.10
NETMASK=255.255.255.0
NAME="ens37"
DEVICE="ens37"
ONBOOT="yes"
重啟計算機網路:
# systemctl restart network
關閉NetworkManager
Linux圖形化界面中的網路管理器,有些時候我們設定了靜態IP,但是重啟網路后,其并沒有生效或者和你設定的IP地址不一致,很可能是由于NetworkManager工具的影響,
# systemctl stop NetworkManager
# systemctl disable NetworkManager
RealServer網卡配置
把NAT模式的網卡更改為僅主機模式,然后設定一個靜態IP地址,

由于現在只有一張網卡,所以僅主機模式對應的網卡為ens33,配置:
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO="none"
IPADDR=11.1.1.100
NETMASK=255.255.255.0
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
設定完成后,重啟計算機網路
# systemctl stop NetworkManager
# systemctl disable NetworkManager
# systemctl restart network
經驗值
SSH服務作為目前Linux遠程連接服務,采用SSL加密方式,啟到了不錯的安全作用,學習好SSH服務,是之后連接管理遠程服務的基本操作,
老師之前管理公司機房的服務器的時候,安裝完系統,第一件事情就是開啟ssh服務,還會做以下操作:
① 修改默認埠 可以避免一些自動腳本測驗連接
② 免密登錄 方便直接連接,避免泄露密碼,只需添加需要操作人的公鑰即可
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/279362.html
標籤:其他
上一篇:JUC并發編程小總結
