问题标签 [sshj]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
29 浏览

java - 从 sshj 启动时来自控制台的命令不运行

jar从控制台启动 a 并且它运行良好:

当我从远程计算机运行相同的命令时sshj,它返回一个 pid,但在控制台中看不到该进程,实际上该进程没有运行。在这两种情况下,我都通过 ssh、公钥和同一个用户登录。

通过以下方式运行命令的代码sshj

0 投票
1 回答
514 浏览

java - 从 Java 执行 SSH 命令会发送状态码 255,但如果它有效,则在终端中

我正在尝试开发一个小型应用程序,允许我通过 SSH 将某些命令发送到远程服务器。如果我从 Linux 终端或 Windows 命令提示符尝试它,它可以正常工作,但是当我从我的 Java 应用程序执行它时,它总是以状态代码 255 响应。

我禁用了防火墙,并将服务器上监听 SSH 的端口更改为 22,因为我使用了另一个,但没有任何效果。它不会给我抛出异常或任何东西,如果它连接没有问题。有任何想法吗?

我尝试过使用sshjJSch库,但我都遇到了同样的问题。

ForwardAgent 已关闭

sshj 示例

JSch 示例

0 投票
0 回答
313 浏览

log4j - 为使用 slf4j 的外部库的日志配置 Liferay 日志系统

我正在使用库 sshj。这个库使用 slf4j 的日志,但 Liferay 基于 log4j。如何为来自 sshj 的打印日志配置 Liferay 项目。

编辑:我的问题不是我的 liferay portlet 中的 slf4j。但是我正在使用的库在 slf4j 上工作。所以,经过几次尝试,我有来自 ssh 的日志,但它只是信息级别的日志,但我需要调试级别的日志。当我尝试在 liferay 界面中更改日志级别时,它不起作用。

0 投票
2 回答
234 浏览

amazon-ec2 - 使用 ppk 对 sshj 进行 ssh 时出现 InvalidKeySpecException

我正在尝试使用 sshj java 库 ssh 到带有 ppk 文件的 ec2 redhat 实例,我得到 InvalidKeySpecException 。我能够成功地通过 ssh 连接到具有相同 ppk 的其他机器。我想我在 ec2 实例中缺少一些配置,任何帮助将不胜感激。

注意:我可以通过 putty 对有问题的机器进行 ssh。

下面是我在应用程序中得到的堆栈跟踪:

0 投票
1 回答
2639 浏览

java - 使用 sshj 时“JCE 无法验证提供者 BC”

我正在尝试使用sshj库在我公司的现有项目中创建 SFTP 客户端。但是,如果我创建SSHClient实例,我会收到错误消息:

该应用程序使用 maven 来包含依赖项,我添加它是这样的:

sshj 库包括对bcpkix-jdk15onv1.60 和bcprov-jdk15onv1.60 的 bouncycastle (BC) 依赖项,我尝试了以下解决方案:

  1. 自行添加 BC 提供程序,将 sshj 和 BC JAR 直接作为库包含并使用 maven 中提供的范围,如此所述。然后正确添加了提供程序,但仍然失败并显示上面的错误消息。
  2. 将 BC JAR 放在jre/lib/ext文件夹中。
  3. 按照此处所述修改 java.security 文件。
  4. 如此处所述,检查类路径上是否还有另一个 BC 版本。

但是,如果我创建一个新项目并包含 sshj,那么一切都可以正常工作并且符合预期。我比较了执行创建 SSHClient 的 junit 测试的命令,在这两个项目中我都可以找到-classpath.

我对 maven 和 spring 还很陌生,所以我可能会明显遗漏一些东西,为什么在一个新项目中一切都很好,而不是在现有项目中,但我就是想不通。

如果您需要更多信息,我很乐意提供!

0 投票
0 回答
130 浏览

shell - 使用 SSHJ 实现跳转主机

有人提出这个要求,并且有一个拉取请求,其中包含在合并之前以某种方式被重写的代码,并且有人设法根据拉取请求编写了一个解决方案。但是,该库中没有最终版本的示例。

因此,这并不能真正帮助我了解我对 ssh 的有限理解。基本上有两种情况我想解决:

  1. 通过一些跳转主机的常见 SSH 会话:

    • user1@jump1.com
    • user2@jump2.com
    • user3@jump3.com
    • admin@server.com

    以 ssh-session 结束,连接的用户可以在 server.com 的 ssh-shell 中自由工作,即普通ssh admin@server.com-command 在 jump3.com 的 shell 中会做什么。

  2. 与上面类似,但以转发到 server.com:80 的端口结束

ssh's 可以做到这一点ProxyCommand,但我想用 SSHJ 编写代码。这就是我无法弄清楚如何做到这一点的地方。

我现在拥有的是

我注意到 class LocalPortForwarder.DirectTCPIPChannel,但我不知道我应该用什么值来实例化它,或者之后如何将它与其余部分一起使用。

0 投票
1 回答
1379 浏览

java - 如何使用 SSHJ 实现 SSH 用户/密码认证

