gpt4 book ai didi

java - Jsch 或 SSHJ 或 Ganymed SSH-2?

转载 作者:搜寻专家 更新时间:2023-10-31 19:41:42 25 4
gpt4 key购买 nike

  1. 我需要连接到服务器(用户名、密码、主机)——简单

  2. 输入 3-10 个命令 -- command="dir;date;cd;dir"有没有更简单的方法?,不用写 20 行: while(smtng) { 很多东西 + 神秘的打印到 scr: D}

  3. 下载文件 -- 简单

  4. 将另一个下载的文件写入同一个文件(添加而不是 owerride)——有什么想法吗?

因此,要执行这些令人难以置信的简单任务,如果您敢于使用 Jsch(awsome 文档),这似乎是不可能的,那么可以在 Jsch、sshj、Ganymed 之间做出选择,有什么建议吗?

谜团:

2) 多个命令输入

4) 是否向现有的 txt 文件添加更多 txt :D(可能有内置命令)?

  /* just for download/owerride : sftpChannel.get("downloadfile.txt", "savefile.txt");*/

最佳答案

我不知道 Ganymed。但我已经广泛使用 JSch 进行远程登录和脚本执行。我使用谷歌的 Expect4j 和 Jsch 在远程机器上以期望模式(发送/等待)执行脚本。您可以使用 JSch/Expect4j/Closures 在您的代码中获取已执行命令或脚本的全部输出。

对于 jsch,转到 http://www.jcraft.com/jsch/
对于 Expect4j,转到 http://code.google.com/p/expect4j/

下面是一个用于远程Java类登录和执行文件的小代码示例。

private Expect4j SSH(String hostname, String username,String password, int port) throws Exception {
JSch jsch = new JSch();
Session session = jsch.getSession(username, hostname, port);
if (password != null) {
session.setPassword(password);
}
Hashtable<String,String> config = new Hashtable<String,String>();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect(60000);
channel = (ChannelShell) session.openChannel("shell");
Expect4j expect = new Expect4j(channel.getInputStream(), channel.getOutputStream());
channel.connect();
return expect;
}

此方法将打开到远程服务器的 SSH 流,expect4j 将使用该流发送命令。

private boolean executeCommands() {
boolean isSuccess = true;
Closure closure = new Closure() {
public void run(ExpectState expectState) throws Exception {
buffer.append(expectState.getBuffer());//buffer is string buffer for appending output of executed command
expectState.exp_continue();
}
};
List<Match> lstPattern = new ArrayList<Match>();
String[] regEx = SSHConstants.linuxPromptRegEx;
if (regEx != null && regEx.length > 0) {
synchronized (regEx) {
for (String regexElement : regEx) {//list of regx like, :>, /> etc. it is possible command prompts of your remote machine
try {
RegExpMatch mat = new RegExpMatch(regexElement, closure);
lstPattern.add(mat);
} catch (MalformedPatternException e) {
return false;
} catch(Exception e) {
return false;
}
}
lstPattern.add(new EofMatch( new Closure() { // should cause entire page to be collected
public void run(ExpectState state) {
}
}));
lstPattern.add(new TimeoutMatch(defaultTimeOut, new Closure() {
public void run(ExpectState state) {
}
}));
}
}
try {
Expect4j expect = SSH(objConfig.getHostAddress(), objConfig.getUserName(), objConfig.getPassword(), SSHConstants.SSH_PORT);
expect.setDefaultTimeout(defaultTimeOut);
if(isSuccess) {
for(String strCmd : lstCmds)
isSuccess = isSuccess(lstPattern,strCmd);
}
boolean isFailed = checkResult(expect.expect(lstPattern));
return !isFailed;
} catch (Exception ex) {
return false;
} finally {
closeConnection();
}
}


private boolean isSuccess(List<Match> objPattern,String strCommandPattern) {
try {
boolean isFailed = checkResult(expect.expect(objPattern));

if (!isFailed) {
expect.send(strCommandPattern);
expect.send("\r");
return true;
}
return false;
} catch (MalformedPatternException ex) {
return false;
} catch (Exception ex) {
return false;
}
}

关于java - Jsch 或 SSHJ 或 Ganymed SSH-2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5097514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com