如何使用SFTP协议的JSch检查读取权限?
我知道有getPermissions()方法,但我不知道如何使用它.如果用户可以读取文件? 如何使用JSCH检查? 解决方案 首先,您通常应该提出一个功能性问题(您想实现什么目标),以获得有用的答案.您要求实施/技术细节,因此我可能无用的技术答案: SftpATTRS.getPermissions()返回 *NIX权限的数值表示: https:////en.wikipedia.orgg/wikipedia.org/wiki/file-system_permissions_permissionsumeric_numeric_notiation/file--wiki.org and.orgipedia.ordia.orgipedia.orgipedia.orgipedia.orgipedia.orgipedia.orn.orgia.orgia > 它本身还不足以确定当前用户是否具有读取文件的权限.另外,您必须知道:谁是文件的所有者(getUId返回所有者ID,但是SF
0 2023-05-25
编程技术问答社区
使用Jsch生成4096位RSA密钥的速度比2048位慢得多
我需要为客户端/服务器应用程序创建公共和私人RSA键,并且我正在使用 jsch图书馆这样做.到目前为止,我一直在生成4096位键,因为我想拥有最好的安全性.但是,这需要3〜5分钟,而产生2048位钥匙则需要10秒钟.有一个SSCCE: import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.KeyPair; public class KeyGenerator { public static void main(String[] args) { JSch jsch = new JSch(); System.out.println("Starting..."); try { KeyPair keyPair = KeyPair.genKeyPair(jsch, KeyPair.R
6 2023-05-23
编程技术问答社区
如何在Spring Boot中把InputStream返回成一个文件?
我使用JSCH通过SSH获得的文件有一个输入流.我想在我的Spring Boot应用程序中将其返回为文件. 尝试在许多论坛上阅读时使用响应性,但它​​不起作用 解决方案 您可以使用这样的httpservletresponse: public static void sendFileInResponse (HttpServletResponse response, InputStream inputStream) throws IOException { response.setContentType("your_content_type"); response.setHeader("Content-Disposition", "inline;filename=your_file_name"); OutputStream outputStream = response.getOutputStream(); byte[] buff = n
10 2023-05-23
编程技术问答社区
在没有密码/密钥对的情况下,SFTP到一个远程位置
我们正在尝试在弹簧环境中提供SFTP适配器,以将文件从本地或远程服务器传输到本地或远程服务器.但是,我们没有为远程位置中的用户配置的任何密码. Apache-Commons VFS或JSCH等所有实现都需要密码或私钥对来进行文件传输.我们现在无法将密码配置为用户,因为我们需要在其他API中进行多个更改. 您如何建议我们解决它? 解决方案 您可以使用SFTP/SSH无需任何密码即可自动使用. 2种方法,您的选择. 1-制作一个密钥对,其中秘密键具有空白密码.使用ssh-keygen: $ ssh -keygen -f myinsecurekey 提示秘密(私有)密钥密码(密码)时,只需点击返回即可.然后,将公共密钥(myinsecurekey.pub)拿到服务器,将其转移到远程帐户的主目录中的.ssh dir中.必须将其命名为"授权_keys",如果它已经存在,请附加您的新密钥(使用编辑器查看您在做什么).不过,请注意,您的秘密密钥现在完全赤裸裸,因此您应该
0 2023-05-21
编程技术问答社区
SSH输出总是空的
我一直在尝试弄清楚这个问题数小时,但我似乎无法弄清楚.我正在尝试将JSCH从Android手机使用SSH到Linux计算机.这些命令始终工作正常,但通道的输出通常为空.有时它会显示输出,但大多数时间都没有.这是我在线找到的代码. String userName = "user"; String password = "test123"; String connectionIP = "192.168.1.13"; JSch jsch = new JSch(); Session session; session = jsch.getSession(userName, connectionIP, 22); session.setPassword(password); // Avoid asking for key confirmation Properties
2 2023-05-15
编程技术问答社区
Oracle LoadJava JSCH
我想知道是否使用 loadjava 在Oracle数据库中加载称为 jsch.jar 的Java软件包,然后加载另一个.java文件,该文件将JSCH软件包运用到连接SSH,可以通过函数或过程在Oracle数据库中执行. 我在尝试之前问这个问题,因为我需要与DBA接触以尝试加载所有内容.我想确保它可行,因为我到目前为止还不是很熟练,并且不知道是否不可能或它只是需要修复. 谢谢. 解决方案 是 使用以下内容: loadjava -user USERNAME/PASSWORD@SID JSch.jar 然后创建一个静态类方法,该方法使用从JAR文件加载的类: CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED MyJavaSource AS import org.millea9805.jsch.JSchSomething; public class MyClass { public static
0 2023-05-13
编程技术问答社区
在防火墙后面通过ssh访问git仓库
我想访问(克隆/推/拉)私人(通过SSH)GIT存储库,而在公司防火墙后面,只允许HTTP代理访问.我编写了一个强大的Java(守护程序)程序(基于JSCH类库),该程序将使我能够利用本地和远程端口转发,我希望能够利用这一点. git repo仓库(用于插入短语)在foo.server.com/var/git上 $ git clone ssh://foo.server.com/var/git/myrepo.git ,但防火墙将阻止此命令.我倾向于尝试 之类的东西 $ git clone ssh://localhost:8022/var/git/myrepo.git localhost:8022被转发到foo.server.com:22 那么这条路值得吗?是否有更轻松的解决方案仍然安全?我应该知道的陷阱或陷阱吗? 解决方案 您可以获得普通的SSH(命令行)会话吗?如果是这样,git也应该起作用. 使用SSH时,git应在.ssh/config中选择您
0 2023-05-11
编程技术问答社区
用java将文件从GCS桶转移到SFTP服务器上
我能够从GCS存储桶中读取文件,但是所有库,例如 jsch ,它确实将文件传输到SFTP服务器上查找文件路径,而不是内存中的文件. 我不想将我从GCS读取的文件写入磁盘,如何将存储器中的文件传输到SFTP? ? 解决方案 我假设您要上传内存数据. JSCH实际上具有ChannelSftp.put方法的负载超载可以上传内存数据. 基本一个是使用InputStream : public void put(InputStream src, String dst) throws SftpException 其他选项是 public OutputStream put(String dst) throws SftpException
0 2023-04-26
编程技术问答社区
如何在2022年将JGit与GitHub一起使用
在2022年,GitHub停止使用旧签名的DSA和RSA. 不幸的是,JGIT使用未获取任何更新的JSCH,并且将始终提供rsa 的旧签名即使是"良好"键,并且其实现 ecdsa/ed25519将失败重新连接. JGIT完全可以使用GitHub使用 - 我应该使用哪种配置?我说的是关键类型,配置设置和代码调用的组合,这将导致对GitHub的可靠工作. 解决方案 最新的JGIT支持Apache Mina,可以使用ECDSA键而没有问题. 谨慎对JGIT 6.X为JAVA 11+建立.使用以下maven工件: org.eclipse.jgit org.eclipse.jgit 5.13.0.202109080827-r
12 2023-04-26
编程技术问答社区
将Eclipse JGit连接到GitHub,以便TeamCity可以检查变化
github已与其 无法收集更改,错误:org.eclipse.jgit.errors.noremoterepositoryexception:git@github.com:project/repository.git:error:error:您使用的是带有SHA-1的RSA键,不再是SHA-1允许.请使用较新的客户或其他密钥类型. 我如何指示团队不使用sha-1并使用支持的哈希呢? 我可能会迁移到ED25519密钥,但是我们的Windows代理不支持它,我必须再次更改团队中的所有键,这意味着我将遇到两个问题. 在2022年与GitHub的SSH RSA钥匙结成Teamcity朋友是否有实用的方法?作为参考,我在2021.2.1上. 解决方案 Teamcity现在拥有使用SHA-512与RSA密钥合作的版本,GitHub将接受.与大多数其他客户不同,TeamCity的较旧版本更喜欢ssh-rsa而不是rsa-sha2-512和rsa-sha2-256,因此他们
8 2023-04-26
编程技术问答社区
当试图连接到赛门铁克NetBackup-远程抓取报告时,JSch中出现 "算法协商失败 "的错误
我一直在网上搜索并找到了类似的帖子,但找不到阅读的解决方案. 我正在尝试使用我的计算机中的SSH连接到NetBackup服务器,并运行报告并基于它们创建图形.我正在使用Java和JSCH库这样做.问题是我得到: com.jcraft.jsch.session.recieve_kexinit上的"算法谈判失败"(... 我对谈判和钥匙以及不同的方法(例如diffie-hellman等)一无所知.您能告诉我: 1.如何找出服务器接受的方法? 2.如果我需要设置谈判方法,该怎么办? 记录器只告诉我: 远程版本字符串:ssh-2.0-openssh_5.1 本地版本字符串:SSH-2.0-JSCH-0.1.31 ssh_msg_kexinit收到 ssh_msg_kexinit已发送 ps.我正在限制系统下工作,这意味着我无法在服务器上进行更改.请让我知道您是否需要其他信息. 谢谢 解决方案 进行了大量研究后,我认为要与NetBackup建立SS
0 2023-04-21
编程技术问答社区
如何在JSch中设置文件类型和文件传输模式?
我使用了Apache Common Net FTPClient,并在上传文件之前已将我的ftpClient设置为ftpClient. ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE); 现在我尝试使用JSCH.在文件上传之前是否需要相同的设置以及它们的外观?谢谢. 解决方案 首先,从您的问题中不清楚,您是否知道JSCH和Apache Commons Net FtpClient每个人都使用完全不同且无关的协议. JSCH是SSH/SFTP客户端,而FtpClient是FTP客户端. JSCH使用SFTP协议版本3. 在SFTP协议版本3中,没有传输模式.或换句话说,只有 binary 传输模式. ,即使JSCH使用了支持 ascii 模式的SFTP协议的较新版本, binary 模式还是SFTP中的默认模式.
6 2023-04-21
编程技术问答社区
JSCH通道外壳,输入/输出
我使用JSCH遇到了一些问题,并将命令发送到Shell. 我有一个控制台gui窗口设置和系统.out已将其重定向到textarea,这很好,但是我无法输入任何命令 这是会话的连接代码 this.channel=session.openChannel("shell"); PipedInputStream pip = new PipedInputStream(40); this.channel.setInputStream(pip); PipedOutputStream pop = new PipedOutputStream(pip); PrintStream print = new PrintStream(pop); this.channel.setOutputStream(System.out); print.println("ls"); this.channel.connect(3*1000)
0 2023-04-21
编程技术问答社区
使用java通过ssh连接到远程mysql数据库
如何通过Java应用程序的SSH连接到远程MySQL数据库?小型代码示例对我很有帮助,我将不胜感激. 解决方案 我的理解是,您要访问在远程计算机上运行的MySQL服务器,并在SSH隧道上侦听端口3306. 使用命令行SSH客户端从本地计算机上的端口1234创建端口1234到端口3306,您将从本地计算机键入以下命令: ssh -L 1234:localhost:3306 mysql.server.remote 要从Java做同样的事情,您可以使用 jsch ,ssh2的Java实现.从其网站: JSCH允许您连接到SSHD服务器并使用端口转发,X11转发,文件传输等,并且可以将其功能集成到自己的Java程序中. JSCH已获得BSD样式许可证的许可. 举一个例子,请查看 PortForwardingL.java .连接会话后,使用jdbc:mysql://localhost:1234/[database]作为连接URL之类的内容创建与MySQL的连接.
4 2023-04-19
编程技术问答社区
如何在JSCH中创建一个新的目录之前检查目录是否存在
在使用JSCH SFTP API创建新目录之前,如何检查目录的存在?我正在尝试使用lstat,但不确定它是否正在完成我需要的工作.预先感谢 解决方案 在这种情况下,只要执行创建并处理错误总是更好.这样,操作是原子能的,就SSH而言,您还可以节省大量网络流量.如果首先进行测试,则有一个计时窗口,在此期间可能会改变情况,无论如何您都必须处理错误结果. 其他解决方案 这就是我在 jsch中查看目录存在的方式. 创建目录如果DIR DONT存在 ChannelSftp channelSftp = (ChannelSftp)channel; String currentDirectory=channelSftp.pwd(); String dir="abc"; SftpATTRS attrs=null; try { attrs = channelSftp.stat(currentDirectory+"/"+dir); } catch (Exception e)
12 2023-04-14
编程技术问答社区
如何强制关闭未关闭的Jsch ssh连接
我正在使用JSCH,并期望连接到网络设备并更新配置,更改密码等... 我有一个问题,环回连接保持打开状态,这阻止了更多的SSH会话.我读到,这是某些版本的OpenSSH的问题,解决方案是升级SSHD.不幸的是,连接到网络电器时,这不是一个选择. 没有解决方法吗? 编辑 - 这是我的代码 - 我不是手动关闭所有内容吗? JSch jSch = new JSch(); Session session = jSch.getSession("username", h.hostname); Properties config = new Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); session.setPassword("password"); session.connect(); Channel channel = session.openChann
56 2023-04-06
编程技术问答社区
使用JSch的连接池
我正在使用JSCH在SFTP上上传文件.在当前状态下,每个线程在需要时打开并关闭连接. 如果可以使用JSCH的连接池,以避免由大量连接打开和关闭引起的开销? 这是从线程内部调用 的函数的示例 public static void file_upload(String filename) throws IOException { JSch jsch = new JSch(); Session session = null; try { session = jsch.getSession("user", "server_name", 22); session.setConfig("StrictHostKeyChecking", "no"); session.setPassword("super_secre_password"); session.connect(); C
0 2023-04-05
编程技术问答社区
SFTP Java-管道关闭JSCH例外
我正在使用Java方法,将文件从一个位置复制到另一个远程位置.我的代码如下.我尝试使用 jsch 0.1.42&0.1.50&0.1.54 public static void processFiles(ArrayList FilesToBeCopied, String destFilePath) throws IOException { SftpClient client = new SftpClient("karthick"); String keyFilePath = "/ab/c/d/id_rsa"; String sftpUser = "karthickkb"; client.login(sftpUser, keyFilePath, null); client.changeWorkingDirectory(destFilePath); Configu
2 2023-04-04
编程技术问答社区
使用Spring集成/JCraft JSch在SFTP服务器上内部复制文件
我想知道是否有一种方法可以将SFTP服务器上的文件复制到同一SFTP服务器上的另一个目录.我想这样做,而无需将文件放入客户端,然后将其设置在另一个文件夹中.当然,这可以正常工作,但我想这会产生更多的开销,因此,如果可能的话,我想避免这种情况.我目前正在使用基于JCraft JSCH的Spring Integration. 到目前为止,我还没有找到任何中介的方法. 另一种方法是打开SSH频道并使用cp命令,但我认为这都不太漂亮. 预先感谢! 解决方案 核心SFTP协议不支持复制远程文件. 有 copy-file copy-file copy-file协议,但这仅得到少数SFTP服务器( proftpd mod_sftp 和Bitvise SFTP服务器). 在最广泛的OpenSSH SFTP服务器中,仅在最近的,JSCH库也不支持. 另请参阅我对如何使用SFTP复制/重复文件? , 因此,实际上在" exec"频道上实际使用cp shell命
4 2023-03-31
编程技术问答社区
在Java中通过SSH隧道连接到Mongo数据库
固定(编辑代码以反映我所做的更改) 我正在尝试使用Java通过SSH隧道连接到Mongo数据库. 我正在使用Mongo驱动程序3.0.2和JCraft(JSCH)创建SSH隧道. 想法是我: 连接到通过SSH托管MongoDB安装的机器 设置端口从本地端口转发到远程MongoDB端口 连接到MongoDB远程 我的代码看起来像这样: // forwarding ports private static final String LOCAL_HOST = "localhost"; private static final String REMOTE_HOST = "127.0.0.1"; private static final Integer LOCAL_PORT = 8988; private static final Integer REMOTE_PORT = 27017; // Default mongodb port // ssh connec
26 2023-03-30
编程技术问答社区