macOS 下在 图形界面(ns port)无法正常使用 github-clone.el

如题,在 macOS 下 spacemacs 开启githublayer ,按照文档在 github 生成 token 后加入 git config,SPC g h c c github-clone提示:

ssh_askpass: exec(/usr/X11R6/bin/ssh-askpass): No such file or directory
Permission denied (publickey).
fatal: Could not read from remote repository.

查找资料后了解到 macOS 上并没有 ssh-askpass,似乎通过在终端外的应用调用 ssh 时就需要用到这个。然后我通过 brew 安装了 mac-ssh-askpass

重新测试,还是显示那个错误提示。感觉是 SSH_ASKPASS 的路径设置问题。

(setenv "SSH_ASKPASS" "/usr/local/bin/ssh-askpass")

然后就弹出了个窗口提示输入 ssh key 的密码。看样子是成功了。(但是我很奇怪为什么是图形窗口而不是在 minibuffer 中提示)

回过来看,发现 gh.el 之类的相关项目似乎并没有提过这样的 issue。

所以,这是我的相关配置不到位嘛?是否用 https 就不会有这样的问题?还是说设置 ssh_askpass 环境变量已经是正解了?总之是否有更好的办法?


然后我发现了一个比较坑的问题:图形窗口没地方输密码!!!

确实没有,但是也没地方说(或者暗示)应该有。

是啊,所以其实问题没解决啊。

就是要迫使你使用 keyfile。

如果你在一个频繁出现的场景下输密码,有可能:

  • 你的密码很简单。
  • 你的密码很复杂(例如随机数),但是你存放在一个容易拿到的地方,便于随时可以 ctrl-c/v

应该用不着安装,GitHub: Working with SSH key passphrases 说把你的 SSH key 加给 ssh-agent 就行了,之后再用这个 SSH Key 就不用输入密码了。macOS 下 ssh-agent 和 Keychain 自动集成了。

另外,你也可以选择不给 SSH key 设置密码,这样压根用不着输入密码了。

通过 https git-clone 用不着任何认证。但是如果要 git-push,就用提供用户名密码。

1 个赞

虽然还没怎么明白。但是通过链接中的方法: 在终端运行ssh-add就不需要ssh-askpass就能正常运作了

那个链接说的就是 ssh 日常正确使用方法。

https://m.th7.cn/show/49/201609/182348.html

感觉还是有点细节问题没解决,比如每次重启以后都要重新’ssh-add’,把相关链接先贴上。

  • 首先,给你的密钥起个名字。很多文章都教你用 id_rsa,真是糟糕的示范。
  • 其次,没必要设置 Keychain,任何类 unix 系统,只要设置 ~/.ssh/config 就可以了。

例如:

$ cat ~/.ssh/config

# default
Host github
    Hostname github.com
    User git
    IdentityFile ~/.ssh/id_rsa_github

# another account
Host github2
    Hostname github.com
    User git
    IdentityFile ~/.ssh/id_rsa_github2

...

Host anysite
    Hostname anysite.com
    User anyaccount
    IdentityFile ~/.ssh/id_rsa_anysite
1 个赞

Apparently OSX Sierra made it so you don’t get your keys back when you login, so you’ll have to do this every time you start your computer. BUT, there’s a nice way to fix this from the Apple stack exchange

我看到这句以后感觉很无语。macOS Sierra 似乎把自动使用 keychain 登陆 ssh 的功能取消了(可手动用 ssh-add -A调用)。在链接里面看到解决方案就是用 ssh config,不过 macOS 有一些额外的可用选项。

Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_rsa

同时多谢热情解答!