要使用 VSCode 的 **Remote - SSH** 扩展实现免密登录到运行 **宝塔面板** 的 CentOS 7.9 服务器,可以按照以下步骤操作。这些步骤涵盖了生成 SSH 密钥对、在服务器上配置公钥、验证连接以及在 VSCode 中进行相应配置。

## 1. 前提条件

- **本地计算机**:已安装 [Visual Studio Code](https://code.visualstudio.com/)。
- **Remote - SSH 扩展**:在 VSCode 中安装 [Remote - SSH](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh) 扩展。
- **SSH 客户端**:本地计算机已安装 SSH 客户端(大多数 Linux 和 macOS 系统默认安装,Windows 10/11 也内置了 OpenSSH 客户端)。

## 2. 生成 SSH 密钥对

### Windows 用户

1. **使用 PowerShell 或 Git Bash** 打开终端。

### macOS/Linux 用户

1. **打开终端**。

2. **生成 SSH 密钥对**:

执行以下命令生成新的 SSH 密钥对。如果已经有现有的密钥对,可以跳过此步骤或选择为新密钥指定不同的名称。

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

- **提示**:按 `Enter` 键接受默认路径 (`~/.ssh/id_rsa`)。
- **密码短语**:可以选择设置,也可以直接按 `Enter` 跳过(设置密码短语会增加安全性,但每次连接时需要输入)。

## 3. 将公钥复制到服务器

有两种常用方法将公钥复制到 CentOS 服务器。

### 方法 1:使用 `ssh-copy-id` (推荐)

**注意**:CentOS 7.9 默认可能没有安装 `ssh-copy-id` 工具。如果没有,可以选择方法 2。

1. **执行命令**:

```bash
ssh-copy-id username@server_ip
```

- 替换 `username` 为远程服务器的用户名(例如 `root`)。
- 替换 `server_ip` 为服务器的 IP 地址。

2. **输入密码**:请输入远程用户的密码,公钥将被添加到服务器的 `~/.ssh/authorized_keys` 文件中。

### 方法 2:手动复制

1. **显示本地公钥内容**:

```bash
cat ~/.ssh/id_rsa.pub
```

复制输出的公钥内容。

2. **登录到服务器**:

```bash
ssh username@server_ip
```

3. **在服务器上创建 `.ssh` 目录(如果不存在)**:

```bash
mkdir -p ~/.ssh
chmod 700 ~/.ssh
```

4. **将公钥添加到 `authorized_keys`**:

```bash
echo "你的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
```

举例:

```bash
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC..." >> ~/.ssh/authorized_keys
```

## 4. 配置 SSH 服务

确保服务器的 SSH 配置允许使用密钥认证。

1. **编辑 SSH 配置文件**:

```bash
sudo vi /etc/ssh/sshd_config
```

2. **确保以下配置项启用**:

```text
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes # 可选,如果希望保留密码登录
```

**建议**:为了更高的安全性,可以最终将 `PasswordAuthentication` 设置为 `no`,但在完全确认公钥登录正常后再执行。

3. **重启 SSH 服务**:

```bash
sudo systemctl restart sshd
```

## 5. 测试 SSH 密钥登录

在本地终端中尝试通过 SSH 登录,以确保免密登录配置成功。

```bash
ssh username@server_ip
```

**预期结果**:无需输入密码即可登录到服务器。如果仍提示输入密码,请检查前面的步骤是否正确完成。

## 6. 在 VSCode 中配置 Remote - SSH

1. **打开 VSCode**。

2. **安装 Remote - SSH 扩展**:

- 点击左侧活动栏的扩展图标(四个方块)。
- 搜索 "Remote - SSH" 并安装。

3. **配置 SSH 目标**:

- 按下 `F1`(或 `Ctrl+Shift+P` / `Cmd+Shift+P`)打开命令面板。
- 输入并选择 `Remote-SSH: Open SSH Configuration File...`。
- 选择要编辑的 SSH 配置文件(通常是 `~/.ssh/config`,Windows 上可能是 `C:\Users\你的用户名\.ssh\config`)。

4. **添加服务器配置**:

在 SSH 配置文件中添加以下内容:

```text
Host my_baota_server
HostName server_ip
User username
IdentityFile ~/.ssh/id_rsa
```

- `Host`: 自定义的主机别名,可以任意命名(如 `my_baota_server`)。
- `HostName`: 服务器的 IP 地址或域名。
- `User`: 远程服务器的用户名(例如 `root`)。
- `IdentityFile`: 本地私钥文件路径(默认是 `~/.ssh/id_rsa`,Windows 上可能是 `C:\Users\你的用户名\.ssh\id_rsa`)。

**示例**:

```text
Host baota
HostName 192.168.1.100
User root
IdentityFile ~/.ssh/id_rsa
```

5. **保存配置文件**。

6. **连接到服务器**:

- 按下 `F1`(或 `Ctrl+Shift+P` / `Cmd+Shift+P`)打开命令面板。
- 输入并选择 `Remote-SSH: Connect to Host...`,然后选择刚刚配置的 `my_baota_server`(如 `baota`)。
- VSCode 会尝试通过 SSH 连接到服务器,并在成功后打开远程工作区。

## 7. 常见问题及解决方法

### 权限问题

确保本地的 SSH 密钥文件权限正确:

```bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 600 ~/.ssh/authorized_keys
```

### SELinux 设置

CentOS 默认启用 SELinux,可能会影响 SSH 连接。可以暂时禁用 SELinux 以测试:

```bash
sudo setenforce 0
```

如果确实是 SELinux 导致的问题,可以调整策略或永久禁用(不推荐,除非你了解相关风险):

编辑配置文件 `/etc/selinux/config`,将 `SELINUX=enforcing` 改为 `SELINUX=permissive`,然后重启服务器。

### 防火墙设置

确保防火墙允许 SSH 连接(默认端口是 22):

```bash
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
```

### 验证 SSH 配置

检查 SSH 配置文件是否有语法错误:

```bash
sudo sshd -t
```

若无输出,则配置语法正确。

### 使用详细模式调试

在本地使用详细模式连接以获取更多调试信息:

```bash
ssh -v username@server_ip
```

根据输出信息查找问题所在。

## 8. 完成连接

完成上述步骤后,您应该能够通过 VSCode 的 **Remote - SSH** 扩展无密码登录并管理您的 CentOS 7.9 服务器上的项目和文件。这样不仅提升了安全性,还简化了连接流程,提高了工作效率。

如果在过程中遇到任何问题,请根据报错信息进行针对性排查,确保每一步都正确完成。

祝您配置顺利!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。