无法使用 launchctl setenv 更改 SSH_AUTH_SOCK

无法使用 launchctl setenv 更改 SSH_AUTH_SOCK

我想将 的值设置SSH_AUTH_SOCK为 OSX El Capitan 系统上的其他位置。我尝试通过执行以下命令来实现此目的:

$ launchctl setenv SSH_AUTH_SOCK ~/.gnupg/S.gpg-agent.ssh

但是,SSH_AUTH_SOCK即使我重新启动终端后仍然保持默认值:

$ echo $SSH_AUTH_SOCK
/private/tmp/com.apple.launchd.XXXXXXXXXX/Listeners

SSH_AUTH_SOCK但有趣的是,当我查询使用的值时launchctl,我得到了想要的结果:

$ launchctl getenv SSH_AUTH_SOCK
/Users/sora/.gnupg/S.gpg-agent.ssh

如何正确设置SSH_AUTH_SOCK系统范围的值?

编辑:SSH_AUTH_SOCK未在任何 shell 启动文件中设置(例如~/.zshrc,,/etc/zshrc/etc/zprofile

答案1

这主要摘自这篇优秀的文章这里

您需要在目录中创建一个~/Library/LaunchAgents包含以下内容的 plist 文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>link-ssh-auth-sock</string>
  <key>ProgramArguments</key>
  <array>
    <string>/bin/sh</string>
    <string>-c</string>
    <string>/bin/ln -sf $HOME/.gnupg/S.gpg-agent.ssh $SSH_AUTH_SOCK</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

应该可以奏效。

相关内容