【问题标题】:issue while ssh while using sshj in java在 java 中使用 sshj 时出现 ssh 问题
【发布时间】:2010-09-02 16:12:18
【问题描述】:

我正在尝试与服务器建立远程连接以执行一些命令。 我是新手,所以开始谷歌搜索。经过一番搜索,我试了一下:

我正在使用sshj0.2.3.jar.

这是我的实现方式:

public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
    final SSHClient ssh = new SSHClient();
    ssh.loadKnownHosts();
    ssh.connect("serverName");
    try{
        ssh.authPublickey("myUserId");
        final Session session = ssh.startSession();
        try{
            final Command cmd = session.exec("net send myMachineName Hello!!!");
            System.out.println(cmd.getOutputAsString());
            System.out.println("\n Exit Status: "+cmd.getExitStatus());
        }finally{
            session.close();
        }
        }finally{
            ssh.disconnect();
        }   
    }

}

但我得到以下异常:

线程“main”中的异常 java.lang.NoClassDefFoundError: org.slf4j.LoggerFactory 在 net.schmizz.sshj.DefaultConfig.(DefaultConfig.java:92) 在 net.schmizz.sshj.SSHClient.(SSHClient.java:133) 在 SSHTEST.main(SSHTEST.java:24) 引起:java.lang.ClassNotFoundException:org.slf4j.LoggerFactory 在 java.net.URLClassLoader.findClass(URLClassLoader.java:419) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:643) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:345) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:609) ......

我需要额外的罐子吗,我需要多少额外的罐子。我执行正确吗? 请帮忙。

提前致谢。

【问题讨论】:

    标签: java ssh sshj


    【解决方案1】:

    通过谷歌搜索sshjfirst result 揭示了答案:

    依赖关系

    Java 6+。 slf4j 是必需的。 强烈推荐bouncycastle 使用某些加密货币所需的 算法。 jzlib 是必需的 使用 zlib 压缩。

    【讨论】:

    • 我使用的是 1.5 java。有没有别的办法。我只想在远程服务器中执行一些命令。谢谢。
    • 是的 - 您需要 slf4j 来解析您看到的特定消息。
    • 我从 slf4j.org/download.html 下载了 zip 文件,但我遇到了同样的错误。
    • 我现在收到此异常:线程“main”中的异常 java.io.IOException: 无法在 SSHTEST 的 net.schmizz.sshj.SSHClient.loadKnownHosts(SSHClient.java:528) 加载 known_hosts .main(SSHTEST.java:25)
    • 库读取默认位置 ~/.ssh/known_hosts 中的 known_hosts 文件。创建一个最简单的方法是使用 ssh 登录到远程服务器一次。 ssh 要求确认并为远程主机创建一个条目。从现在开始,Java 可以安全地使用这台主机了。如果要使用来自其他位置的文件,请使用其他版本的 loadKnownHost,并将文件的位置作为参数。这在 Windows 或示例上可能很有用。
    【解决方案2】:

    是的,你需要 slf4j 的 jars(见 the 2-page manual

    slf4j 带有一个 API,然后是一个可插拔的实现,但是建议的 slf4j-simple 应该没问题

    【讨论】:

    • 我使用的是 1.5 java。有没有别的办法。我只想在远程服务器中执行一些命令。谢谢。
    • slf4j 没有特殊要求,AFAIK 与 Java 1.4 兼容。如果你把它放在类路径中,这个错误就会消失,你将能够在控制台上查看日志消息
    • 我现在收到此异常:线程“main”中的异常 java.io.IOException: 无法在 SSHTEST 的 net.schmizz.sshj.SSHClient.loadKnownHosts(SSHClient.java:528) 加载 known_hosts .main(SSHTEST.java:25)
    • 库读取默认位置 ~/.ssh/known_hosts 中的 known_hosts 文件。创建一个最简单的方法是使用 ssh 登录到远程服务器一次。 ssh 要求确认并为远程主机创建一个条目。从现在开始,Java 可以安全地使用这台主机了。如果要使用来自其他位置的文件,请使用其他版本的 loadKnownHost,并将文件的位置作为参数。这在 Windows 或示例上可能很有用。
    【解决方案3】:

    slf4j 只是一个门面,你需要提供一个具体的实现。如果您真的不关心日志记录,请坚持使用 slf4j 发行版中存在的 slf4j-nop-$(ver).jar。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-05
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 2013-03-17
      • 1970-01-01
      • 2011-05-22
      相关资源
      最近更新 更多