SSH(Secure Shell)是一种网络协议,用于在不安全的网络中提供安全的远程登录和其他网络服务。SSH 密钥认证是一种比传统密码认证更安全的登录方式。

一、SSH 密钥的生成、配置、使用。

生成 SSH 密钥

通常使用 ssh-keygen 工具来生成 SSH 密钥对,密钥对包含公钥和私钥。以下是在不同操作系统上生成密钥对的步骤:

Linux/macOS

打开终端,执行以下命令:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • -t rsa:指定密钥类型为 RSA。
  • -b 4096:指定密钥长度为 4096 位。
  • -C "your_email@example.com":为密钥添加注释,方便识别。

执行命令后,会提示你选择密钥保存的位置和设置密码(可留空不设置)。默认情况下,密钥会保存在 ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)。

Windows

在 Windows 上可以使用 Git Bash 或 PowerShell 来生成 SSH 密钥,命令与 Linux/macOS 相同: powershell

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

配置 SSH 公钥到远程服务器

生成密钥对后,需要将公钥配置到远程服务器上,这样才能使用私钥进行认证登录。

Linux/macOS

可以使用 ssh-copy-id 命令将公钥复制到远程服务器:

ssh-copy-id user@remote_server_ip
  • user:远程服务器的用户名。
  • remote_server_ip:远程服务器的 IP 地址。

执行该命令后,会提示输入远程服务器的密码,输入密码后,公钥会被自动复制到远程服务器的 ~/.ssh/authorized_keys 文件中。

Windows

如果使用 Git Bash,也可以使用 ssh-copy-id 命令。如果使用 PowerShell,可以手动将公钥内容复制到远程服务器的 ~/.ssh/authorized_keys 文件中。

  1. 打开公钥文件 ~/.ssh/id_rsa.pub,复制其中的内容。
  2. 使用 SSH 客户端(如 PuTTY)登录到远程服务器。
  3. 创建或编辑 ~/.ssh/authorized_keys 文件,将复制的公钥内容粘贴到该文件中。

配置 SSH 客户端

为了方便使用 SSH 密钥登录,可以在本地的 SSH 配置文件 ~/.ssh/config 中进行配置。 打开 ~/.ssh/config 文件(如果文件不存在,可以手动创建),添加以下内容:

Host remote_server
    HostName remote_server_ip
    User user
    IdentityFile ~/.ssh/id_rsa
  • Host remote_server:定义一个别名,方便后续使用。
  • HostName remote_server_ip:远程服务器的 IP 地址。
  • User user:远程服务器的用户名。
  • IdentityFile ~/.ssh/id_rsa:指定使用的私钥文件。

配置完成后,就可以使用以下命令登录远程服务器:

ssh remote_server

测试 SSH 密钥登录

配置完成后,可以尝试使用 SSH 密钥登录远程服务器:

ssh user@remote_server_ip

如果配置正确,将无需输入密码即可登录到远程服务器。

注意事项

  • 私钥文件非常重要,要妥善保管,不要泄露给他人。
  • 如果需要在多台设备上使用 SSH 密钥,可以将私钥复制到其他设备上,但要确保私钥的安全性。
  • 可以定期更换 SSH 密钥,以提高安全性。

二、如何在服务器上生成SSH密钥?

在服务器上生成 SSH 密钥的过程与在客户端生成类似,通常使用 ssh-keygen 工具。以下是详细步骤,以 Linux 服务器为例进行说明:

1. 打开终端

使用具有相应权限的用户账户登录到服务器的终端。如果需要以 root 用户身份执行操作,可以先使用 sudo -i 命令切换到 root 用户。

2. 生成 SSH 密钥对

在终端中执行 ssh-keygen 命令来生成密钥对。常用的命令格式如下:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • 参数说明

    • -t rsa:指定密钥类型为 RSA,RSA 是一种广泛使用的非对称加密算法,目前大多数场景都适用。
    • -b 4096:指定密钥的长度为 4096 位,密钥长度越长,安全性相对越高,但生成时间也会相应增加。
    • -C "your_email@example.com":为密钥添加注释信息,通常使用电子邮件地址,方便识别该密钥的用途或所有者。

3. 选择密钥保存位置

执行上述命令后,系统会提示你选择密钥保存的位置,默认路径是 ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)。如果你想使用默认位置,直接按回车键即可;若要指定其他位置,输入完整的路径和文件名。例如:

Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/my_custom_key

4. 设置密钥密码(可选)

接下来,系统会提示你设置一个用于保护私钥的密码。这个密码可以增加私钥的安全性,即使私钥文件被泄露,没有密码也无法使用。如果你想设置密码,输入密码并确认;若不想设置,直接按回车键跳过。

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

5. 完成密钥生成

当你完成上述步骤后,ssh-keygen 会生成 SSH 密钥对,并显示类似以下的信息:

