AnyBucket 如何使用你的 SSH 配置
不需要另外填写任何密钥库。对于 SFTP,AnyBucket 会启动 /usr/bin/ssh,也就是终端使用的同一个程序,因此:
~/.ssh中的私钥可以直接使用,- 已载入 SSH 代理的密钥可以直接使用,
~/.ssh/config中的每个Host块都会生效,包括HostName、User、IdentityFile和ProxyJump,- 主机密钥会与
~/.ssh/known_hosts比对,这个文件与终端共用。
经验法则:只要在终端中 ssh user@host 能用,在 AnyBucket 中就能用。服务器要求输入密码时,密码会存入你的登录钥匙串。
生成密钥并添加到服务器
如果你还没有密钥:
- 打开终端,运行
ssh-keygen -t ed25519。按 Return 键保留默认文件~/.ssh/id_ed25519,然后设置一个密码短语。 - 把公钥
~/.ssh/id_ed25519.pub添加到服务器上的~/.ssh/authorized_keys中,或者发给服务器管理员。切勿分享不带.pub的那个文件。 - 测试一下:
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 提示密钥已更改,请先停下来弄清原因。服务器重建或重装之后,出现新密钥是正常的。否则请不要连接:密钥变化可能意味着与你通信的并不是你以为的那台服务器。进一步了解故障排除。
无法正常工作时
- 先在终端中尝试,使用与 AnyBucket 中完全相同的主机名:
ssh staging。如果失败,问题出在 SSH 配置上,而不是 App。 - 加上
-v(ssh -v staging),查看ssh尝试了哪些密钥和配置行。 - 用
ssh-add -l检查代理:它会列出代理持有的密钥。 - 检查权限:
ssh会拒绝其他用户可读的私钥。运行chmod 600 ~/.ssh/id_ed25519即可解决。
还是不行?请参阅 SFTP 密钥或跳板机无法使用,或者把 ssh -v 显示的内容(去掉任何隐私信息)通过电子邮件发给支持团队。