运维基本功(十六):远程管理SSH服务
本文是在課程課件基礎上修改的學習筆記
課程原地址: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、任務要求
3、任務拆解
- 禁止root用戶遠程登錄
- 更改默認端口(22=>10086)
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/serivces4、常見的網絡服務
- 文件共享服務:FTP、SMB、NFS
- 域名管理服務:DNS
- 網站服務:Apache(httpd)、Nginx、Lighttpd、IIS
- 郵件服務: Mail
- 遠程管理服務:SSH、telnet
- 動態地址管理服務:DHCP
5、SSH服務概述
? 熟悉Linux的人那肯定都對SSH不陌生。ssh是一種用于安全訪問遠程服務器的協議,遠程管理工具。它之所以集萬千寵愛為一身,就是因為它的安全性。那么它到底是怎么樣來保證安全的呢?到底是如何工作的呢?
? 首先,在講SSH是如何保證安全的之前,我們先來了解以下幾個密碼學相關概念:
1、加密算法
①對稱加密算法(DES)
總結:
②非對稱加密算法(RSA)
總結:
-
對稱加密算法與非對稱加密算法區別
- 對稱加密
- 使用同一個密鑰進行加密和解密,密鑰容易泄露
- 加密速度快,效率高,數據傳輸速度快,安全性較低
- 非對稱加密
- 使用不同的密鑰(公鑰和私鑰)進行加密和解密
- 加密速度遠遠慢于對稱加密,數據傳輸速度慢,安全性較高
問: 了解了加密算法,那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 sshd7、任務解決方案
- 環境準備
| 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.100Tip:
更改客戶端配置文件,不想驗證指紋
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
- 常見參數
2、scp客戶端工具
- 命令解釋:
cp 本地文件的復制
scp 遠程文件的復制
- 業務需求:
①在服務器A上將本地文件復制到遠程服務器B
②在服務器A上將遠程服務器B的文件復制到本地
這里以服務器A為操作服務器
- 解決方案
使用scp工具 注意這只是其中之一解決方案
- 使用方法
- 參數說明
3、pwgen常見參數使用
- 命令的使用
- Eg.1:生成長度為10,包含大寫、數字、不包含模糊字符完全隨機的3個密碼
4、踢出用戶
# 查看當前在線用戶 w# 斷開ssh客戶端連接 # pkill -kill -t pts/15、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 NetworkManagerRealServer網卡配置
把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 network6、openssh軟件的安裝
SSH服務底層的軟件名稱叫做openssh,open開源,ssh就是ssh服務。openssh屬于C/S架構軟件,其擁有客戶端與服務器端。
客戶端:ssh
服務端:openssh-server
安裝步驟:
# yum install openssh -y檢查openssh是否安裝成功
# rpm -qa |grep openssh 或 # yum list installed |grep openssh獲取openssh生成的文件列表
# rpm -ql openssh-server# 配置文件 /etc/ssh/sshd_config => ssh服務的主配置文件 /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 # 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查看并修改ssh服務端的配置文件
# man 5 sshd_configRealServer:禁止root賬號遠程登錄
# man 5 sshd_config PermitRootLogin => yes or no,默認為yes 代表允許通過root賬號遠程登錄此服務器 # vim /etc/ssh/sshd_config 38行 PermitRootLogin nosshd服務管理
# systemctl restart sshd => 重啟 # systemctl status sshd => 狀態 # systemctl stop sshd => 停止 # systemctl start sshd => 啟動# systemctl enable sshd => 開機自啟動 # systemctl disable sshd => 開機不自啟# ps -ef |grep sshd => 進程 或 # netstat -tnlp |grep sshd => 端口 或 # ss -naltp |grep sshd # 經驗值SSH服務作為目前Linux遠程連接服務。采用SSL加密方式,啟到了不錯的安全作用。學習好SSH服務,是之后連接管理遠程服務的基本操作。老師之前管理公司機房的服務器的時候,安裝完系統,第一件事情就是開啟ssh服務。還會做以下操作:① 修改默認端口 可以避免一些自動腳本測試連接② 免密登錄 方便直接連接,避免泄露密碼。只需添加需要操作人的公鑰即可總結
以上是生活随笔為你收集整理的运维基本功(十六):远程管理SSH服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的世界java服务器怎么加材质包_我的
- 下一篇: 记一次百万数据excel导入数据库的处理