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泄露被攻击风险。