共计 2718 个字符,预计需要花费 7 分钟才能阅读完成。
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
,比方笔者的本机内网ip
为192.168.1.7
,批改为:
AllowUser testuser@192.168.1.7
这样其余 ip
就不能登录了。
5.3 禁用特定用户登录
DenyUser testuser
禁止通过 testuser
登录。
相似的配置还有 AllowGroups
与DenyGroups
。
6 明码
6.1 禁用(空)明码登录
PermitEmptyPasswords no
PasswordAuthentication 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 3072
的544
个字符,Ed25519
只有68
个字符 - 更快:生成速度比
RSA
快,同时签名速度也比RSA
快 - 更平安:签名过程不依赖随机数生成器,不依赖哈希函数的防碰撞个性,没有工夫通道攻打的问题
生成形式很简略:
ssh-keygen -a 100 -t ed25519 -f ~/.ssh/ed25519
参数阐明如下:
-a
:指定KDF
(Key Derivation Function
)的轮数-t
:指定算法,可选dsa
、ecdsa
、ecdsa-sk
、ed25519
、ed25519-sk
、rsa
-f
:指定地位
生成之后复制公钥即可:
ssh-copy-id user@ip -i ~/.ssh/ed25519.pub
8.2 私钥明码
比方按上述形式生成密钥对时,会提醒输出私钥明码:
这里的明码会在应用私钥连贯的时候提醒:
8.3 应用不同密钥对
假如您有多台服务器:server1
,server2
,server3
,则能够为不同服务器应用不同的密钥对,而不是应用同一个密钥对:
ssh-keygen -a 100 -t ed25519 -f ~/.ssh/server1
ssh-keygen -a 100 -t ed25519 -f ~/.ssh/server2
ssh-keygen -a 100 -t ed25519 -f ~/.ssh/server3
接着复制公钥到对应的服务器上:
ssh-copy-id user@server1 -i ~/.ssh/server1.pub
ssh-copy-id user@server2 -i ~/.ssh/server2.pub
ssh-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/server1
ssh-add ~/.ssh/server1
ssh-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