代码之家  ›  专栏  ›  技术社区  ›  Dan Fabulich

com.jcraft.jsch.jscheexception:认证取消

  •  17
  • Dan Fabulich  · 技术社区  · 14 年前

    我正在尝试编写一个Ant脚本,通过端口隧道检索一个URL。

    当我使用一个密码时(XXXX的名字是为了隐私)效果很好:

    <project default="main">
      <target name="main">
        <sshsession host="xxxx"
        username="xxxx"
        password="xxxx">
          <LocalTunnel lport="1080" rhost="xxxx" rport="80"/>
          <sequential>
            <get src="http://localhost:1080/xxxx" dest="/tmp/xxxx"/>
          </sequential>
        </sshsession>
      </target>
    </project>
    

    但是当我使用一个关键文件时,它不起作用,比如:

        <sshsession host="xxxx"
        username="xxxx"
        keyfile="/Users/xxxx/.ssh/id_dsa"
        passphrase="xxxx">
          <LocalTunnel lport="1080" rhost="xxxx" rport="80"/>
          <sequential>
            <get src="http://localhost:1080/xxxx" dest="/tmp/xxxx"/>
          </sequential>
        </sshsession>
    

    我得到这个例外:

    /tmp/build.xml:8: com.jcraft.jsch.JSchException: Auth cancel
        at com.jcraft.jsch.Session.connect(Session.java:451)
        at com.jcraft.jsch.Session.connect(Session.java:150)
        at org.apache.tools.ant.taskdefs.optional.ssh.SSHBase.openSession(SSHBase.java:223)
    
    • 我确信我使用的是正确的密钥文件(我尝试使用了错误的名称,它给出了合法的fileNotFoundException)。
    • 我可以从命令行成功地执行ssh,而不需要提示输入密码。
    • 我确定我使用的密钥是正确的。

    这个错误的原因是什么?我该怎么做?

    5 回复  |  直到 11 年前
        1
  •  33
  •   Dan Fabulich    14 年前

    我调试了代码。这是失败的,因为我的私钥没有通过身份验证;JSCH悄悄地返回到密码身份验证,这被取消了,因为我没有指定密码。

    JSCH错误处理非常糟糕。重新执行步骤,重新生成(单独的)私钥文件,使用 ssh -i 以确保你使用正确的锉刀,并保持手指交叉。

        2
  •  5
  •   Oscar Bravo    11 年前

    得到 jsch 连接到工作,必须指定 known_hosts 文件和包含私钥的文件。这是用 setKnownHosts addIdentity 方法。

            jsch.setKnownHosts("/path/to/.ssh/known_hosts");
            jsch.addIdentity("/path/to/.ssh/id_rsa");
    

    如果密钥具有密码短语,则可以将其添加到 附加实体 参数列表:

            jsch.addIdentity("/path/to/.ssh/id_rsa", myPassPhrase);
    

    See Javadocs

        3
  •  3
  •   cnu    13 年前

    我在使用sshexec任务时遇到了同样的问题。我也添加了密码短语attibute,它工作得很好。为您的私钥创建一个密码,并将其作为属性添加到您的任务中。另外,如果在Windows上使用puttygen生成密钥,也不要忘记将私钥转换为open ssh格式。

        4
  •  1
  •   kukudas    12 年前

    我今天也遇到了类似的问题。所以我想我也会分享我的解决方案。我也有同样的例外,但问题是我的密码里有一个umlaut。在选择了一个没有密码的新密码之后,一切都正常。

        5
  •  0
  •   Scott    13 年前

    现在有一个全新的JSCH分叉。异常处理更加全面。不再吞咽或默认。从头到头 https://github.com/vngx/vngx-jsch 去看看。如果某件事情不能按您的期望工作,请将其作为问题提出,或者在我们积极维护它的同时发送请求。我们也希望尽快在马文中央休息区得到它。