【发布时间】:2018-05-05 02:21:52
【问题描述】:
我正在尝试使用 R 中的 system() 函数(在 Windows 7 64 位上)使用公共 SSH 密钥执行 git 命令。当我尝试执行 git 命令时,出现以下错误:
ssh_askpass: exec(rpostback-askpass): No such file or directory
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
我可以在命令提示符下运行完全相同的命令并且它可以工作。我也可以在 git bash shell 上运行完全相同的命令并且它可以工作。我不确定为什么cmd 在使用system() 命令从R 运行时找不到密钥。有没有办法为system() 命令使用的命令提示符指定关键位置?
更新: 一个不起作用的示例调用:
system("git push --set-upstream git@gitlab.mygit.com:MyGroup/testGitlab.git master")
还有
system("git clone git@gitlab.mygit.com:MyGroup/gitLabTest.git")
这两个调用都得到上述相同的错误。
更新 2: 使用 list.files() 从 R 中似乎看不到 ssh 密钥
> list.files("C:/Users/Me/Documents/.ssh/", all.files = TRUE)
[1] "." ".."
我已验证此目录中有多个 ssh 密钥,这些密钥在 git bash shell 中使用 ls -a 可见。
【问题讨论】:
-
您对
system()的调用到底是什么样的? -
您的私钥密码是否受保护?
-
不,密钥没有密码。同样,完全相同的命令在命令提示符下运行,无需任何额外输入。
-
只是仔细检查:您的 shell 启动选项(
.bashrc等)不要使用ssh-add之类的东西来将密钥信息添加到钥匙串?env | grep SSH能带你到任何地方吗? -
@BenBolker 我不确定我是否理解您的问题?如果我打开 git bash (这是我生成密钥的地方),我可以查看密钥文件并且一切都按预期工作。在 Windows 命令提示符下,我可以毫无问题地从 gitLab 推送和拉取,但是当我在 .ssh 目录中
ls -a时,我只得到.和..,没有可见的密钥文件。最后,当我尝试通过 R 会话中的system()运行相同的命令时,我得到了上述 ssh 错误。感谢您的观看!