使用 SSH 连接服务器
本文档将帮助使用 macOS 系统的同学完成 SSH 密钥对的生成与配置,并连接到本课程提供的服务器环境进行实验。
1. SSH 简介
SSH(Secure Shell)是一种加密的网络传输协议,可以在不安全的网络中为网络服务提供安全的传输环境。通过使用 SSH,你可以安全地连接到远程服务器并执行命令。
TIP
为什么需要 SSH 密钥?
- 安全性:相比密码登录,SSH 密钥更加安全
- 便利性:配置完成后无需每次输入密码
- 自动化:支持脚本自动化操作
如果你好奇密钥是如何工作的,可以参考这篇文章。
2. 生成 SSH 密钥对
下面介绍常用的 RSA 算法加密和 Ed25519 算法加密两种 SSH 密钥对,分别命名为 id_rsa, id_rsa.pub 和 id_ed25519, id_ed25519.pub 文件。当今 SSH 协议规范通常推荐使用 Ed25519 算法加密,不过现阶段我们不需要区分这两种加密具体区别。如果你很好奇这两种加密方式的优劣性,可以参阅这篇文章
检查现有密钥
在生成新密钥之前,务必先检查是否已经存在 SSH 密钥:
ls ~/.ssh如果目录不存在或为空,说明你还没有 SSH 密钥,可以继续下面的步骤。
TIP
如果你有 id_rsa 和 id_rsa.pub 文件(由 RSA 算法加密),或 id_ed25519 和 id_ed25519.pub 文件(由 Ed25519 算法加密),说明你已经有 SSH 密钥对了。可以移步到向他人分享你的公钥。
生成新的 Ed25519 密钥对
在终端中输入以下命令生成 SSH 密钥对:
ssh-keygenTIP
在有些网站上,他们会宣称使用上面的方式生成了 RSA 密钥对,这是基于比较老的 SSH 协议规范。自 OpenSSH 9.5起,使用上述方法生成的密钥对默认是 Ed25519 加密的。
执行上述命令后,系统会提示你进行一系列配置。除非你有配置 passphrase 的需求并且知道自己在做什么,否则连按三个回车即可。
Enter file in which to save the key (/home/yourusername/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:验证密钥生成
密钥生成完成后,你可以查看生成的文件:
ls ~/.ssh你应该能看到以下文件:
id_ed25519:私钥文件(请妥善保管,不要泄露)id_ed25519.pub:公钥文件(可以安全地分享给服务器)
私钥和公钥统称为一组“密钥”或“密钥对”。
向他人分享你的公钥
在终端中运行下面的命令:
cat ~/.ssh/id_ed25519.pub观察到输出为 ssh-ed25519 xxxxxxxxxxxxxxx xxxxx@xxxx,这就是你的公钥,可以复制并分享给他人。
生成新的 RSA 密钥对
在终端中输入以下命令生成 SSH 密钥对:
ssh-keygen -t rsa执行上述命令后,系统会提示你进行一系列配置。除非你有配置 passphrase 的需求并且知道自己在做什么,否则连按三个回车即可。
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kano/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:验证密钥生成
密钥生成完成后,你可以查看生成的文件:
ls ~/.ssh你应该能看到以下文件:
id_rsa:私钥文件(请妥善保管,不要泄露)id_rsa.pub:公钥文件(可以安全地分享给服务器)
私钥和公钥统称为一组“密钥”或“密钥对”。
向他人分享你的公钥
在终端中运行下面的命令:
cat ~/.ssh/id_rsa.pub观察到输出为 ssh-rsa xxxxxxxxxxxxxxx xxxxx@xxxx ,这就是你的公钥,可以复制并分享给他人。
3. 重置密钥对
注意,本模块内容仅作为了解,供忘记了密码的同学参考以重置 SSH 密钥对。其他同学不需要执行。另外,如果在此处重置了 SSH 密钥对,你还需要在 GitHub 中重新上传新的 SSH 密钥对:
检查现有密钥
在删除密钥之前,务必先检查是否已经存在 SSH 密钥:
ls ~/.ssh如果目录不存在或为空,说明你还没有 SSH 密钥,忽略这个模块吧~
删除密钥对
*使用 bash 命令删除文件需要非常小心,我们强烈建议你直接复制以下代码指令
下面两种删除密钥对方式中只要选择一种操作即可:
- 重置 SSH (这将同时删除已存储的所有服务器信息和受信的公钥,不推荐)
rm -rf ~/.ssh/*- 删除特定的 SSH 密钥对,使用
ls ~/.ssh此时终端会显示 ~/.ssh 目录中存储的文件,例如:
id_rsa id_rsa.pub id_ed25519 id_ed25519.pub known_hosts known_hosts.old authorized_keys使用 rm 操作删除指定的密钥对,例如,删除 Ed25519 加密的密钥对:
rm ~/.ssh/id_ed25519
rm ~/.ssh/id_ed25519.pub如果要删除 RSA 加密的密钥对,将上面的 ed25519 改为 rsa 即可。
生成 SSH 密钥对
参见上文。
4. 使用 VS Code 的 Remote 插件进行远程开发
注意,下面的操作请在已经分配到服务器之后再执行。
安装 VS Code 插件

配置文件
- 在左侧找到形如电脑的图标
- 点击SSH旁边的齿轮
- 进入默认配置文件

连接服务器
- 点击SSH旁边的加号,新建远程
- 在图中所示方框中输入以下命令连接到服务器:
ssh root@服务器地址 -p 端口号
首次连接时,系统会显示服务器的指纹信息并询问是否信任:
The authenticity of host 'xxxxxxx' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?输入 yes 并按回车键继续。
如果配置正确,你应该能够成功登录到服务器而无需输入密码。
Copilot