一、生成并输出密钥

1. 生成密钥对

使用Windows PowerShell
ssh-keygen -t ed25519 -C "key_note" -f $env:USERPROFILE\.ssh\key-name
使用Ubuntu Terminal
ssh-keygen -t ed25519 -C "key_note" -f ~/.ssh/key-name

其中,ed25519为椭圆曲线加密算法,key_note为标识密钥用途的注释,$env:USERPROFILE\.ssh\key-name~/.ssh/key-name为密钥保存路径。

对于一些对加密位数有要求的算法如RSA,使用-b选项指定加密位数,如-t RSA -b 4096,其中4096为加密位数。

命令运行后提示Enter passphrase是提示设置密码保护私钥,提高安全性。可以留空直接按两次回车跳过。

命令运行完成后会在%USERPROFILE%\.ssh~/.ssh路径下生成两个文件:

  • 私钥文件key-name

  • 公钥文件key-name.pub

2. 输出公钥

使用Windows PowerShell
cat $env:USERPROFILE\.ssh\key-name.pub
使用Ubuntu Terminal
cat ~/.ssh/key-name.pub

注意,务必检查命令以.pub结尾,否则将输出私钥,可能造成密钥泄露。

二、config文件配置

1. config文件位置

  • Windows:%USERPROFILE%\.ssh\config

  • Ubuntu:~/.ssh/config

在上述文件结尾添加相关配置。

2. Gitee配置

Host gitee.com
  HostName gitee.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/key-name

注意修改key-name.

测试命令:

ssh -T git@gitee.com

若成功则返回:

Hi USERNAME! You've successfully authenticated, but GITEE.COM does not provide shell access.

3. 云服务器配置

Host sever_ip
  HostName sever_ip
  User sever_user
  IdentityFile ~/.ssh/key-name

注意修改key-namesever_ipsever_user.

三、known_hosts文件相关问题

在与远程机器第一次建立SSH连接时,会提示远程机器的指纹,输入yes命令后远程机器的指纹将存放在:

  • Windows:%USERPROFILE%\.ssh\known_hosts

  • Ubuntu:~/.ssh/known_hosts

当连接远程服务器时,如若因重装系统等因素遇到指纹不匹配问题,将known_hosts文件中相关的指纹删除即可。

四、服务商配置

1. Gitee

注意: 添加公钥需验证用户密码

主页右上角 「个人设置」->「安全设置」->「SSH 公钥」->「添加公钥 ,添加生成的 public key 添加到当前账户中。

2. 阿里云

注意:密钥生效后,默认会禁止密码登录,如需使用密码登录,参见重新启用密码登录方式

  1. 登录轻量应用服务器管理控制台

  2. 在左侧导航栏,单击服务器

  3. 单击服务器卡片中的实例ID。

  4. 基本信息区域的密钥后,单击创建密钥

    如已创建密钥,单击更换密钥

  5. 在对话框中,完成配置。

    具体配置项说明如下:

    • 密钥名称:输入您自定义的密钥名称。例如:test-ssh-01

    • 创建方式

      • 自动生成密钥对:由系统自动生成,创建后请下载并妥善保管密钥,密钥仅有一次下载机会。

      • 导入密钥对:输入本地密钥对的公钥内容,使用同一个密钥对管理多台轻量应用服务器。

  6. 单击确定

  7. 重启服务器,使密钥登录方式生效。具体操作,请参见查看服务器卡片信息

如不再使用密钥,单击删除密钥

3. 自有服务器

  1. 上传公钥

在远程服务器上运行:

vim ~/.ssh/authorized_keys

将输出的公钥输入到文件中并保存。

  1. 配置SSH服务器

确保目标服务器上的SSH服务器配置允许密钥登录。

编辑SSH服务器配置文件/etc/ssh/sshd_config:在远程服务器上运行:

vim /etc/ssh/sshd_config

确保以下行的设置如下:

PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2

保存并退出配置文件,并重新启动SSH服务:

sudo systemctl restart ssh

五、配置阿里云下载的密钥

1. Mac

需要注意私钥的文件权限需要为-rw-------,即只有所有者有读写权限

chmod 600 ~/.ssh/key-name
ls -l ~/.ssh/key-name