我有一个TeamCity服务器设置为使用“默认私钥”在代理上从GitHub签出src,并且.ssh中的配置文件如下所示:
Host git@github.com
IdentityFile ~/.ssh/id_rsa.shop
StrictHostKeyChecking no
Host github.com
IdentityFile ~/.ssh/id_rsa.shop
StrictHostKeyChecking no
这很好用。 现在我想从代理商那里推出。 但是当我这样做时,push命令因用户输入而挂起:
The authenticity of host 'github.com (192.30.252.130' can't be established.
RSA key fingerprints is 'xxx....xxx'
Are you sure you want to continue (yes/no)
Warning: Permently added '' to known hosts.
Connection closed by 192.30.252.130
Fatal: The remote end hung up unexpectedly.
如果我手动执行此操作,它仍会失败并且拒绝权限,无论我输入是/否。
“默认私钥”具有符合github的读/写权限,所以有点丢失。 我唯一观察到的是github ip看起来很本地,但是当代理刚刚完成代理端签出时怎么办?这可能是防火墙吗?
任何人都可以向我解释我缺少什么吗?
答案 0 :(得分:3)
事实证明,设置有一个相当大的优势。 显然有理由我不太明白一旦我调用git就改变了用户上下文/配置文件。 这将改变homedir。 这可以通过查看调用配置文件更改的Git etc文件来验证:profile:
# Set up USER's home directory
if [ -z "$HOME" -o ! -d "$HOME" ]; then
HOME="$HOMEDRIVE$HOMEPATH"
if [ -z "$HOME" -o ! -d "$HOME" ]; then
HOME="$USERPROFILE"
fi
fi
if [ ! -d "$HOME" ]; then
printf "\n\033[31mERROR: HOME directory '$HOME' doesn't exist!\033[m\n\n"
echo "This is an error which might be related to msysGit issue 108."
echo "You might want to set the environment variable HOME explicitly."
printf "\nFalling back to \033[31m/ ($(cd / && pwd -W))\033[m.\n\n"
HOME=/
fi
# normalize HOME to unix path
HOME="$(cd "$HOME" ; pwd)"
我通过强制将主目录强制为当前用户来修复此问题:
set HOME=%env.USERPROFILE%
问题出在git的init脚本中。
此外,我不得不将配置修改为:
Host webshop_github
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa.shop
答案 1 :(得分:1)
实际上我已经进一步深入了解并找到了另一个解决方案,感谢@Christian Mikkelsen以及此主题中的答案:git.cmd vs git.exe - what is the difference and which one should be used?。
在手动使用git时,您不应该使用原始git.exe
,而是使用包装器gitk.cmd
或cmd\git.exe
。请注意,cmd\git.exe
与bin\git.exe
不同。 Teamcity本身使用bin\git.exe
,因为它知道如何使用它。但是如果你手动使用git,你应该使用cmd\git.exe
。
您必须解决的问题是如何将cmd\git.exe
的路径传递到您的脚本中。我支持它可以使用自定义参数完成,也可以在执行脚本之前覆盖env.TEAMCITY_GIT_PATH
。