SSH 免密登录配置笔记

1. 生成 SSH 密钥对

1.1 使用 ssh-keygen 生成密钥对

在本地终端使用以下命令生成 SSH 密钥对:

1
ssh-keygen -t rsa -b 4096

这会在 ~/.ssh/ 目录下生成私钥 id_rsa 和公钥 id_rsa.pub

1.2 设置密钥存储路径(可选)

如果希望将密钥存储在自定义路径,可以使用 -f 选项:

1
ssh-keygen -t rsa -b 4096 -f ~/.ssh/my_key

此命令将私钥保存为 ~/.ssh/my_key,公钥保存为 ~/.ssh/my_key.pub

1.3 设置密钥密码(可选)

在生成过程中,您可以选择设置密钥的密码。虽然这样可以增加安全性,但每次使用私钥登录时需要输入密码。

2. 上传公钥到远程服务器

2.1 使用 ssh-copy-id 命令(推荐)

最简单的方式是使用 ssh-copy-id 命令将公钥上传至远程服务器:

1
ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host

这会将本地公钥添加到远程服务器的 ~/.ssh/authorized_keys 文件中。

2.2 手动复制公钥

如果没有 ssh-copy-id 命令,可以手动将公钥复制到远程服务器:

  1. 查看本地公钥内容:

    1
    cat ~/.ssh/id_rsa.pub
  2. 登录到远程服务器:

    1
    ssh user@remote_host
  3. 在远程服务器上创建 .ssh 目录(如果不存在):

    1
    mkdir -p ~/.ssh
  4. 将公钥内容追加到 authorized_keys 文件:

    1
    echo "your_public_key" >> ~/.ssh/authorized_keys
  5. 设置正确的权限:

    1
    2
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

3. 配置 SSH 服务端(可选)

3.1 编辑 SSH 配置文件

通过编辑 SSH 配置文件 sshd_config,确保公钥认证和密码认证设置正确:

1
sudo vi /etc/ssh/sshd_config

确保以下配置项未被注释且已正确设置:

1
2
PubkeyAuthentication yes
PasswordAuthentication no

3.2 重启 SSH 服务

修改配置后,重启 SSH 服务以应用更改:

1
sudo systemctl restart sshd

4. 测试免密登录

使用以下命令测试是否可以成功通过 SSH 登录远程服务器,而不需要输入密码:

1
ssh user@remote_host

如果一切配置正确,您将无需输入密码即可登录。

5. 配置 SSH 客户端(可选)

5.1 编辑 SSH 配置文件

在本地机器上编辑或创建 ~/.ssh/config 文件,配置多个 SSH 登录选项:

1
vi ~/.ssh/config

添加以下配置:

1
2
3
4
Host remote_host_alias
HostName remote_host
User user
IdentityFile ~/.ssh/id_rsa

这样,您可以使用别名 remote_host_alias 登录,而不需要每次输入用户名和主机地址:

1
ssh remote_host_alias

6. 注意事项

6.1 私钥安全

确保私钥文件(如 id_rsa)权限设置为 600,并妥善保管私钥,避免泄露。

6.2 公钥分发

可以在多个服务器之间共享公钥,但每台服务器的 ~/.ssh/authorized_keys 文件中应包含相应的公钥。

6.3 密钥管理

若使用多个密钥进行 SSH 登录,可以在 ~/.ssh/config 文件中为不同的主机指定不同的 IdentityFile

7. 参考文献