present_to_all

SSH Key - ED25519 和 主机安全那些事儿

shenlan
shenlan 2020年12月18日

SSH Key - ed25519 和 主机安全那些事儿

背景

最近实在受不了测试环境 40 台机器每季度过期密码
着急用测试服务器的时候登上去还要先改密码,有些人改密码也不知道通知一下。就烦死了。
然后打算用 SSH Key 来统一登录测试环境,root 密码每天自动更改一次。

当然如果是你自己家的服务器 你可以关掉 root 密码登录 关掉密码过期策略

生成 key

我们以前生成几乎都是 rsa 算法的

类似于这种命令 ssh-keygen -t rsa -b 4096 -C "[email protected]"

但是最近看 GitHub,Gitlab,.... 都使用了 ED25519

查了一下大概只要 open ssh 版本不是特别老 都是可以用的,并且 安全性在 rsa 2048 - 4096 之间,但性能在数十倍以上。

参考: 使用 Ed25519 算法生成你的 SSH 密钥

看到这些条件果断上车,也修改了 Github ,GCP,等平台的密钥对。

ED25519 生成方式和 RSA 几乎一致

ssh-keygen -t ed25519 -C "[email protected]"

密钥对的体积明显减少了不少,私钥从原来的 4kb 减少到了 1kb,这在目前天朝的超垃圾直连速度环境下,连接速度一定会更快。

目标主机设置

1. 添加公钥到目标主机

id_ed25519.pub 就是你上一步生成的公钥
authorized_keys 如果没有就创建

cd ~/.ssh

cat id_ed25519.pub >> authorized_keys

2. 设置 ssh

# 编辑配置文件
vim /etc/ssh/sshd_config

# 取消注释
PubkeyAuthentication yes

# 设置 AuthorizedKeysFile
AuthorizedKeysFile      .ssh/authorized_keys

#保存
:wq

3. 重启 ssh 以应用设置

service sshd restart

给主机每天换随机密码

换密码脚本

这个密码是很高强度的密码 10 位 像是这个样子 aDDy0XLjfZ6DgA=

在 root 用户下

新建脚本

cd ~
touch auto_change_pass.sh
chmod +x auto_change_pass.sh

vim auto_change_pass.sh

填充下面的内容

#!/bin/bash
if [ `whoami` = "root" ];then
    dd if=/dev/urandom bs=1 count=10 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev > password_$(hostname).txt
    cat password_$(hostname).txt | passwd --stdin root
    echo ""
    echo -e "\033[33m################ New Password ################\033[0m"
    cat password_$(hostname).txt
    echo ""
else
    echo -e "\033[33m Change Passwd Failed! \033[0m"
    echo -e "\033[33m Please run under root user! \033[0m"
fi

定时任务

暂时没更新


大功告成

tips

  1. 家用的 linux 如果要暴露到公网 一定不要开启用密码登录(这个一定会被扫描到然后暴力破解的)
  2. 如果一定要使用 rsa 算法 一定要用 2048 - 4096 位的
  3. 如果你也想批量管理主机密码 一定不要一个 key 登录所有主机 每个 key 最多 10 台,以降低 key 泄露被攻击风险。

本文链接:https://blog.inmind.ltd/index.php/archives/66/
This blog is under a CC BY-NC-SA 4.0 Unported License