平时用 ssh 登录远程服务器时,大概会是这样:ssh root@123.123.45.168
并且还要输入密码,如果密码比较长,并且有各种特殊字符,简直是折磨
有了免密登录,再也不用输入那么一长串的命令
下面的例子就是登录我腾讯服务器,超级简单,只需要输入ssh tx
就行了,不需要输入密码!
那怎么实现免密登录呢?很简单,流程如下:
ssh-keygen -t ed25519 -a 200 -C "lihuacai168@gmail.com"
跟着提示操作就好,直接一路默认就行,最后生成的密钥对会放在~/.ssh
目录下
id_ed25519.pub
是公钥,放到远程服务器上,可以给别人看到的id_ed25519
是私钥,留在本地,不能给别人看到的命令解释:
ssh-keygen -t ed25519 -a 200 -C "your_email@example.com" 是一个用于生成 ed25519 类型 SSH 密钥对的命令。逐个分析这个命令的各个部分:
- ssh-keygen:这是一个用于生成、管理和转换 SSH 密钥的工具。
- -t ed25519:-t 选项表示要生成的密钥类型,这里选择的是 ed25519。ed25519 是一种现代的、安全的、高效的椭圆曲线签名算法,广泛应用于 SSH 密钥。
- -a 200:-a 选项表示密钥派生函数(KDF)的轮数。这个值越大,密钥生成过程越慢,破解难度越高。在这里,轮数被设置为 200,提高了密钥的安全性。
- -C "your_email@example.com":-C 选项表示注释。这里,可以使用电子邮件地址作为注释,以便更容易地识别和管理密钥。当然,可以使用任何其他有意义的字符串来替换电子邮件地址。
这面是一个快捷命令,一行就能完成
cat ~/.ssh/id_ed25519.pub | ssh 用户名@远程服务器地址 "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && cat >> ~/.ssh/authorized_keys"
如果有遇到报错,就把命令拆开执行:
.ssh
的目录.ssh
目录下创建一个authorized_keys
的文件~/.ssh/id_ed25519.pub
的内容复制到authorized_keys
文件,保存退出即可authorized_keys
文件的权限(可以省略这步)chmod 600 ~/.ssh/authorized_keys
配置完成后,在本地测试一下
ssh 用户名@远程服务器ip地址
正常的话,应该就能直接登录了
如果要实现开头动图那样,不想每次都输入用户名和 ip,本地还需要做多一个配置
.ssh
目录,mkdir ~/.ssh
.ssh
目录下创建一个文件config
内容可以参考这个
shell
IdentityFile ~/.ssh/id_ed25519
StrictHostKeyChecking no
ControlMaster auto
Host tx
User root
HostName 110.119.120.168
配置解释:
IdentityFile ~/.ssh/id_ed25519
用来认证的私钥,不要带上.pub
Host tx
起一个服务器别名,叫做tx
,随便起,方便记忆就行User root
登录tx
这个服务器使用的用户名HostName 110.119.120.168
服务器的 ip 地址或者域名配置完 ssh 服务器别名之后,scp 自动补全就相当于额外赠送的了
tx:/ro
按一下 tab,如果只有一个选项,就自动补全tx:/root/co
因为有两个选项,就会展示所有的补全选项看到过很多人在连接远程服务器的时候,直接使用密码登录
这样会带来一些问题:
尤其是一些小白,刚买了服务器,没有什么安全意识。
就直接是裸奔,密码还是设置很简单的那种,什么root
, 12345678
, password
, p@ssw0rd
之类的。
简直就是送人头啊,这位同学就是曾经的受害人
刚买一周的服务器,就有遇到这么多次的破解
我设置了连续错误 3 次密码错误就拉黑
具体防范方法参考我博客这篇文章
https://blog.huacai.one/post/8