【问题标题】:How to connect to a remote machine with username and password using sshj java api?如何使用 sshj java api 使用用户名和密码连接到远程机器?
【发布时间】:2014-03-01 20:35:43
【问题描述】:

如何使用 sshj java api 通过用户名和密码连接到远程机器?

我试过这段代码。这段代码有什么问题?

final SSHClient ssh = new SSHClient();
        ssh.connect("192.168.0.1");
        ssh.authPassword("abcde", "fgh".toCharArray());
        try {
            final Session session = ssh.startSession();
            try {
                final Command cmd = session
                        .exec("cd /home/abcde/Desktop/");
                System.out.println(IOUtils.readFully(cmd.getInputStream())
                        .toString());
                cmd.join(5, TimeUnit.SECONDS);
                System.out.println("\n** exit status: " + cmd.getExitStatus());
            } finally {
                session.close();
            }
        } finally {
            ssh.disconnect();
        }

它正在抛出以下错误。

net.schmizz.sshj.transport.TransportException: [HOST_KEY_NOT_VERIFIABLE] 无法验证 ssh-rsa 主机密钥 指纹******** 用于端口22 上的192.168.0.1

【问题讨论】:

标签: java ssh sshj


【解决方案1】:

你通过实现 HostKeyVerifier 来解决你的问题

class NullHostKeyVerifier implements HostKeyVerifier {
    @Override
    public boolean verify(String arg0, int arg1, PublicKey arg2) {
        return true;
    }        
}

并将这个假实现添加到您的 SSHClient 实例配置中:

...
    final SSHClient ssh = new SSHClient();
    ssh.addHostKeyVerifier(new NullHostKeyVerifier());
...

【讨论】:

  • 或者,只使用 sshj 提供的验证器,它使用以下方法执行相同的操作:ssh.addHostKeyVerifier(new PromiscuousVerifier());
【解决方案2】:

在 SSHClient 实例化后插入 ssh.loadKnownHosts();ssh.loadKnownHosts("somepath");

然后将您尝试连接的机器(远程)(192.168.0.1)添加到默认位置或“somepath”的 known_hosts 文件(在您的机器上)。对于 Linux 框默认路径将是 /home/myuser/.ssh/known_hosts,或在 Windows 框 c:/user/myuser/.ssh/known_hosts

known_host 采用 openSSH 格式(ip/或主机名算法密钥注释)。

将机器添加到 known_hosts:

-如果您使用的是 Linux(在您的机器上),只需 ssh 到远程机器,它将自动添加到 known_hosts。

-如果您使用的是 Windows,请使用bitwise tunnelier 连接到远程计算机,它将存储密钥。转到按位密钥管理器(它将在您的开始菜单,按位文件夹中)并将带有远程计算机 ip 的行导出为 openSSH 格式。将结果行复制到您的 known_host 文件中。

这样您将真正验证主机密钥。在不能将 nullhost 验证程序添加到 ssh 连接器(我的情况)的 mule esb 中,它也很有帮助。

【讨论】:

    【解决方案3】:

    你错过了 ssh 密钥,只需添加

    ssh.addHostKeyVerifier("10:20......");
    

    10:20... 来自您的例外:“带指纹 ********

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      相关资源
      最近更新 更多