---
title: "Mac 上 SFTP 的 SSH 密钥和跳板机设置"
description: "在 Mac 上一次性设置好 SSH 密钥、代理、~/.ssh/config 和 ProxyJump 跳板机，在终端和 AnyBucket 的 SFTP 中都能直接使用。"
url: https://anybucket.app/zh-hans/guides/ssh-keys-and-jump-hosts
lang: zh-Hans
---

# SSH 密钥和跳板机，一次设置

用密钥代替密码登录，以及访问位于堡垒机之后的服务器，都由你 Mac 自己的 SSH 配置决定。只要在终端中能用，AnyBucket 的 SFTP 也就能用。

## 简而言之

AnyBucket 运行 macOS 自带的 `ssh`（`/usr/bin/ssh`），因此它使用你的密钥、SSH 代理、`~/.ssh/config`（`Host`、`IdentityFile`、`ProxyJump`）和安全密钥的方式与终端完全相同。先把配置调到 `ssh user@host` 在终端中能用，然后在 AnyBucket 中连接同一台主机。主机密钥会与你自己的 `~/.ssh/known_hosts` 比对。

## AnyBucket 如何使用你的 SSH 配置
不需要另外填写任何密钥库。对于 SFTP，AnyBucket 会启动 `/usr/bin/ssh`，也就是终端使用的同一个程序，因此：

- `~/.ssh` 中的私钥可以直接使用，
- 已载入 SSH 代理的密钥可以直接使用，
- `~/.ssh/config` 中的每个 `Host` 块都会生效，包括 `HostName`、`User`、`IdentityFile` 和 `ProxyJump`，
- 主机密钥会与 `~/.ssh/known_hosts` 比对，这个文件与终端共用。

经验法则：**只要在终端中 `ssh user@host` 能用，在 AnyBucket 中就能用**。服务器要求输入密码时，密码会存入你的登录钥匙串。

## 生成密钥并添加到服务器
如果你还没有密钥：

1. 打开终端，运行 `ssh-keygen -t ed25519`。按 Return 键保留默认文件 `~/.ssh/id_ed25519`，然后设置一个密码短语。
2. 把公钥 `~/.ssh/id_ed25519.pub` 添加到服务器上的 `~/.ssh/authorized_keys` 中，或者发给服务器管理员。切勿分享不带 `.pub` 的那个文件。
3. 测试一下：`ssh user@host` 应该能直接登录，不再询问服务器密码。

为了避免每次都输入密码短语，可以用 `ssh-add` 把密钥添加到代理。macOS 可以把密码短语保存在你的钥匙串中。

## 在 ~/.ssh/config 中为服务器命名
一个 `Host` 块为服务器指定一个简短的名称，以及连接它所需的设置：

```
Host staging
  HostName staging.example.com
  User deploy
  IdentityFile ~/.ssh/id_ed25519
```

现在 `ssh staging` 会用那个密钥以 `deploy` 身份登录。在 AnyBucket 中通过 SFTP 连接服务器 **staging**，同一个块也会生效，因为 AnyBucket 会像终端一样把这个名称交给 `ssh`。

## 通过跳板机访问服务器
很多服务器只能通过堡垒机（也就是跳板机）访问。在终端中临时访问可以写 `ssh -J bastion app`。要长期使用，请用 `ProxyJump`：

```
Host bastion
  HostName bastion.example.com
  User me

Host app
  HostName 10.0.1.20
  User deploy
  ProxyJump bastion
```

在终端中用 `ssh app` 测试。能登录后，在 AnyBucket 中通过 SFTP 连接 **app**：连接会自动经过堡垒机，App 中无需额外设置。多级跳转的写法相同，在 `ProxyJump` 后面写一个以逗号分隔的列表即可。

## 主机密钥：“尚不认识”或“已更改”
第一次连接某台服务器时，它的密钥还不在 `~/.ssh/known_hosts` 中，AnyBucket 会像终端一样，在信任它之前先询问你。请将指纹与服务器管理员公布的指纹进行比对。

如果 AnyBucket 提示密钥**已更改**，请先停下来弄清原因。服务器重建或重装之后，出现新密钥是正常的。否则请不要连接：密钥变化可能意味着与你通信的并不是你以为的那台服务器。进一步了解[故障排除](https://anybucket.app/zh-hans/support/troubleshooting#host-keys)。

## 无法正常工作时
1. **先在终端中尝试**，使用与 AnyBucket 中完全相同的主机名：`ssh staging`。如果失败，问题出在 SSH 配置上，而不是 App。
2. **加上 `-v`**（`ssh -v staging`），查看 `ssh` 尝试了哪些密钥和配置行。
3. 用 `ssh-add -l` **检查代理**：它会列出代理持有的密钥。
4. **检查权限**：`ssh` 会拒绝其他用户可读的私钥。运行 `chmod 600 ~/.ssh/id_ed25519` 即可解决。

还是不行？请参阅 [SFTP 密钥或跳板机无法使用](https://anybucket.app/zh-hans/support/troubleshooting#ssh-keys)，或者把 `ssh -v` 显示的内容（去掉任何隐私信息）通过电子邮件发给支持团队。

## 常见问题，一一解答

### AnyBucket 会读取我的 ~/.ssh/config 吗？

会。它运行 `/usr/bin/ssh`，后者会像在终端中一样读取 `~/.ssh/config`：`Host`、`HostName`、`User`、`IdentityFile`、`ProxyJump` 等等。

### 跳板机在哪里设置？

在 `~/.ssh/config` 中：把 `ProxyJump` 写进去，在终端中用 `ssh` 测试，然后在 AnyBucket 中用最终主机的名称连接即可。跳转会自动完成。

### 它支持 SSH 代理或安全密钥吗？

支持。在终端中能与 `ssh` 配合使用的代理或安全密钥，在 AnyBucket 中也能用，因为用的是同一个 `ssh`。

### AnyBucket 把 SFTP 密码保存在哪里？

在你的登录钥匙串中，每个书签一项。密钥则留在原处，也就是 `~/.ssh` 中，AnyBucket 从不拷贝它们。

### 为什么服务器的密钥显示“已更改”？

它的密钥与 `~/.ssh/known_hosts` 中的那个不再一致。服务器重建后出现这种情况是正常的；否则，在弄清原因之前请不要连接。

## 延伸阅读

- [SFTP](https://anybucket.app/zh-hans/features/sftp)
- [在 Mac 上使用 SFTP](https://anybucket.app/zh-hans/guides/sftp-client-mac)
- [故障排除](https://anybucket.app/zh-hans/support/troubleshooting)
- [兼容性](https://anybucket.app/zh-hans/support/compatibility)

**以 $9.99 购买:** https://buy.polar.sh/polar_cl_pCF9yOjezTUaUqMPyUsxEho1EjcOvo6Bk49Q929LQCQ

---

AnyBucket 是由 [Clever Mechanisms](https://clevermechanisms.dev) 开发的独立软件，与 Apple Inc. 或任何存储服务商均无关联，也未获得其认可或赞助。 Independent software in the spirit of Cyberduck and the classic two-pane commanders. Not affiliated with iterate GmbH (Cyberduck). Apple、Mac、macOS、Finder 和 Quick Look 是 Apple Inc. 在美国及其他国家和地区注册的商标。Amazon S3 是 Amazon.com, Inc. 的商标。其他产品名称是其各自所有者的商标。 电子邮件支持: support@clevermechanisms.dev
