配置 SSH Key 实现无密码登录和安全加固

配置 SSH Key 实现无密码登录和安全加固

配置SSH Key实现无密码登录和安全加固,是提高 Linux 服务器安全性和操作效率的关键步骤。以下是从配置到加固的完整指南。

1. 什么是 SSH Key?

SSH Key 是一种基于公钥加密的身份验证方式。与传统的密码登录相比,SSH Key 更加安全,由于:

密钥对由一个私钥和一个公钥组成。

私钥保存在客户端,公钥存储在服务器。

私钥加密的内容只能由对应的公钥解密,确保身份验证的安全性。

2. 配置 SSH Key 实现无密码登录

2.1 生成 SSH Key

在客户端(本地电脑)生成密钥对:

bash

复制

ssh-keygen -t rsa -b 4096 -C “your_email@example.com”

-t rsa:指定加密算法(推荐使用 RSA 或 ed25519)。

-b 4096:指定密钥长度(RSA 推荐 4096 位)。

-C “your_email@example.com”:添加备注(方便管理密钥)。

生成过程提示:

系统会提示存储密钥文件的位置,默认保存为~/.ssh/id_rsa。

可以直接按回车使用默认路径,或自定义保存路径。

设置或跳过密钥的密码短语(提议设置,以增加安全性)。

示例输出:

复制

Generating public/private rsa key pair.Enter file in which to save the key (/home/username/.ssh/id_rsa):

2.2 将公钥上传到服务器

使用ssh-copy-id命令将公钥上传到目标服务器:

bash

复制

ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ip

~/.ssh/id_rsa.pub是生成的公钥文件。

username是服务器上的用户。

server_ip是服务器的 IP 地址。

如果服务器没有ssh-copy-id工具,可以手动复制公钥:

在客户端查看公钥内容:

bash

复制

cat ~/.ssh/id_rsa.pub

登录服务器,将公钥追加到~/.ssh/authorized_keys文件:

bash

复制

echo “公钥内容” >> ~/.ssh/authorized_keys

确保~/.ssh和~/.ssh/authorized_keys权限正确:

bash

复制

chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys

2.3 测试无密码登录

在客户端使用 SSH 登录服务器:

bash

复制

ssh username@server_ip

如果配置正确,将无需输入密码即可登录。

如果设置了密钥的密码短语,需输入该短语解锁私钥。

3. 安全加固 SSH 配置

无密码登录成功后,可以进一步优化 SSH 配置以提升安全性。

3.1 禁用密码登录

编辑服务器的 SSH 配置文件:

bash

复制

sudo nano /etc/ssh/sshd_config

修改以下参数:

ini

复制

PasswordAuthentication noChallengeResponseAuthentication noUsePAM no

PasswordAuthentication no:禁用密码登录。

UsePAM no:禁用基于 PAM 的认证。

重启 SSH 服务:

bash

复制

sudo systemctl restart sshd

3.2 更改默认 SSH 端口

编辑 SSH 配置文件:

bash

复制

sudo nano /etc/ssh/sshd_config

修改端口号(例如改为 2222):

ini

复制

Port 2222

重启 SSH 服务:

bash

复制

sudo systemctl restart sshd

连接时需指定新的端口:

bash

复制

ssh -p 2222 username@server_ip

3.3 限制允许登录的用户

编辑 SSH 配置文件:

bash

复制

sudo nano /etc/ssh/sshd_config

添加以下内容,只允许特定用户登录:

ini

复制

AllowUsers username1 username2

username1和username2是被允许的用户。

保存并重启 SSH 服务:

bash

复制

sudo systemctl restart sshd

3.4 禁用 Root 用户登录

在 SSH 配置文件中设置:

ini

复制

PermitRootLogin no

禁止直接使用root用户通过 SSH 登录。

重启 SSH 服务:

bash

复制

sudo systemctl restart sshd

3.5 启用防火墙并限制 SSH 访问

使用 UFW 配置防火墙(以端口 2222 为例):

bash

复制

sudo ufw allow 2222/tcpsudo ufw enable

仅允许特定 IP 地址访问:

bash

复制

sudo ufw allow from <trusted_ip> to any port 2222

3.6 启用 Fail2Ban 防护

Fail2Ban 是一个防止暴力破解的工具,可自动屏蔽多次失败的登录尝试。

安装 Fail2Ban:

bash

复制

sudo apt install fail2ban

配置 SSH 保护规则:

编辑/etc/fail2ban/jail.local:

ini

复制

[sshd]enabled = trueport = 2222maxretry = 5bantime = 3600

重启 Fail2Ban 服务:

bash

复制

sudo systemctl restart fail2ban

4. 密钥的管理与备份

4.1 私钥的安全存储

私钥应始终保存在本地,严禁上传到服务器或向外暴露。

使用密码短语加密私钥,防止丢失或被盗用。

4.2 定期更换 SSH 密钥

定期生成新的 SSH 密钥对,并替换旧的公钥。

旧密钥更换完成后,及时从服务器删除旧公钥。

4.3 授权多台客户端

如果需要从多台设备登录服务器,可以在~/.ssh/authorized_keys文件中添加多个公钥,每行一个。

5. 日常安全审计

5.1 查看 SSH 登录历史

检查最近的登录记录:

bash

复制

last

查看失败的登录尝试:

bash

复制

cat /var/log/auth.log | grep “Failed password”

5.2 检查活跃的 SSH 会话

查看当前登录的 SSH 会话:

bash

复制

who

5.3 设置登录警报

在~/.bashrc中添加以下内容,登录时发送邮件通知:

bash

复制

echo “SSH login: $(date) from $(who | awk {print $5} )” | mail -s “SSH Login Alert” your_email@example.com

6. 总结

通过配置 SSH Key 和安全加固,可以显著提高服务器的安全性。关键步骤包括:

生成并配置 SSH Key,实现无密码登录。

禁用密码登录,减少暴力破解的风险。

修改默认端口和限制访问,降低暴露面。

启用防火墙和 Fail2Ban,防止恶意攻击。

定期审计和备份密钥,确保密钥和服务器的长期安全。

按照以上实践,可以有效保护服务器免受未经授权的访问。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容