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),回复:领取学习资料。或者回复:进入技术交流群。网盘资料有如下:

在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值