免密登录原理

利用密钥生成器制作一对密钥——公钥和私钥。将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。这样一来,没有私钥,任何人都无法通过 SSH 暴力破解你的密码来远程登录到系统。此外,如果将公钥复制到其他账户甚至主机,利用私钥也可以登录。

生成 SSH 密钥对

生成密钥可以在远端 VPS 上,也可以在本地终端上进行操作,方法都是类似的。

输入命令 ssh-keygen 然后按4次 Enter 键就行了。

root@p3ter:~# ssh-keygen  # 输入命令,按 Enter 键
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):   #  保存位置,默认就行,按 Enter 键
Enter passphrase (empty for no passphrase):   # 输入密钥密码,按 Enter 键。填写后每次都会要求输入密码,留空则实现无密码登录。
Enter same passphrase again:   # 再次输入密钥密码,按 Enter 键
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:GYT9YqBV4gDIgzTYEWFs3oGZjp8FWXArBObfhPlPzIk root@p3ter
The key's randomart image is:
+---[RSA 2048]----+
|*OO%+ .+o        |
|*=@.+++o.        |
| *o=.=....       |
|. +.B + +o.      |
| . + E *S.       |
|  o   o          |
|       .         |
|                 |
|                 |
+----[SHA256]-----+
现在,在当前用户的根目录中生成了一个 .ssh 的隐藏目录,内含两个密钥文件。id_rsa 为私钥,id_rsa.pub 为公钥。

安装公钥

密钥在远端

如果生成密钥的操作是在当前要添加的 VPS 上进行的,注意保存私钥 id_rsa 文件到本地,然后输入以下命令安装公钥:

cd .ssh/
cat id_rsa.pub >> authorized_keys # 将公钥写入到 authorized_keys 文件

密钥在本地

如果生成密钥的操作是在本地终端上进行的,那么输入以下命令将公钥上传到 VPS:

ssh-copy-id user@remote -p port
user 为用户名,remote 为IP地址,port为端口号。

在没有 ssh-copy-id 的情况下(比如在 Windows 上),也可以用命令来操作:

ssh user@remote -p port 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
命令的含义是,在远端新建 .ssh 文件夹,并把本地的 ~/.ssh/id_rsa.pub(公钥)追加到远端的 .ssh/authorized_keys 中。

当然,你也可以手动进行操作,先复制公钥,再登录 VPS ,粘贴到 .ssh/authorized_keys 中。

修改权限

为了确保连接成功,务必修改文件权限:

chmod 600 authorized_keys
chmod 700 ~/.ssh

修改 sshd 配置文件

开启密钥登录选项

  1. 编辑 /etc/ssh/sshd_config 文件找到以下参数进行更改:
RSAAuthentication yes
PubkeyAuthentication yes
  1. 重启 sshd 服务
service sshd restart

禁用密码登录

  1. 在你确认密钥能成功登录后,如果需要禁用密码登录,请更改以下参数:
PasswordAuthentication no
  1. 重启 sshd 服务
service sshd restart

参考

设置 SSH 通过密钥登录

SSH 基本用法