繁体   English   中英

在 Bash 脚本中 ssh 之后的 git pull

[英]git pull after ssh in Bash Script

对于上下文,我正在尝试在我的本地计算机 (A) 上创建一个部署脚本,以将我的代码部署到远程服务器 (B)。 我在 B 上没有 root 访问权限。

以下是与此相关的我的 bash 脚本的内容:

ssh $SSH_ENDPOINT /bin/bash << EOF
cd ~/$PROJECT
git pull

我可以ssh成功,然后cd进入目录。 但是, git pull失败并显示:

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

在 A 和 B 上,我已经使用 GitHub 设置了 SSH,它工作正常,我可以推送和拉取,而无需输入任何密码或任何类似的东西。

我不完全确定为什么会抛出这个错误,因为两个公钥都应该工作。

编辑:用ssh-vv给出:

debug2: channel 0: rcvd ext data 32
Permission denied (publickey).
debug2: channel 0: written 32 to efd 6
debug2: channel 0: rcvd ext data 126
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

不太确定如何从这里开始。

我可以ssh成功,然后cd进入目录

但与哪个用户?
如果您 ssh 并尝试失败的git pull ,请在(在您的交互式 SSH 测试会话中)a 之后尝试它

export GIT_SSH_COMMAND='ssh -Tv'

这样,您将看到涉及 SSH 的任何 Git 操作都考虑了哪些用户/密钥。

根据您在VonC 的回答下的评论,一旦您机器$SSH_ENDPOINT上运行命令,就会出现问题。 在那里运行的 Git 命令使用安装在那里的ssh程序,需要读取密码来解密机器$SSH_ENDPOINT上的密钥。

有两种方法可以处理问题:

  • 不要使用密码短语加密的密钥; 或者
  • 请使用 ssh 代理,并让代理进行传递(请参阅ssh 手册中的-A代理转发)。

在后一种情况下,您根本不需要将私钥存储在机器$SSH_ENDPOINT上。 如果您需要使用Identity和/或IdentitiesOnly行选择特定的公钥,只需使用正确的公钥创建.ssh目录。 (如果只有一个密钥可以使用,您可能不需要任何这些,但在我过去使用的设置中,我总是有多个公钥,需要 ssh 从中选择正确的一个。)

请注意,代理将在您的本地机器上运行(您的问题中的“机器 A”)。 将在机器 B 上运行传递,按需从机器 A 获取私钥。 如果机器 A 上的密钥需要密码,您可能必须在那时提供它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM