【问题标题】:Git authentication for perl CGI-Script via .netrc通过 .netrc 对 perl CGI-Script 进行 Git 身份验证
【发布时间】:2013-09-24 10:12:45
【问题描述】:

我有一个小 perl 脚本,它尝试从 git 存储库中提取,然后从 git log 中获取一些东西:

 use Git::Repository;
 my $repo = Git::Repository->new(
         git_dir => $git_path,
 );
 $repo->run('pull') || die $!;
 my @commits = $repo->run(log);
 ...

对于身份验证,我有一个.netrc-文件,其中我的凭据位于/home/bla。当脚本从 shell 运行时,这非常有效。现在我尝试将此脚本用于 Web 应用程序:

my $evil_commits = `./list_commits.pl`;

当我这样做时,它会产生以下错误消息:

[Thu Sep 19 12:50:49 2013] [error] [client <>] fatal: Could not read password: No such device or address at ./list_commits.pl line 45

我已经尝试在 CGI 脚本中设置 $ENV{HOME} 但这没有帮助。关于我在这里缺少什么的任何建议?

【问题讨论】:

  • 您的网络应用程序是否使用与~/.netrc 所在的用户帐户相同的用户帐户运行?
  • 不,但我无法想象这有什么不同,因为我将$ENV{HOME} 更改为正确的目录并且我没有收到permission denied 的错误消息。即使.netrc 文件上的chmod 777 也不会改变任何东西。我很难想象这个错误与运行脚本的用户有关。
  • 我会说,它确实有所作为。
  • 您能否解释一下为什么这个确切的错误可能是由于用户不同而不是仅仅说明它“确实有所作为”而导致的?甚至可能提供“更改用户”以外的解决方案,因为这对我来说是不可能的,因为我没有机器上的管理权限。
  • 我怀疑curl 库(最终由git pull 调用)依赖netrc 获取凭据~/.netrc 中查找它,而不是在$HOME/.netrc 中查找它(和the two can be different)。不过,我现在还没有解决办法。

标签: git perl apache cgi .netrc


【解决方案1】:

您可以尝试从脚本中打印当前目录。这样您就可以更改路径,使其指向正确的文件。


除此之外,我建议您使用 ssh-keys。在这种情况下,您不需要任何密码文件。

【讨论】:

  • 两个脚本都在同一个目录中,所以这不是问题。由于$repo-&gt;run('pull') || die $!;list_commits.pl-script 运行并死亡。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 2017-09-18
  • 1970-01-01
  • 2019-01-14
  • 2017-04-07
  • 2015-12-08
  • 2011-06-25
相关资源
最近更新 更多