问题标签 [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.
java - 从 sshj 启动时来自控制台的命令不运行
我jar
从控制台启动 a 并且它运行良好:
当我从远程计算机运行相同的命令时sshj
,它返回一个 pid,但在控制台中看不到该进程,实际上该进程没有运行。在这两种情况下,我都通过 ssh、公钥和同一个用户登录。
通过以下方式运行命令的代码sshj
:
log4j - 为使用 slf4j 的外部库的日志配置 Liferay 日志系统
我正在使用库 sshj。这个库使用 slf4j 的日志,但 Liferay 基于 log4j。如何为来自 sshj 的打印日志配置 Liferay 项目。
编辑:我的问题不是我的 liferay portlet 中的 slf4j。但是我正在使用的库在 slf4j 上工作。所以,经过几次尝试,我有来自 ssh 的日志,但它只是信息级别的日志,但我需要调试级别的日志。当我尝试在 liferay 界面中更改日志级别时,它不起作用。
amazon-ec2 - 使用 ppk 对 sshj 进行 ssh 时出现 InvalidKeySpecException
我正在尝试使用 sshj java 库 ssh 到带有 ppk 文件的 ec2 redhat 实例,我得到 InvalidKeySpecException 。我能够成功地通过 ssh 连接到具有相同 ppk 的其他机器。我想我在 ec2 实例中缺少一些配置,任何帮助将不胜感激。
注意:我可以通过 putty 对有问题的机器进行 ssh。
下面是我在应用程序中得到的堆栈跟踪:
java - 使用 sshj 时“JCE 无法验证提供者 BC”
我正在尝试使用sshj库在我公司的现有项目中创建 SFTP 客户端。但是,如果我创建SSHClient
实例,我会收到错误消息:
该应用程序使用 maven 来包含依赖项,我添加它是这样的:
sshj 库包括对bcpkix-jdk15on
v1.60 和bcprov-jdk15on
v1.60 的 bouncycastle (BC) 依赖项,我尝试了以下解决方案:
- 自行添加 BC 提供程序,将 sshj 和 BC JAR 直接作为库包含并使用 maven 中提供的范围,如此处所述。然后正确添加了提供程序,但仍然失败并显示上面的错误消息。
- 将 BC JAR 放在
jre/lib/ext
文件夹中。 - 按照此处所述修改 java.security 文件。
- 如此处所述,检查类路径上是否还有另一个 BC 版本。
但是,如果我创建一个新项目并包含 sshj,那么一切都可以正常工作并且符合预期。我比较了执行创建 SSHClient 的 junit 测试的命令,在这两个项目中我都可以找到-classpath
.
我对 maven 和 spring 还很陌生,所以我可能会明显遗漏一些东西,为什么在一个新项目中一切都很好,而不是在现有项目中,但我就是想不通。
如果您需要更多信息,我很乐意提供!
shell - 使用 SSHJ 实现跳转主机
有人提出这个要求,并且有一个拉取请求,其中包含在合并之前以某种方式被重写的代码,并且有人设法根据拉取请求编写了一个解决方案。但是,该库中没有最终版本的示例。
因此,这并不能真正帮助我了解我对 ssh 的有限理解。基本上有两种情况我想解决:
通过一些跳转主机的常见 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 中会做什么。与上面类似,但以转发到 server.com:80 的端口结束
ssh's 可以做到这一点ProxyCommand
,但我想用 SSHJ 编写代码。这就是我无法弄清楚如何做到这一点的地方。
我现在拥有的是
我注意到 class LocalPortForwarder.DirectTCPIPChannel
,但我不知道我应该用什么值来实例化它,或者之后如何将它与其余部分一起使用。
java - 如何使用 SSHJ 实现 SSH 用户/密码认证
我正在尝试创建一个 Android 应用程序以通过 SSH 连接到 Dell PowerConnect 交换机,以执行简单的命令任务(例如,关闭/打开 POE 以远程重置 POE 设备的端口)。我正在使用 SSHJ 库,但无法对其进行身份验证。
我终于找到了如何让 SSHJ 在失败后列出接受的身份验证类型,并返回一个选项(公钥)。但是,通过 Linux 和 putty 的 SSH 连接都使用用户名/密码身份验证。戴尔交换机也没有提供任何东西来改变它对我能够找到的连接尝试的回复方式(这并不奇怪,但我检查了以防万一)。
这是我的代码:
我的错误日志显示:
有没有办法强制用户名/密码验证?还是我看错了?
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
避免这个问题?
java - 使用 SSHJ 和 ed25519 的 SFTP 上传遇到关键问题
我正在尝试使用 ed25519 身份验证设置 SFTP 上传,但我不断收到此错误:
线程“主”java.lang.UnsupportedOperationException 中的异常:不知道如何解码密钥:ssh-ed25519
这是我的代码:
我错过了什么?
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。