1. 生成密钥
cmd/bash 等皆可,只要安装了openssh。
ssh-keygen -t rsa -b 4096 -C "[email protected]"
ssh-keygen 命令选项
| 选项 | 描述 |
|---|---|
-t |
指定生成密钥的类型,默认使用 SSH2d 的 RSA。 |
-f |
指定生成密钥的文件名,默认是 id_rsa(私钥为 id_rsa,公钥为 id_rsa.pub)。 |
-b |
指定密钥长度(bits),RSA 最小要求 768 位,默认是 2048 位;DSA 密钥必须是 1024 位(FIPS 1862 标准规定)。 |
-C |
添加注释。 |
-P |
提供旧密码,空表示不需要密码(-P '')。 |
-N |
提供新密码,空表示不需要密码(-N '')。 |
-R hostname |
从 known_hosts 文件中删除所有属于 hostname 的密钥(known_hosts 文件在第一次连接时会自动生成在家目录的 .ssh 目录下)。 |
-e |
读取 OpenSSH 的私钥或公钥文件。 |
-i |
读取未加密的 SSH-v2 兼容的私钥/公钥文件,然后在标准输出设备上显示 OpenSSH 兼容的私钥/公钥。 |
-l |
显示公钥文件的指纹数据。 |
-q |
静默模式。 |
示例用法
-
生成默认 RSA 密钥对:
# 现在推荐ed25519类型 ssh-keygen -t rsa -b 2048 -C "[email protected]" -
指定密钥文件名:
ssh-keygen -f ~/.ssh/my_key -
生成无密码的密钥对:
ssh-keygen -t rsa -N '' -f ~/.ssh/no_pass_key -
显示公钥指纹:
ssh-keygen -l -f ~/.ssh/id_rsa.pub -
删除
known_hosts中的某个主机:ssh-keygen -R example.com -
更改密码
ssh-keygen -p -f C:\Users\user\.ssh\id_rsa
通过这种格式,可以更清晰地理解每个选项的作用及其用法。
2. 上传到远程服务器
2.1 手动复制
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "your_public_key" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
2.2 ssh-copy-id
ssh-copy-id remote_username@server_ip_address
用户通过身份验证后,公钥将附加到远程用户 authorized_keys 文件。
2.3 Get-content
如果没有ssh-copy-id,也可以曲线救国。
Get-content .\.ssh\id_rsa.pub | ssh -p 2222 [email protected] "mkdir -p .ssh && cat >> .ssh/authorized_keys"
3 使用原有密钥对
将原有的 SSH 密钥对(通常是 id_rsa 和 id_rsa.pub 或 id_ed25519 和 id_ed25519.pub)复制到新系统的目录下。
3.1 Linux系统
目录: ~/.ssh/
方法 1:通过 SCP 复制
如果旧系统可以通过 SSH 访问,可以使用 scp 命令将密钥复制到新系统:
scp user@旧系统IP:~/.ssh/id_ed25519* ~/.ssh/
- 将
user替换为旧系统的用户名。 - 将
旧系统IP替换为旧系统的 IP 地址或主机名。 - 如果密钥是
id_rsa,将id_ed25519替换为id_rsa
方法 2:手动复制
如果旧系统无法通过 SSH 访问,可以将密钥文件通过 U 盘、云存储等方式手动复制到新系统的 ~/.ssh/ 目录。
设置密钥权限
SSH 对密钥文件的权限要求非常严格,需要确保私钥文件的权限为 600,公钥文件的权限为 644。
设置私钥权限
chmod 600 ~/.ssh/id_ed25519
- 如果私钥是
id_rsa,将id_ed25519替换为id_rsa。
设置公钥权限
chmod 644 ~/.ssh/id_ed25519.pub
- 如果公钥是
id_rsa.pub,将id_ed25519.pub替换为id_rsa.pub。
设置 .ssh 目录权限
chmod 700 ~/.ssh
4. 配置 SSH 客户端
确保 SSH 客户端知道如何使用这些密钥。
编辑 SSH 配置文件
打开或创建 ~/.ssh/config 文件(如果Winows则为C:\Users\username\.ssh\config或者C:\ProgramData\ssh\ssh_config):
添加以下内容(根据你的密钥类型和远程主机配置):
Host ssh1
HostName 192.168.1.123
Port 22
User root
IdentityFile ~/.ssh/id_rsa
Host ssh2
HostName 192.168.5.32
Port 222
User username
IdentityFile C:\Users\username\.ssh\id_rsa
...
保存并退出编辑器。
5. 测试 SSH 连接
使用以下命令测试 SSH 连接:
ssh -T [email protected]
- 如果连接 GitHub,会显示类似
Hi username! You've successfully authenticated...的消息。 - 如果连接其他服务器,替换
[email protected]为对应的地址。