macOS默认的SSH存储公钥密码
1. 前言
自从更新 macOS 的 SSH 后1,每次用 SSH 时,都被要求输入公钥密码,如:
ssh -T git@github.com
# 显示
Enter passphrase for key …
一般地,输入一次后,后面都不需要输入公钥密码。
但是,重启电脑后,还是需要再次输入公钥密码。
一种思路是:在创建私钥和公钥时,设置公钥密码为空。不过,不推荐这种方法,因为不安全。
另外一种思路是:还原 macOS 默认的 SSH ,并进行 keychain 设置。
2. 删除 brew 安装的 openssh 版本 SSH
brew remove openssh
Uninstalling /opt/homebrew/Cellar/openssh/9.6p1... (45 files, 6.4MB)
3. 设置苹果默认 SSH 的 keychain
通过终端查询苹果默认的 ssh-add: man ssh-add
(macOS 13.6; February 4, 2022),发现有以下两个功能:
--apple-use-keychain
When adding identities, each passphrase will also be stored in the user's keychain.
When removing identities with -d, each passphrase will be removed from it.
--apple-load-keychain
Add identities to the agent using any passphrase stored in the user's keychain.
注意⚠️:ssh-add --apple-use-keychain --apple-load-keychain
是 macOS 系统特有的。用 brew install openssh
安装的 OpenSSH 没有这个功能。
第一步,添加 keychain:
/usr/bin/ssh-add --apple-use-keychain ~/.ssh/id_ed25519_name
第二步,使用 keychain,以下内容加入 ~/.zshrc
文件 :
# ssh apple-keychain 06.Jan.2024
# Add my keys to the ssh agent; passwords are pulled from the keychain.
# The --apple-load-keychain option is unique to MacOS.
/usr/bin/ssh-add --apple-load-keychain 2> /dev/null
注意⚠️:2> /dev/null
的作用是不显示过程文字 Identity added: /Users/name/.ssh/id_ed25519_name ...
。
第三步,配置 SSH ,在 ~/.ssh/config
文件里加入以下内容:
Host *
AddKeysToAgent yes
IgnoreUnknown UseKeychain
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519_name
经过以上三步,SSH 公钥密码就被存储在用户的 keychain 里。
每次重启电脑并打开终端时,会自动加载 keychain 里存的公钥密码;而后, SSH 就能访问用户的 keychain 里存的公钥密码,避免了每次都要输入公钥密码的情形。