1 概述

应用SSH连贯服务器是一件很平时的事,然而,连贯是否足够平安是一个令人担忧的问题。本文从如下几个方面介绍了如何建设一个足够平安的SSH连贯:

  • 端口
  • 协定
  • 用户
  • 明码
  • 密钥对
  • ssh-agent

2 端口

第一步就是批改默认端口22,批改/etc/ssh/sshd_config中的Port即可,比方这里批改为1234端口:

Port 1234

留神这里须要配合SELinu增加端口,否则不能启动sshd服务,在CentOS8中能够通过semanage增加端口,首先查看是否装置policycoreutils-python-utils

rpm -qa | grep policycoreutils-python-utils

如果没有装置就应用yum装置:

sudo yum install policycoreutils-python-utils

接着增加ssh端口:

sudo semanage port -m -t ssh_port_t -p tcp 1234

查看是否增加胜利:

sudo semanage port -l | grep ssh 

3 SSH协定

SSH2协定要比SSH1平安,因而倡议应用,同样批改配置文件:

Protocol 2 # 如果没有就开端增加

留神服务器增加Protocol 2后,客户端也须要在/etc/ssh/sshd_config中增加Protocol 2

4 超时断开

批改为60s未操作主动断开:

ClientAliveInterval 60 # 以秒为单位,超过60s未操作主动断开ClientAliveCountMax 0 # 如果客户端没有响应则判断一次超时,该参数设置容许超时的次数

5 限度用户

5.1 禁用Root用户登录

PermitRootLogin no

5.2 指定用户登录

AllowUsers testuser

这样只能通过ssh testuser@ip连贯到该服务器。

另外还能够为用户增加指定ip,比方笔者的本机内网ip192.168.1.7,批改为:

AllowUser testuser@192.168.1.7

这样其余ip就不能登录了。

5.3 禁用特定用户登录

DenyUser testuser

禁止通过testuser登录。

相似的配置还有AllowGroupsDenyGroups

6 明码

6.1 禁用(空)明码登录

PermitEmptyPasswords noPasswordAuthentication no

6.2 谬误次数

MaxAuthTries 6

默认为最多容许3次明码谬误(须要除2),批改为2则示意如果明码输出谬误一次即主动断开。

7 日志

LogLevel VERBOSE

默认为INFO,批改为VERBOSE能够失去更加具体的信息。

8 密钥对

8.1 生成密钥对

下面曾经设置了不能应用明码登录,那么,换句话说须要应用密钥登录,生成密钥并不难:

ssh-keygen -t rsa 

只须要指定算法即可,默认为3072位,可选4096位。

然而,相比起传统的RSA,在OpenSSH 6.5中引入了另一种叫Ed25519的更加平安的算法,应用椭圆曲线进行加密。Ed25519相比起RSA的长处有:

  • 体积更小:相比起RSA 3072544个字符,Ed25519只有68个字符
  • 更快:生成速度比RSA快,同时签名速度也比RSA
  • 更平安:签名过程不依赖随机数生成器,不依赖哈希函数的防碰撞个性,没有工夫通道攻打的问题

生成形式很简略:

ssh-keygen -a 100 -t ed25519 -f ~/.ssh/ed25519

参数阐明如下:

  • -a:指定KDFKey Derivation Function)的轮数
  • -t:指定算法,可选dsaecdsaecdsa-sked25519ed25519-skrsa
  • -f:指定地位

生成之后复制公钥即可:

ssh-copy-id user@ip -i ~/.ssh/ed25519.pub

8.2 私钥明码

比方按上述形式生成密钥对时,会提醒输出私钥明码:

这里的明码会在应用私钥连贯的时候提醒:

8.3 应用不同密钥对

假如您有多台服务器:server1server2server3,则能够为不同服务器应用不同的密钥对,而不是应用同一个密钥对:

ssh-keygen -a 100 -t ed25519 -f ~/.ssh/server1ssh-keygen -a 100 -t ed25519 -f ~/.ssh/server2ssh-keygen -a 100 -t ed25519 -f ~/.ssh/server3

接着复制公钥到对应的服务器上:

ssh-copy-id user@server1 -i ~/.ssh/server1.pubssh-copy-id user@server2 -i ~/.ssh/server2.pubssh-copy-id user@server3 -i ~/.ssh/server3.pub

9 ssh-agent

9.1 这是什么?

ssh-agent是一个程序,能够帮忙治理私钥。代理能提供如下用处:

  • 主动抉择密钥:应用不同密钥连贯到不同主机时,须要手动指定密钥(比方下面的应用不同密钥对的例子中,连贯到不同服务器时须要加上-i参数),ssh-agent能够主动抉择,不须要手动指定
  • 主动输出私钥明码:如果私钥设置了密钥(比方下面的私钥明码例子),然而又须要频繁地应用私钥进行认证时,ssh-agent能够帮忙主动输出私钥的明码

9.2 应用

首先启动:

eval `ssh-agent` # 留神是反引号

接着增加私钥:

# 以下面“应用不同的密钥对”为例ssh-add ~/.ssh/server1ssh-add ~/.ssh/server1ssh-add ~/.ssh/server1

这样连贯的时候就不须要手动指定-i参数了。

如果私钥指定了明码,会在ssh-add时进行提醒输出:

这样下次应用带密钥的私钥连贯时就不须要输出明码了。

10 2FA

Two-Factor Authentication,缩写2FA,意为双重认证双因子认证等等,顾名思义就是进行两步认证的操作,可选的利用有:

  • Google Authenticator
  • Authy
  • Yubico
  • Duo

比方Google Authenticator,装置之后,连贯服务器须要进行输出验证码的操作。

具体的话就不演示了,因为笔者须要常常连贯,因而这个选项对笔者来说不太理论,想要实现的话具体能够参考这里。

11 参考

  • 理解ssh代理:ssh-agent
  • 简书-SSH超时断开(ClientAliveInterval和ClientAliveCountMax )的应用
  • 应用两步验证(2FA)爱护你的SSH连贯
  • 10 Steps to Secure Open SSH
  • Secure The SSH Server On Ubuntu
  • Upgrade Your SSH Key to Ed25519