我正在尝试创建一个 Android 应用程序以通过 SSH 连接到 Dell PowerConnect 交换机,以执行简单的命令任务(例如,关闭/打开 POE 以远程重置 POE 设备的端口)。我正在使用 SSHJ 库,但无法对其进行身份验证。

我终于找到了如何让 SSHJ 在失败后列出接受的身份验证类型,并返回一个选项(公钥)。但是,通过 Linux 和 putty 的 SSH 连接都使用用户名/密码身份验证。戴尔交换机也没有提供任何东西来改变它对我能够找到的连接尝试的回复方式(这并不奇怪,但我检查了以防万一)。

这是我的代码:

我的错误日志显示:

有没有办法强制用户名/密码验证?还是我看错了?

0 投票
0 回答
365 浏览

sshj - 打开文件时出错:java.lang.ArrayIndexOutOfBoundsException:arraycopy:destination index -4 out of bounds for byte[256]

以这种方式打开文件时:

RemoteFile remoteFile = sftpClient.open(path)

我在stacktrace中遇到了以下错误:

java.lang.ArrayIndexOutOfBoundsException:arraycopy:net.schmizz.sshj.connection.channel 处 net.schmizz.sshj.common.Buffer.putRawBytes(Buffer.java:271) 处的字节 [256] 的目标索引 -4 超出范围。 ChannelOutputStream$DataBuffer.write(ChannelOutputStream.java:64) 在 net.schmizz.sshj.connection.channel.ChannelOutputStream.write(ChannelOutputStream.java:141) 在 net.schmizz.sshj.connection.channel.ChannelOutputStream.write(ChannelOutputStream. java:131) 在 net.schmizz.sshj.sftp.SFTPEngine.transmit(SFTPEngine.java:292) 在 net.schmizz.sshj.sftp.SFTPEngine.request(SFTPEngine.java:130) 在 net.schmizz.sshj.sftp .SFTPEngine.doRequest(SFTPEngine.java:136) 在 net.schmizz.sshj.sftp.SFTPEngine.open(SFTPEngine.java:141) 在 net.schmizz.sshj.sftp.SFTPClient.open(SFTPClient.java:68) 在net.schmizz。sshj.sftp.SFTPClient.open(SFTPClient.java:73) 在 net.schmizz.sshj.sftp.SFTPClient.open(SFTPClient.java:78) 在 com.echovox.paidle.common.util.SftpUtil.getFileDataListFromZip(SftpUtil. java:86) at com.echovox.paidle.common.util.SftpUtil.lambda$getFileDataWithRetry$1(SftpUtil.java:139) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java。 util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:834)在 com.echovox.paidle.common.util.SftpUtil.getFileDataListFromZip(SftpUtil.java:86) 打开(SFTPClient.java:78)在 com.echovox.paidle.common.util.SftpUtil.lambda$getFileDataWithRetry$1(SftpUtil.java :139) 在 java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) 在 java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) 在 java. base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang。线程.run(线程.java:834)在 com.echovox.paidle.common.util.SftpUtil.getFileDataListFromZip(SftpUtil.java:86) 打开(SFTPClient.java:78)在 com.echovox.paidle.common.util.SftpUtil.lambda$getFileDataWithRetry$1(SftpUtil.java :139) 在 java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) 在 java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) 在 java. base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang。线程.run(线程.java:834)lambda$getFileDataWithRetry$1(SftpUtil.java:139) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor .java:304) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在java.base/java.lang.Thread.run(Thread.java:834)lambda$getFileDataWithRetry$1(SftpUtil.java:139) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor .java:304) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在java.base/java.lang.Thread.run(Thread.java:834)concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:834)concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:834)

我发现了 3 个open方法的实现:

public RemoteFile open(String filename)

public RemoteFile open(String filename, Set<OpenMode> mode)

public RemoteFile open(String filename, Set<OpenMode> mode, FileAttributes attrs)

是否可以以某种方式使用Set<OpenMode> mode和/或FileAttributes attrs避免这个问题?

0 投票
1 回答
647 浏览

java - 使用 SSHJ 和 ed25519 的 SFTP 上传遇到关键问题

我正在尝试使用 ed25519 身份验证设置 SFTP 上传,但我不断收到此错误:

线程“主”java.lang.UnsupportedOperationException 中的异常:不知道如何解码密钥:ssh-ed25519

这是我的代码:

我错过了什么?

0 投票
1 回答
1529 浏览

java - NoClassDefFoundError: org/bouncycastle/openssl/PEMParser 在 Jenkins 上使用 SSHJ 时

我正在使用 SSHJ 在远程服务器上执行命令,连接方式如下:

当我在我的 IDE 中运行它时,它运行没有问题。但是,当我尝试使用 Gradle 在 Jenkins 环境中运行它时,我得到以下堆栈跟踪:

我尝试将 bouncycastle 添加为单独的依赖项(bcprov 和 bcpkix 包),即使 SSHJ 引入了它,我已经使用了一堆版本,我尝试过启用和禁用 Jenkins bouncycastle 插件。我也尝试过使用 schmizz SSHJ 而不是 Hierynomus。

我正在使用 Java 8、Gradle 3.2.1(原因)、Jenkins 2.190.3 和 Hierynomus SSHJ 0.27。