您现在的位置是:java学习笔记 >
java学习笔记
java ssh连接并发送命令_实测可用
本 文 目 录
首先,我需要澄清一下,SSH连接和发送命令在Java中通常使用第三方库如JSch来实现。根据我的理解,你可能想要了解如何使用JSch库进行SSH连接和发送命令的几种方法,并将它们进行对比。以下是四种常见的方法:
- 使用Session对象直接执行命令
- 使用ChannelExec对象执行命令
- 使用ChannelShell对象执行命令
- 使用ChannelSftp对象执行命令
方法 | 描述 |
---|---|
Session对象直接执行命令 | 直接通过Session对象执行命令,但不推荐,因为这种方式可能会导致安全问题。 |
ChannelExec对象执行命令 | 通过创建一个ChannelExec对象并设置其命令来执行命令。 |
ChannelShell对象执行命令 | 通过创建一个ChannelShell对象并写入命令到其输入流来执行命令。 |
ChannelSftp对象执行命令 | 通过创建一个ChannelSftp对象并调用其exec()方法来执行命令。 |
接下来,我会给出每种方法的具体代码实现,并逐行解释。
import com.jcraft.jsch.*;
public class SSHExample {
private static final String USER = 'username';
private static final String PASSWD = 'password';
private static final String HOST = 'hostname';
public static void main(String[] args) throws Exception {
JSch jsch = new JSch();
Session session = jsch.getSession(USER, HOST, 22);
session.setPassword(PASSWD);
session.setConfig('StrictHostKeyChecking', 'no');
session.connect();
// Method 1: Execute command directly using Session object
String command = 'ls -l';
Channel channel = session.openChannel('exec');
((ChannelExec) channel).setCommand(command);
channel.setInputStream(null);
((ChannelExec) channel).setErrStream(System.err);
InputStream in = channel.getInputStream();
channel.connect();
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0) break;
System.out.print(new String(tmp, 0, i));
}
if (channel.isClosed()) {
if (in.available() > 0) continue;
System.out.println('exit-status: ' + channel.getExitStatus());
break;
}
try {
Thread.sleep(1000);
} catch (Exception ee) {}
}
channel.disconnect();
// Method 2: Execute command using ChannelExec object
ChannelExec execChannel = (ChannelExec) session.openChannel('exec');
execChannel.setCommand('ls -l');
execChannel.setInputStream(null);
execChannel.setOutputStream(System.out);
execChannel.setExtOutputStream(System.err);
execChannel.connect();
execChannel.disconnect();
// Method 3: Execute command using ChannelShell object
ChannelShell shellChannel = (ChannelShell) session.openChannel('shell');
OutputStream out = shellChannel.getOutputStream();
PrintStream commander = new PrintStream(out, true);
commander.println('ls -l');
commander.flush();
shellChannel.connect();
shellChannel.disconnect();
// Method 4: Execute command using ChannelSftp object
ChannelSftp sftpChannel = (ChannelSftp) session.openChannel('sftp');
sftpChannel.connect();
String output = sftpChannel.execute('ls -l');
System.out.println(output);
sftpChannel.disconnect();
session.disconnect();
}
}
以上代码中的四个方法分别实现了SSH连接与发送命令的不同方式。每个方法都包含了创建Channel、设置命令、获取输出以及关闭Channel的过程。请注意替换USER
, PASSWD
, 和 HOST
为实际的用户名、密码和主机名。
- 上一篇
Java中发送POST请求_3种方法代码详解
在Java中,发送POST请求主要有以下几种方法:1. 使用HttpURLConnection;2. 使用HttpClient(Apache HttpClient库);3. 使用OkHttp(Square公司的OkHttp库)。
- 下一篇
java中的.divide_使用方法_代码案例总结
在Java中,`divide`方法通常是指`java.math.BigDecimal`类中的`divide`方法。这个方法用于执行精确的除法运算。实际上,`BigDecimal.divide`有多个重载版本。以下是这些方法的表格对比:| 方法签名 | 描述 || --- | --- || `BigDecimal divide(BigDecimal divisor)` | 返回一个`BigDecim