You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

macOS+Fish Shell环境下如何迁移SSH密钥相关文件至指定目录并彻底清理~/.ssh目录

macOS+Fish Shell环境下如何迁移SSH密钥相关文件至指定目录并彻底清理~/.ssh目录

兄弟我懂你的痛点!想把根目录的一堆.dot文件清干净,结果SSH这玩意儿老是揪着/.ssh不放,太烦人了。我之前在macOS+Fish环境下也折腾过这个,给你捋捋能彻底解决的步骤,帮你完全摆脱/.ssh目录:

核心问题排查

你之前踩的坑主要有两个:

  1. SSH的配置文件不支持环境变量展开——你在$XDG_CONFIG_HOME/ssh/config里写的$XDG_CONFIG_HOME,SSH根本识别不了,自然找不到known_hosts
  2. 环境变量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

火山引擎 最新活动