sshd 服务端安全优化配置与免密登录

CentOS7自带的SSH服务是OpenSSH中的一个独立守护进程SSHD。由于使用telnet在网络中是明文传输所以用其管理服务器是非常不安全的不安全,SSH协议族可以用来对服务器的管理以及在计算机之间传送文件。
#### 一、配置文件
服务器配置文件 /etc/ssh/sshd_config

日志文件 /var/log/secure
#### 二、配置文件详解

Port    22                  #默认端口
ListenAddress IP            #监听服务器端的IP,ss -ntl 查看22端口绑定的iP地址
LoginGraceTime 2m           #登录时不输入密码时超时时间
HostKey                     # HostKey本地服务端的公钥路径
UseDNS no                   #禁止将IP逆向解析为主机名,然后比对正向解析的结果,防止客户端欺骗
PermitRootLogin yes         #是否允许root使用SSH远程登录
MaxAuthTries 6              #密码错误的次数6/2=3(MAN帮助中写明要除2)次后断开连接
MaxSessions 10              #最大的会话连接数(连接未登录的会话最大值,默认拒绝旧的连接未登录的会话)
StrictModes yes             #检查用户家目录中ssh相关的配置文件是否正确
PubkeyAuthentication yes    #是否使用基于key验证登录
AuthorizedKeysFile          .ssh/authorized_keys    #key验证登录的客户端公钥路径
PasswordAuthentication yes  #是否允许使用密码登录
PermitEmptyPasswords no     #用户使用空口令登录
GatewayPorts no             #启用网关功能,开启后可以将建立的SSH隧道(端口转发)共享出去
ChallengeResponseAuthentication no 关闭质疑-应答模式
ClientAliveCountMax 3       #探测3次客户端是否为空闲会话,↓3*10分钟后断开连接
ClientAliveInterval 10      #空闲会话时长,每10分钟探测一次
MaxStartups 10:30:100       #start:rate:full;当连接但为进行认证的用户超过10个,drop30%(rate/full)的连接当连接但未登录的连接达到100个后,新建立的连接将被拒绝
Banner /path/file           #认证前输出的登录提示信息,指定文件路径
GSSAPIAuthentication no 
AllowUsers username         #白名单,如果白名单有用户只有白名单的用户可以登陆
DenyUsers                  #黑名单,被拒绝的用户,如果即允许又拒绝则拒绝生效
AllowGroups                 #组白名单
DenyGroups                  #组黑名单

三、sed 快速修改配置

记住 先要备份 sshd_config 文件

[ ! -f /etc/ssh/sshd_config_bak ] && /bin/cp /etc/ssh/sshd_config{,_bak}

修改 ssh 远程访问端口 把 #Port 22 改为 Port 88888

sed -i 's/#Port .*/Port 88888/' /etc/ssh/sshd_config

禁止用户SSH空密码用户登录 PermitEmptyPasswords no

sed -i 's/#PermitEmptyPasswords no/PermitEmptyPasswords no/' /etc/ssh/sshd_config

对远程主机进行反向解析 禁用GSSAPI来认证,和DNS反向解析,加快SSH登陆速度

sed -i 's/^GSSAPIAuthentication yes$/GSSAPIAuthentication no/' /etc/ssh/sshd_config

禁止SSH反向解析 对远程主机进行反向解析,会减慢ssh连接速度

sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config

认证前输出的登录提示信息,指定文件路径

sed -i 's/#Banner none/Banner /path/file/' /etc/ssh/sshd_config

禁止root远程登录(NO) 并且允许root用户远程登录(YES)

sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config

是否允许使用密码登录。只能用 SSH 公钥自动验证登录 yes更改为no

sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

是不使用密钥建立 SSH 连接

sed -i 's/#RSAAuthentication .*/RSAAuthentication yes/' /etc/ssh/sshd_config

key验证登录的客户端公钥路径

sed -i 's/#AuthorizedKeysFile     .ssh/AuthorizedKeysFile     .ssh/' /etc/ssh/sshd_config

是否使用基于key验证登录

sed -i 's/#PubkeyAuthentication .*/PubkeyAuthentication yes/' /etc/ssh/sshd_config

开启秘钥认证

sed -i '/^#UsePAM no/a UsePAM no' /etc/ssh/sshd_config

start:rate:full;当连接但为进行认证的用户超过10个,
drop30%(rate/full)的连接当连接但未登录的连接达到100个后,新建立的连接将被拒绝

sed -i 's/#MaxStartups .*/MaxStartups 10:30:1000/' /etc/ssh/sshd_config

连接超时未10秒

sed -i '/^MaxStartups 10:30:1000/a LoginGraceTime 10m' /etc/ssh/sshd_config

连接但未登录的用户最大值为10

sed -i '/^LoginGraceTime 10m/a MaxSessions 10' /etc/ssh/sshd_config

尝试6次系统就断开连接

sed -i "s/#MaxAuthTries 6/MaxAuthTries 6/" /etc/ssh/sshd_config

SSH LogLevel设置为INFO,记录登录和注销活动

sed -i "s/#LogLevel INFO/LogLevel INFO/" /etc/ssh/sshd_config

#### 四、免密登录(基于KEY验证登录)
在客户端成功密钥对,然后将公钥复制到要免密登录的服务器即可。
:名称只能为 authorized_keys ,添加多个公钥信息可以直接追加 >> .ssh/authorized_keys

在 192.168.20.231 上操作 免密登录 192.168.20.232
一路按回车生成本地机器的密钥对,root位置在 /root/.ssh ,普通用户 admin 在 /home/admin/.ssh 下面

ssh-keygen -t rsa

运行上面命令后,系统会出现一系列提示,一路回车就可,运行结束以后,默认在/root/.ssh目录,普通用户在 /home/admin/.ssh 同时生成两个文件:
id_rsa:私钥
id_rsa.pub:公钥
.ssh文件夹赋权限 700

chown 0700 /home/admin/.ssh

实现本地免密登录,将 id_rsa.pub 中的内容拷贝到 authorized_keys

cat /home/admin/.ssh/id_rsa.pub >> /home/admin/.ssh/authorized_keys

设置普通用户家目录用户组权限 admin

chown admin.admin -R /home/admin/.ssh

用root先设置 authorized_keys; 的文件权限设置为 644,验证登录成功后在设置权限为600

chown 644 /home/admin/.ssh/authorized_keys

普通用户登录 将本地机器上公钥的文本直接copy到需要设置远程免密登录的服务器 ~/.ssh/authorized_keys,。

ssh-copy-id -i /home/admin/.ssh/id_rsa.pub -p 88888 admin@192.168.20.232

在这里输入yes,然后会提示输入 admin 远程登录密码

Are you sure you want to continue connecting (yes/no)? yes

验证登录远程主机

ssh -p '88888' 'admin@192.168.20.232'

注意:如果这里验证登录成功后,要把 authorized_keys; 的文件权限设置为 600

chown 600 /home/admin/.ssh/authorized_keys

SCP 上传

scp -r -P 88888 /home/admin/.ssh/id_rsa.pub admin@192.168.20.231:/home/admin/.ssh

SCP 下载

scp -r -P 88888 admin@192.168.20.231:/home/admin/.ssh/id_rsa.pub /home/admin/.ssh