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 提示密钥已更改,请先停下来弄清原因。服务器重建或重装之后,出现新密钥是正常的。否则请不要连接:密钥变化可能意味着与你通信的并不是你以为的那台服务器。进一步了解故障排除。

无法正常工作时

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

还是不行?请参阅 SFTP 密钥或跳板机无法使用,或者把 ssh -v 显示的内容(去掉任何隐私信息)通过电子邮件发给支持团队。