Your identification has been saved in /root/.ssh/my_custom_key.
Your public key has been saved in /root/.ssh/my_custom_key.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx your_email@example.com
The key's randomart image is:
+---[RSA 4096]----+
|        .        |
|       o .       |
|      o o .      |
|     . o + .     |
|      . S = .    |
|       o + =     |
|      . + * .    |
|     . o + o     |
|      . E .      |
+----[SHA256]-----+

6. 查看生成的密钥文件

生成完成后,你可以使用以下命令查看生成的私钥和公钥文件:

ls ~/.ssh

如果使用了默认路径,会看到 id_rsaid_rsa.pub 文件;若指定了自定义路径,会看到相应的文件。

7. 配置公钥用于其他用途(可选)

如果你生成密钥是为了方便从该服务器连接到其他服务器,可以将公钥内容添加到目标服务器的 ~/.ssh/authorized_keys 文件中,具体方法可参考之前提到的将公钥复制到服务器的步骤。

不同密钥类型

除了 RSA 密钥,ssh-keygen 还支持其他类型的密钥,例如:

  • ED25519:这是一种较新的椭圆曲线加密算法,具有更高的安全性和更快的生成速度。生成 ED25519 密钥的命令如下:
ssh-keygen -t ed25519 -C "your_email@example.com"

使用方法与 RSA 密钥基本相同。 通过以上步骤,你就可以在服务器上成功生成 SSH 密钥对。

三、如何在服务器上配置SSH密钥?

在服务器上配置 SSH 密钥主要涉及接收并存储客户端的公钥,以便客户端可以使用对应的私钥进行安全的身份验证登录。以下为你详细介绍具体步骤:

前提条件

确保服务器已经安装并运行了 SSH 服务,一般 Linux 发行版默认都会安装 OpenSSH 服务。你可以通过以下命令检查 SSH 服务的运行状态:

systemctl status sshd  # 适用于使用 systemd 的系统,如 CentOS 7 及以上、Ubuntu 16.04 及以上

若服务未运行,可使用以下命令启动:

systemctl start sshd

若想让 SSH 服务在系统启动时自动运行,可使用以下命令:

systemctl enable sshd

配置步骤

1. 创建或检查 .ssh 目录

在服务器上,每个用户都有自己的 SSH 配置目录,通常是用户主目录下的 .ssh 目录。首先要确保该目录存在,并且权限设置正确。使用以下命令进行操作:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
  • mkdir -p ~/.ssh:如果 .ssh 目录不存在,则创建它。-p 选项确保即使父目录不存在也能正确创建。
  • chmod 700 ~/.ssh:将 .ssh 目录的权限设置为只有用户本身可以读写和访问。

2. 接收客户端公钥

客户端生成 SSH 密钥对后,需要将公钥内容传输到服务器。常见的传输方法有以下两种:

方法一:使用 ssh-copy-id 命令(适用于客户端和服务器可以直接通信的情况)

在客户端机器上执行以下命令:

ssh-copy-id username@server_ip
  • username:服务器上的用户名。
  • server_ip:服务器的 IP 地址。

执行该命令后,系统会提示输入服务器用户的密码,输入正确密码后,客户端的公钥就会被自动复制到服务器的 ~/.ssh/authorized_keys 文件中。

方法二:手动复制公钥内容
  • 在客户端上,打开公钥文件(通常是 ~/.ssh/id_rsa.pub),复制其中的内容。
  • 在服务器上,使用文本编辑器(如 vimnano)打开 ~/.ssh/authorized_keys 文件,如果文件不存在则创建它:
nano ~/.ssh/authorized_keys
  • 将从客户端复制的公钥内容粘贴到 authorized_keys 文件中,然后保存并退出编辑器。

3. 设置 authorized_keys 文件权限

确保 authorized_keys 文件的权限设置正确,只有用户本身可以读写:

chmod 600 ~/.ssh/authorized_keys

4. 验证 SSH 密钥登录

在客户端上,尝试使用 SSH 密钥登录服务器:

ssh username@server_ip

如果配置正确,此时无需输入密码即可登录到服务器。

其他配置(可选)

禁用密码登录(增强安全性)

为了进一步提高服务器的安全性,可以在服务器上禁用 SSH 密码登录,只允许使用 SSH 密钥登录。编辑 /etc/ssh/sshd_config 文件:

sudo nano /etc/ssh/sshd_config

找到以下行并进行修改:

PasswordAuthentication no

保存并退出编辑器,然后重启 SSH 服务:

sudo systemctl restart sshd

多用户和多密钥管理

如果服务器上有多个用户需要使用 SSH 密钥登录,每个用户都需要在自己的主目录下完成上述配置步骤。此外,如果一个用户需要使用多个 SSH 密钥进行不同的操作,只需将多个公钥内容依次添加到 ~/.ssh/authorized_keys 文件中即可。

Copyright © https://yan-jian.com 2023 all right reserved更新时间: 2025-03-10 18:12:15

results matching ""

    No results matching ""