SSH密钥远程连接

客户端工具为:macOS iTerm2 在 iTerm2 中使用 SSH 密钥连接远程服务器,可以按照以下步骤进行:

确认 SSH 密钥是否存在

首先,检查是否已有 SSH 密钥。默认情况下,SSH 密钥存储在 ~/.ssh/ 目录下。

ls -al ~/.ssh

如果没有看到 id_rsa 或 id_ed25519 文件,可以用以下命令生成一个新的 SSH 密钥:

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

将SSH公钥添加到远程服务器

将生成的公钥 (~/.ssh/id_rsa.pub~/.ssh/id_ed25519.pub) 复制到远程服务器的 ~/.ssh/authorized_keys 文件中:

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

或者手动将公钥内容添加到 ~/.ssh/authorized_keys 文件中。

配置SSH客户端

可以编辑 ~/.ssh/config 文件,以便在 iTerm2 中快速连接服务器:

nano ~/.ssh/config

添加以下配置(替换示例内容):

Host myserver
    HostName remote_host
    User username
    IdentityFile ~/.ssh/id_rsa

Host: 本地别名,用于快速连接 HostName: 远程服务器的 IP 地址或域名 User: 用户名 IdentityFile: 私钥文件路径 保存并关闭文件。

配置SSH服务器端

确保服务器端要启用SSH认证登录,在 /etc/ssh/sshd_config 文件中,确认以下参数已启用:

PubkeyAuthentication yes

重启SSH服务

如果更改了配置文件,记得重启SSH服务:

sudo systemctl restart sshd

在 iTerm2 中连接

在 iTerm2 中输入以下命令连接到服务器:

ssh myserver

这样,iTerm2 会使用指定的 SSH 密钥自动连接到服务器。如果配置正确,将不再需要输入密码即可连接。

SSH认证流程

在 SSH 密钥认证过程中,私钥和公钥的作用可以用以下步骤来详细说明:

场景(通过密钥SSH远程连接)

  • 你在本地生成了 SSH 密钥对,包括 私钥(id_rsa)和 公钥(id_rsa.pub)。
  • 公钥通过 ssh-copy-id 复制到了远程服务器,并添加到了 ~/.ssh/authorized_keys 文件中。

认证过程

  1. 密钥生成(在本地机器上):
  • 使用 ssh-keygen 命令生成一对密钥:私钥 id_rsa 和公钥 id_rsa.pub。
  • 私钥应仅保存在本地并妥善保护,公钥则可以公开发布,因为它只会验证是否与相应的私钥配对。
  1. 公钥分发(复制到远程服务器):
  • 使用 ssh-copy-id 将公钥内容添加到远程服务器的 ~/.ssh/authorized_keys 文件中。这个文件记录了哪些公钥有权限访问该服务器。
  1. 建立连接请求(客户端发起):
  • 当你执行 ssh root@server_address 命令连接远程服务器时,SSH 客户端首先会向服务器发出连接请求。
  1. 服务器发起(验证身份):
  • 服务器在 ~/.ssh/authorized_keys 文件中找到客户端的公钥,并生成一个随机字符串(“”),用公钥加密后发送给客户端。
  1. 客户端响应(使用私钥解密):
  • 客户端接收服务器的加密,并使用本地的私钥(id_rsa)进行解密。
  • 如果私钥成功解密出正确的字符串,客户端就会将解密后的字符串返回给服务器。
  1. 服务器验证并建立连接:
  • 服务器收到客户端返回的解密结果,并验证是否与生成的字符串一致。
  • 如果匹配,服务器就确认客户端持有与其公钥配对的私钥,从而证明了客户端的身份,允许连接。
  • 连接建立后,你将进入远程服务器的终端会话。

关键点

  • 公钥:放在服务器的 authorized_keys 文件中,验证客户端的身份。
  • 私钥:存放在客户端,用于解密服务器发送的加密,必须保密。

通过这种“-响应”机制,服务器不需要知道私钥即可安全地确认客户端的身份。