无法验证 com.trilead.ssh2.Connection

问题描述 投票:0回答:2

嘿!

我正在使用

com.trilead.ssh2.Connection
中的
java 7
打开连接。

测试时,我在端口

localhost
上打开与
22
的连接:

Connection connection = new Connection("localhost", 22);

然后我尝试使用

authenticateWithPublicKey
方法进行身份验证:

char[] key = IOUtils.toString(new FileInputStream("keyLocation")).toCharArray();
boolean authenticated = connection.authenticateWithPublicKey("myUsername", key, "");

但它没有进行身份验证。我正在

mac sierra
上运行,我想知道这是否有什么关系。我正在使用一对
dsa
键。

谢谢!!

java authentication connection java-7
2个回答
1
投票

我无法解决

dsa
一对密钥的问题(我相信这与密钥大小有关,而dsa是1024)。我创建了一对新的
rsa
密钥,大小为 2048。正如信息一样,我将编写成功管理从我的 mac Sierra 配置的 java 代码验证连接的步骤:

我在

.ssh/
目录:

ssh-keygen -t rsa -f 'key_name'
cat key_name.pub                # copy the public key
# add the public key to authorized_keys file
ssh-add -K key_name
ssh-add -A
ssh-add -l                      # just to check if key is added

就是这样,我成功地验证了连接。


0
投票

有几点我想评论一下:

  1. 对于您的情况,看来您使用了错误的方法。你必须尝试
    authenticateWithDSA
    。当我连接其他电脑而不是本地主机时,我测试了它如何与
    authenticateWithPublicKey
    一起工作。
    如果有人需要,我想与构建命令共享完整的代码(当然,Maven 存储库中的 jar 版本可能不同)有一天。
  2. 该方法的名称具有误导性,因为它需要私钥,而不是公钥,尽管它被称为authenticateWithPublicKey。
  3. 是的,源主机的公钥应添加到目标主机的 ~/.ssh/authorized_keys 中。

所以工作代码如下所示:

import java.io.File;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import com.trilead.ssh2.Connection;
  
public class ConnectSSH
{
    public static void main(String[] args)
    {
        try {
            Connection connection = new Connection("destination_host.com", 22);
            connection.connect();
            boolean authenticated = connection.authenticateWithPublicKey("loginAsUser", new File(System.getenv("HOME") + "/.ssh/id_rsa"), "");
            System.out.println("Authenticated: " + authenticated);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            connection.exec("set", out); // execute some command(s)
            connection.close();
            System.out.println(out.toString());
        } catch (Exception e) {
            System.out.println("Exception!");
            e.printStackTrace();
        }
    }
}

如何构建和运行它:

git clone https://github.com/jenkinsci/trilead-ssh2.git
git checkout trilead-ssh2-build-217-jenkins-27
cd trilead-ssh2-build-217-jenkins-27
mvn -Drevision=build-217-jenkins -Dchangelist=999999-SNAPSHOT clean install
javac -cp .:$HOME/temp/trilead-ssh2/target/classes:$HOME/.m2/repository/commons-io/commons-io/2.2/commons-io-2.2.jar ConnectSSH.java
java -cp  .:$HOME/temp/trilead-ssh2/target/classes:$HOME/.m2/repository/net/i2p/crypto/eddsa/0.3.0/eddsa-0.3.0.jar:$HOME/.m2/repository/commons-io/commons-io/2.2/commons-io-2.2.jar ConnectSSH
© www.soinside.com 2019 - 2024. All rights reserved.