段落1、需求描述
开在公网的服务器,不管是Win还是Linux,常常会遭受到无聊的暴力破解攻击。这种情况下,自身密码如果复杂度是够的,也不必太过担心。不过,这种事情不胜其扰。要么通过防火墙过滤,要么就可以如题一般,配置Linux的SSH登录方式为私钥登录。
段落2、常见的算法格式
DSA(用于数字签名算法)的签名生成速度很快,验证速度很慢,加密时更慢,但解密时速度很快,一般仅用于签名。
RSA算法(可用于加密和数字签名)的安全性基于这样的事实,大整数的因式分解被认为是难以破解 ,而DSA安全性基于离散对数问题。今天已知用于分解大整数块的最快算法是通用数字场筛(可以理解为对简单合理筛或二次筛的改进算法),也是解决有限域中的离散对数问题的最快算法,该算法以DSA指定的大素数为模。
OpenSSH 7.0及以上版本默认禁用了ssh-dss(DSA)公钥算法。官方没有给出具体的解释,但其中可能有OpenSSH的DSA密钥位数生成的原因,同时生成签名时随机性差,可能会泄漏私钥,且以现在机算机的算力,DSA 1024-bit已经实际上可破解,建议不使用
ECDSA算法(椭圆曲线数字签名算法)
ECDSA是用于数字签名,是ECC与DSA的结合,整个签名过程与DSA类似,所不一样的是签名中采取的算法为ECC,最后签名出来的值也是分为r,s。而ECC(全称Elliptic Curves Cryptography)是一种椭圆曲线密码编码学。
ECDH每次用一个固定的DH key,导致不能向前保密(forward secrecy),所以一般都是用ECDHE(ephemeral)或其他版本的ECDH算法。ECDH则是基于ECC的DH( Diffie-Hellman)密钥交换算法。
ECC与RSA 相比,有以下的优点:
- 相同密钥长度下,安全性能更高,如160位ECC已经与1024位RSA、DSA有相同的安全强度。
- 计算量小,处理速度快,在私钥的处理速度上(解密和签名),ECC远 比RSA、DSA快得多。
- 存储空间占用小 ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多, 所以占用的存储空间小得多。
- 带宽要求低使得ECC具有广泛得应用前景。
一般来说,普通人,选用RSA的就可以,兼容性,安全性都够了。通常,RSA,DSA,ECDSA,EdDSA和Ed25519都用于数字签名,但只有RSA也可以用于加密。
Key type | Public key file name | Private key file name |
DSA | ~/.ssh/id_dsa.pub | ~/.ssh/id_dsa |
RSA | ~/.ssh/id_rsa.pub | ~/.ssh/id_rsa |
ECDSA | ~/.ssh/id_ecdsa.pub | ~/.ssh/id_ecdsa |
Ed25519 (Edwards-curve DSA) | ~/.ssh/id_ed25519.pub | ~/.ssh/id_ed25519 |
几种常见的密钥对生成
ssh-keygen -t rsa -b 4096 ssh-keygen -t dsa ssh-keygen -t ecdsa -b 521 ssh-keygen -t ed25519 ssh-keygen -f ~/tatu-key-ecdsa -t ecdsa -b 521 # 指定生成的名称
如果针对我们需要生成SSH密钥对的场景,仅是登录服务器需求,默认长度2048即可,要安全可靠一点,长度可选4096。
使用如下的命令,即可生成密钥对,如果是在服务器VPS上执行,下载私钥后,务必把服务器上的私钥文件删除。下载到本地,记得控制私钥文件的访问权限。
段落3、实际落地操作命令
3.1、使用4096长度,生成一个密钥对
ssh-keygen -t rsa -b 4096
生成的文件,id_rsa,为私钥,需要保存在自己手里,保存好。
生成的文件,id_rsa.pub,为公钥,一般放在服务器VPS的 ~/.ssh/ 目录下。
3.2、复制公钥的字符串,到服务器的~/.ssh/目录下
创建目录,复制id_rsa.pub文件中的内容,追加写入到~/.ssh/authorized_keys文件中
mkdir -p ~/.ssh/ echo "public_key_string" >> ~/.ssh/authorized_keys # public_key_string 为你id_rsa.pub文件中的全部字符串内容
3.3、本地使用私钥登录服务器
3.3.1、如果本地也是Linux系统,命令行模式下
其中id_rsa文件的路径,我这里放在当前目录下,可选全路径
ssh -i ./id_rsa root@23.11.55.166
3.3.2、如果本地是windows系统,使用putty/XShell/FinalShell之类的图形界面客户端,则直接调用私钥文件即可。
假设使用putty登录,输入IP,点开右方SSH加号,点击Auth,点击Browse加载私钥后点击open即可。
段落4、关闭密码登录,仅用私钥登录(此章节的操作,为可选)
修改SSH服务器上的配置文件 /etc/ssh/sshd_config ,增加或者修改如下的参数的配置值
# 禁用密码登录 PasswordAuthentication no # 启用私钥登录 RSAAuthentication yes PubkeyAuthentication yes # 允许root登录 PermitRootLogin yes
修改参数完成后,重启SSHD服务即可
systemctl restart sshd
附录1、
博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者
对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费
Twitter: Dasmz
Youtube: @DasmzStudio
附录2、视频教程链接
000117. 免输入密码,使用私钥方式SSH登录Linux服务器 2022-11-20 本期博客地址 https://dasmz.com/?p=2898 本期视频地址 https://youtu.be/d9y9Kxl-4G0 博客地址 https://dasmz.com Twitter https://twitter.com/fdmove Youtube https://www.youtube.com/@DasmzStudio 全部视频的目录索引 https://dasmz.com/?p=1342