ssh 支持密码和非对称密钥两种认证方式, 后者完成认证后无需输入密码, 方便且安全。本文着重介绍密钥认证方式的大致原理, 不对具体认证过程做介绍, 对此感兴趣者请自行从网络获取。

为了叙述的方便, 假定 ssh 连接的发起者为 client, ssh 连接的受理者为 server。连接发起前确保满足以下前置条件

  • client 端已正确安装 ssh 客户端, ssh-keygen(可选), ssh-copy-id (可选)
  • server 端已正确安装 ssh 服务端(sshd), 且正确配置

client 使用 ssh-keygen 生成密钥对, 把私钥复制到 .ssh 目录

  • $HOME/.ssh(linux)
  • c:/Users/<your user name>/.ssh(windows)

公钥复制到 server 端 .ssh 目录的 authorized_keys 文件, 可以通过 ssh-copy-id 工具来实现, 也可以手动编辑 authorized_keys 文件。

连接发起后, 会在 client 的 .ssh 目录 known-hosts 文件中记录 server 的信息。

自此 ssh 密钥认证方式就完成。本质上, client 和 server 端交换操作也没问题, 同样可以完成认证。

authorized_keys

记录 ssh 链接发起者公钥, 可以使用 ssh-copy-id 工具完成记录, 同样可以手动编辑

known_hosts

记录 ssh 链接受理者信息, 自动记录, 无需人为干涉.

ssh-keygen

生成密钥对 ssh-keygen -t rsa -b 4096

ssh-copy-id

发送公钥 ssh-copy-id -i /local/path/to/pubkey user@host(对端)