我需要终止一个我已经开始使用 ganymed SSH2 的进程。具体来说,我想使用Ctrl+优雅地杀死它C。我已经看到了尝试发送 ASCII 的想法,\x03但是在使用 execCommand() 时它不会使用转义字符。如何通过ganymed发送Ctrl+ CSIGINT?
如果我应该使用另一个 Java SSH 应用程序,请告诉我,我已经研究了 Jsch、sshj,但发现 ganymed ssh2 是最简单的。
我试图杀死的程序是 tethereal (wireshark)
我花了很多时间开发一个应用程序,该应用程序将使用 JSch 并通过 ssh 连接到远程计算机以执行一些命令行操作。但是我了解到这些操作也可以在本地主机上执行(我的应用程序在本地主机上运行)。现在...我懒得重写所有代码,老实说我感觉很糟糕,因为我真的很喜欢 JSch。有没有办法欺骗 JSch 连接到 localhost,或者以某种方式告诉它只使用 localhost,即使代码另有说明?:)
PS,如果不可能,为什么常规 Proccess 类不像 JSch 那样支持 setOutputStream 和 setErrStream,而只支持 getInputStream 和 getErrorStream ?
我正在尝试弄清楚如何使用 Jsch Sftp 找出如何转到父目录。
我将当前路径存储在一个字符串中,我猜是 channelSftp.cd(String); 是我应该使用的。但是在当前路径上使用子字符串我感觉不对。有一个更好的方法吗?
我想通过 SFTP 传输文件。我发现了一个类似的问题,该问题来自如何在 java 中通过 SFTP 传输文件?. 我从本地主机上的帖子中尝试了建议的解决方案。但我在输出下显示以下错误。
输出
preparing the host information for sftp.
Host connected.
sftp channel opened and connected.
2: No such file
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2846)
at com.jcraft.jsch.ChannelSftp._realpath(ChannelSftp.java:2340)
at com.jcraft.jsch.ChannelSftp.cd(ChannelSftp.java:342)
at ScpTo.main(ScpTo.java:69)
File transfered successfully to host.
sftp Channel exited.
Channel disconnected.
Host Session disconnected.
Run Code Online (Sandbox Code Playgroud)
代码
import java.io.File;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
public class ScpTo {
/**
*
*/
public ScpTo() { …Run Code Online (Sandbox Code Playgroud) 没有出现异常,命令也没有根据提到的命令进行任何工作。这里没有创建目录权限,也没有创建目录。请给出您的建议。
更新: 添加了channelexe.getExitStatus,但问题是它给出了-1,这是什么意思?我不知道如何找到一些解释为什么命令没有完成它的工作(更新fileDir1的 777 模式)。
String depDir = "/usr/local/FTPReceive/DEPLOYED/fileDir1";
log.info("updateDepositedFilePermission ........ starts");
Session session = new FTPComponent().getSession("");
Channel channel = null;
ChannelSftp channelSftp = null;
try
{
session.connect();
System.out.println("session is alive:" + session.isConnected());
channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp) channel;
ChannelExec channelexe = (ChannelExec) session.openChannel("exec");
channelexe.setCommand("chmod 777 -R " + depDir);
channelexe.connect();
System.out.println("channelexe.getExitStatus:"+channelexe.getExitStatus());
}
catch (Exception e1)
{
e1.printStackTrace();
System.out.println("Manual Exception in updateDepositedFilePermission:" + CommonUtil.getExceptionString(e1));
}
Run Code Online (Sandbox Code Playgroud) 我正在研究一种将文件从一个位置复制到另一个远程位置的java方法。我的代码如下。我尝试使用jsch 0.1.42&0.1.50&0.1.54
public static void processFiles(ArrayList<String> 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);
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
FSDataInputStream fsdisPath = null;
String filePath = null;
for (String sourcefilePath : FilesToBeCopied) {
try {
filePath = sourcefilePath;
Path inputPath = new Path(filePath);
fsdisPath = fs.open(inputPath);
BufferedInputStream bis = new BufferedInputStream(fsdisPath);
client.storeFile(inputPath.getName(), bis);
fsdisPath.close();
fsdisPath = null;
} catch (Exception …Run Code Online (Sandbox Code Playgroud) 我想使用 JSch 在远程位置显示目录的完整层次结构。该位置有多个文件夹,一个文件夹可能有也可能没有文件。
我写的代码(参考SFTP Read all files in directory):
sftpChannel.cd(remotePath);
Vector<String> files = sftpChannel.ls("*");
List<String> ret=new ArrayList<>();
for (int i = 0; i < files.size(); i++)
{
Object obj = files.elementAt(i);
if (obj instanceof com.jcraft.jsch.ChannelSftp.LsEntry)
{
LsEntry entry = (LsEntry) obj;
if (true && !entry.getAttrs().isDir())
{
ret.add(entry.getFilename()+"file");
}
if (true && entry.getAttrs().isDir())
{
if (!entry.getFilename().equals(".") && !entry.getFilename().equals(".."))
{
ret.add(entry.getFilename()+"folder");
}
}
}
}
System.out.println(ret);
Run Code Online (Sandbox Code Playgroud)
此代码仅显示顶级文件夹名称,不会读取这些文件夹中的文件。
我正在使用 jsch-0.1.54。
谢谢
我正在尝试使用 JSch 连接到服务器,但它出现连接问题。我可以使用 PuTTY 连接到服务器,但不能使用 Java 代码。
我使用的是jdk1.8.0_171
这是代码片段
session = jsch.getSession(username, server, SSH_PORT);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
session.setTimeout(timeout);
session.connect(timeout);
Run Code Online (Sandbox Code Playgroud)
我收到以下异常:
session = jsch.getSession(username, server, SSH_PORT);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
session.setTimeout(timeout);
session.connect(timeout);
Run Code Online (Sandbox Code Playgroud)
以下是 JSch 日志:
com.jcraft.jsch.JSchException: Algorithm negotiation fail
at com.jcraft.jsch.Session.receive_kexinit(Session.java:590)
at com.jcraft.jsch.Session.connect(Session.java:320)
Run Code Online (Sandbox Code Playgroud)
这是 pom 文件:
INFO: Connecting to <servername> port 22
INFO: Connection established
INFO: Remote version string: SSH-2.0-OpenSSH_8.0
INFO: Local version string: SSH-2.0-JSCH-0.1.54
INFO: CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256
INFO: CheckKexes: diffie-hellman-group14-sha1,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
INFO: CheckSignatures: ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
INFO: SSH_MSG_KEXINIT sent
INFO: SSH_MSG_KEXINIT received
INFO: kex: …Run Code Online (Sandbox Code Playgroud) 使用带有Identity文件和密码的SFTP出站连接器上传文件时出现问题.下面是我的sftp出站组件,其中包含身份文件和密码短语代码段.
<sftp:outbound-endpoint exchange-pattern="request-response"
connector-ref="SFTP" outputPattern="testsftp.txt" host="XXX.XX.XXX.XX"
port="22" responseTimeout="10000" doc:name="SFTP" path="/FCD"
password="XXXXX" user="alt"
identityFile="C:/Users/kalyan/AnypointStudio/workspace02102015/ftp-server-pproject/src/main/resources/ppkKey/ALT.ppk"
passphrase="XXXXX" />
Run Code Online (Sandbox Code Playgroud)
我已经在上面的代码片段中模拟了ip地址,密码以及下面的错误.
但我在运行时遇到错误.
com.jcraft.jsch.JSchException:密码'aes256-cbc'是必需的,但它不可用.
和
java.io.IOException:登录到alt@XXX.XX.XXX.XX时出错:需要密码'aes256-cbc',但它不可用.
有人可以帮我解决错误.
我想在Java中运行SSH,但我还没想出如何运行包含命令和文件的SSH语句.例如,在标准终端中的命令:
ssh user@host 'upload' < myfile.txt
Run Code Online (Sandbox Code Playgroud)
希望通过Java库,而不是某种类型的Runtime.exec()
我有一个包含两个文件夹的简单目录 -
在该SFTP_1文件夹中,我有一个位图图像。而且该SFTP_2文件夹只是一个空文件夹。
Java 是否有本地 SFTP 库可供使用?当我搜索时,我只找到了一个名为JSch 的在线图书馆。
我如何开始运行这个示例?任何提示表示赞赏,谢谢!