Linux shell 自動化修改SSH配置文件

SSH可以爲遠程登錄的會話和其他網絡服務提供安全性的協議。它是目前較可靠,是專爲遠程登錄會話和其他網絡服務提供安全性的協議。利用SSH協議可以有效防止遠程管理過程中的信息泄露問題,透過SSH可以對所有傳輸的數據進行加密,也能夠防止DNS欺騙和IP欺騙。

在實際開發當中我們一般在PC端安裝客戶端軟件連接SSH服務,常用工具爲(MobaXterm,Xshell,SecureCRT等)。因爲SSH是加密傳輸數據的,所以可以有效的遠程管理過程中的信息泄露。當然前提是配置正確的SSH服務,在/etc/ssh/sshd_config上默認有些配置是不合理,因此需要我們手動配置。

在這個過程中,因爲有大量的主機需要修改,是否可以考慮寫個自動化腳本,減少重複工作。使用腳本自動化完成重複的工作任務,纔是提升生產效率的核心。這纔是我們需要寫腳本的根本目的。

配置sshd_config文件

Centos7 系統中SSH服務端的默認配置文件是/etc/ssh/ssh_config,通過跳轉該配置文件中的參數可以讓我們的SSH服務更安全。

我們都知道SSH端口是22端口,通過Port參數修改該端口可以有效防止網絡上的大量掃射類的攻擊。

默認SSH服務會監聽整個計算機所有網卡IP端口,我們可以通過ListenAddress 參數可以設置其僅監聽特定的IP地址,如僅監聽內網的IP地址,可以減少被攻擊的可能性。ListenAddress 默認監聽所有地址。
cat /etc/ssh/sshd_config
在這裏插入圖片描述

SSH是允許超級管理員root遠程登錄,這對於線上服務器來說是非常危險的事情,可以通過PermitRootLogin參數的值可以禁止root登錄。

SSH支持多種遠程連接的賬戶認證方式,如:密碼認證,祕鑰等等。爲了防止泄露,我們可以配置GSSAPIAuthentication。

找到 GSSAPIAuthentication選項,如果沒有註釋,將其註釋
#GSSAPIAuthentication yes
添加
GSSAPIAuthentication no

在實際使用中用祕鑰認證更安全。

默認SSH會對遠程主機進行DNS的反向解析,這會浪費大量的時間,我們可以通過UseDNS參數禁止其查詢DNS服務器。

找到 UseDNS選項,如果沒有註釋,將其註釋
#UseDNS yes
添加
UseDNS no

設置用戶和組的白名單,或者用戶和組的黑名單分別可以配置AllowUsers、AllowGroups和DenyUsers、DenyGroups。不管是白名單還是黑名單,在限制用戶的同時可以限制用戶的來源。

想要了解跟多SSH配置文件,可以查看相關文檔哈。

自動化修改SSH配置文件

下面我們開始編寫腳本實現自動化修改SSH配置文件,有再多的服務器只要執行腳本都可完成配置的初始化工作。

#!/bin/bash

#功能:修改SSHD配置文件,提升SSH安全性

config_file="/etc/ssh/sshd_config"
PORT=12345

#將默認端口號修改爲自定義端口號

if grep -q "^Port" $config_file;then
   sed -i "/^Port/c Port $PORT" $config_file
else
   echo "Port $PORT" >> $config_file
fi

#禁止root遠程登錄SSH服務器

if grep -q "^PermitRootLogin" $config_file;then
   sed -i '/^PermitRootLogin/s/yes/no/' $config_file
else
   sed -i '$a PermitRootLogin no' $config_file
fi

#禁止使用密碼遠程登錄SSH服務器

if grep -q "^PasswordAuthentication" $config_file;then
   sed -i '/^PasswordAuthentication/s/yes/no/' $config_file
else
   sed -i '$a PasswordAuthentication no' $config_file
fi

#禁止X11圖形轉發功能
if grep -q "^X11Forwarding" $config_file;then
   sed -i '/^X11Forwarding/s/yes/no/' $config_file
else
   sed -i '$a X11Forwarding no' $config_file
fi
#禁止DNS查詢

if grep -q "^UseDNS" $config_file;then
   sed -i '/^UseDNS/s/yes/no/' $config_file
else
   sed -i '$a UseDNS no' $config_file
fi

在這裏插入圖片描述

總結

使用腳本自動化完成重複的工作任務,纔是提升生產效率的核心。這纔是我們需要寫腳本的根本目的。有再多的服務器只要執行腳本都可完成配置的初始化工作。這也是爲什麼寫本篇文章的原因!

在這裏插入圖片描述
歡迎關注公衆號【程序猿編碼】,添加本人微信號(17865354792),回覆:領取學習資料。或者回復:進入技術交流羣。網盤資料有如下:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章