macOS+Fish Shell环境下如何迁移SSH密钥相关文件至指定目录并彻底清理~/.ssh目录
macOS+Fish Shell环境下如何迁移SSH密钥相关文件至指定目录并彻底清理~/.ssh目录
兄弟我懂你的痛点!想把根目录的一堆.dot文件清干净,结果SSH这玩意儿老是揪着/.ssh不放,太烦人了。我之前在macOS+Fish环境下也折腾过这个,给你捋捋能彻底解决的步骤,帮你完全摆脱/.ssh目录:
核心问题排查
你之前踩的坑主要有两个:
- SSH的配置文件不支持环境变量展开——你在
$XDG_CONFIG_HOME/ssh/config里写的$XDG_CONFIG_HOME,SSH根本识别不了,自然找不到known_hosts; - 环境变量
SSH_CONFIG可能没在Fish的全局配置里生效,导致新终端会话读取不到。
一步步解决
1. 先把XDG和SSH的环境变量配置好
Fish的全局变量要写到~/.config/fish/config.fish里才能永久生效,打开这个文件添加以下内容:
# 设置XDG_CONFIG_HOME(如果还没设置的话) set -Ux XDG_CONFIG_HOME "$HOME/.config" # 指定SSH的配置文件路径 set -Ux SSH_CONFIG "$XDG_CONFIG_HOME/ssh/config"
添加完后,重启你的Fish终端,或者执行source ~/.config/fish/config.fish让配置立即生效。
2. 修改SSH配置文件,用绝对路径替代环境变量
打开你放在$XDG_CONFIG_HOME/ssh/config的配置文件,把所有用环境变量的地方换成绝对路径或者~路径(SSH能识别~代表用户家目录):
# 全局和用户的known_hosts都指定到我们的目标目录 GlobalKnownHostsFile ~/.config/ssh/known_hosts UserKnownHostsFile ~/.config/ssh/known_hosts Host github.com AddKeysToAgent yes UseKeychain yes # 密钥文件也用绝对路径 IdentityFile ~/.config/ssh/id_ed25519
3. 测试配置是否生效
先测试SSH连接,比如连GitHub验证:
ssh -T git@github.com
如果能正常返回欢迎信息,说明配置已经生效了。
4. 彻底删除~/.ssh目录
确认一切正常后,就可以删掉那个烦人的~/.ssh目录了:
rm -rf ~/.ssh
额外优化:如果你的OpenSSH版本太老
macOS自带的OpenSSH版本可能偏旧,对XDG规范的支持不够好。如果上面的步骤没生效,可以用Homebrew装最新版的OpenSSH:
# 安装最新OpenSSH brew install openssh # 把brew版的SSH加到PATH最前面(Apple Silicon的Mac用/opt/homebrew/bin/ssh) set -U fish_user_paths /usr/local/bin/ssh $fish_user_paths
然后重启终端,再按上面的步骤测试即可。
关于根目录整理的小建议
除了SSH,其他工具也可以遵循XDG规范迁移配置:
- Git:把
~/.gitconfig移到~/.config/git/config,设置set -Ux GIT_CONFIG ~/.config/git/config; - Node.js/npm:设置
set -Ux NPM_CONFIG_USERCONFIG ~/.config/npm/config; - 大部分现代工具都支持通过环境变量指定配置目录,慢慢迁移后,你的根目录就能清爽很多啦!
备注:内容来源于stack exchange,提问作者Lanny




