0

权限被拒绝(publickey,keyboard-interactive)在我尝试从 perl 进行 cvs 结帐时收到此错误。

什么是问题以及如何解决这个问题?

代码 :

system ( "CSVROOT:--- CVSRSH:--- cvs co a ");

# i have proper value in cvs root and cvs rsh .

它单独运行并使用 ssh 密钥

4

2 回答 2

1

诊断错误的步骤:

  • 您使用的是 SSH 密钥吗?
  • 那把钥匙有密码吗?
  • 当你手动运行它时它工作吗?
  • 脚本是否以与手动运行时相同的用户身份运行?
  • 脚本在与手动运行时相同的环境下运行吗?(例如cron作业不在同一环境下运行)

如果你认为所有的答案都是肯定的,那么最后一个答案很可能真的是否定的。如果脚本是从类似的调度程序运行的,cron那么它很可能不会在与手动运行时相同的环境中运行。我通常解决这个问题的方法是在调度程序和 Perl 脚本之间使用 shell 脚本:

#!/bin/bash

source /home/USERNAME/.profile

#set any other environment variables it needs like

export CSVROOT=:pserver:USERNAME@HOST:/path/to/repo
export CVSRSH=ssh

/path/to/perl/script/script.pl
于 2010-06-11T11:14:07.943 回答
1

Chas.提问后的后续调查:

  • 该命令是否通常在/bin/sh或其他一些 shell 下运行?要进行测试,请执行/bin/sh命令以启动 Bourne shell,然后再次手动尝试该命令。我不熟悉“CVSROOT:---”表示法——这意味着设置 CVSROOT 环境变量吗?在 Bourne shell 中,通常使用“=”完成,从未见过“:”使用过。

  • 该命令在手动运行时是否需要您提供一些输入?我从来没有看到cvs co这样做,但我不使用 ssh。

  • 尝试在命令末尾添加重定向,并在运行后查看文件中的内容:

    system ( "CSVROOT:--- CVSRSH:--- cvs co a > /tmp/log_cmd 2>&1");

于 2010-06-11T11:30:31.210 回答