写一个java使用ssh远程连接服务器、发送指令并接收返回信息的代码
时间: 2023-09-08 20:05:26 浏览: 175
### 回答1:
可以参考如下代码:import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Properties;import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;public class SSHExec {
private String ipAddr;
private String charset = "UTF-8";
private String userName;
private String userPwd;
private Session session;
private ChannelExec channel; public SSHExec(String ipAddr, String userName, String userPwd) {
this.ipAddr = ipAddr;
this.userName = userName;
this.userPwd = userPwd;
} public void connect() throws Exception {
JSch jsch = new JSch();
session = jsch.getSession(userName, ipAddr, 22);
session.setPassword(userPwd);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
channel = (ChannelExec) session.openChannel("exec");
} public void sendCmd(String cmd) throws IOException {
channel.setCommand(cmd);
channel.connect();
InputStream in = channel.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in,
charset));
String buf;
while ((buf = reader.readLine()) != null) {
System.out.println(buf);
}
} public void close() {
channel.disconnect();
session.disconnect();
}
}
### 回答2:
要实现Java使用SSH远程连接服务器、发送指令并接收返回信息的代码,可以使用JSch这个Java库来完成。
首先,需要在项目中引入JSch库。可以在项目的pom.xml文件中加入以下依赖:
```xml
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
```
然后,可以编写以下Java代码来连接服务器、发送指令并接收返回信息:
```java
import com.jcraft.jsch.*;
public class SSHConnection {
public static void main(String[] args) {
try {
JSch jsch = new JSch();
// 填写服务器地址、用户名和密码
String host = "服务器地址";
String username = "用户名";
String password = "密码";
// 创建SSH会话
Session session = jsch.getSession(username, host, 22);
session.setPassword(password);
// 不进行公钥确认
session.setConfig("StrictHostKeyChecking", "no");
// 连接服务器
session.connect();
// 打开Shell通道
Channel channel = session.openChannel("shell");
// 获取输入输出流
ChannelShell shell = (ChannelShell) channel;
shell.setPty(true);
shell.connect();
// 发送指令
String command = "要发送的指令";
shell.getOutputStream().write(command.getBytes());
shell.getOutputStream().flush();
// 接收返回信息
byte[] buffer = new byte[1024];
StringBuilder result = new StringBuilder();
while (true) {
while (shell.getInputStream().available() > 0) {
int length = shell.getInputStream().read(buffer);
result.append(new String(buffer, 0, length));
}
if (shell.isClosed()) {
if (shell.getInputStream().available() > 0) continue;
break;
}
Thread.sleep(1000);
}
// 打印返回信息
System.out.println(result.toString());
// 关闭连接
shell.disconnect();
session.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
以上代码通过JSch库实现了SSH远程连接服务器、发送指令并接收返回信息的功能。你需要将服务器地址、用户名和密码替换为实际的值,同时修改要发送的指令。这段代码会将服务器返回信息存储在StringBuilder对象中,并打印输出。
请注意,由于涉及服务器连接和认证,使用SSH需要谨慎操作并确保安全。正确的使用方式是授权被访问的服务器并采取安全措施,以防止不必要的信息泄露和攻击。
### 回答3:
以下是一个简单的Java代码示例,用于使用SSH远程连接服务器、发送指令并接收返回信息:
```java
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class SSHConnectionExample {
public static void main(String[] args) {
String sshHost = "your_ssh_host";
String sshUsername = "your_ssh_username";
String sshPassword = "your_ssh_password";
int sshPort = 22;
String command = "ls -l"; // 要执行的命令
try {
JSch jsch = new JSch();
// 创建SSH会话
Session session = jsch.getSession(sshUsername, sshHost, sshPort);
session.setPassword(sshPassword);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
// 打开执行命令的通道
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);
// 获取命令输出流
InputStream in = channel.getInputStream();
channel.connect();
// 读取命令输出
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
StringBuilder output = new StringBuilder();
while ((line = reader.readLine()) != null) {
output.append(line).append("\n");
}
// 输出命令执行结果
System.out.println("Command Output:\n" + output.toString());
// 断开连接
channel.disconnect();
session.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
请注意,以上代码依赖于JSch库,你需要将其添加到你的项目中。这个代码示例仅仅是一个起点,你可以根据自己的需求对其进行扩展和修改。
阅读全文