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 之间,但性能在数十倍以上。
看到这些条件果断上车,也修改了 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
- 家用的linux 如果要暴露到公网 一定不要开启用密码登录(这个一定会被扫描到然后暴力破解的)
- 如果一定要使用rsa算法 一定要用2048 - 4096位的
- 如果你也想批量管理主机密码 一定不要一个key登录所有主机 每个key最多10台,以降低key泄露被攻击风险。