/*
* SSHManager
*
* @author cabbott
* @version 1.0
*/
package jsch;
import com.jcraft.jsch.*;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
public class SSHManager
{
private static final Logger LOGGER = Logger.getLogger(SSHManager.class.getName());
private JSch jschSSHChannel;
private String strUserName;
private String strConnectionIP;
private int intConnectionPort;
private String strPassword;
private Session sesConnection;
private int intTimeOut;
private void doCommonConstructorActions(String userName, String password, String connectionIP,
String knownHostsFileName)
{
jschSSHChannel = new JSch();
try
{
jschSSHChannel.setKnownHosts(knownHostsFileName);
}
catch (JSchException jschX)
{
logError(jschX.getMessage());
}
strUserName = userName;
strPassword = password;
strConnectionIP = connectionIP;
}
public SSHManager(String userName, String password, String connectionIP, String knownHostsFileName)
{
doCommonConstructorActions(userName, password, connectionIP, knownHostsFileName);
intConnectionPort = 22;
intTimeOut = 60000;
}
public SSHManager(String userName, String password, String connectionIP, String knownHostsFileName,
int connectionPort)
{
doCommonConstructorActions(userName, password, connectionIP, knownHostsFileName);
intConnectionPort = connectionPort;
intTimeOut = 60000;
}
public SSHManager(String userName, String password, String connectionIP, String knownHostsFileName,
int connectionPort, int timeOutMilliseconds)
{
doCommonConstructorActions(userName, password, connectionIP, knownHostsFileName);
intConnectionPort = connectionPort;
intTimeOut = timeOutMilliseconds;
}
public String connect()
{
String errorMessage = null;
try
{
sesConnection = jschSSHChannel.getSession(strUserName, strConnectionIP, intConnectionPort);
sesConnection.setConfig("StrictHostKeyChecking", "no");
sesConnection.setPassword(strPassword);
// UNCOMMENT THIS FOR TESTING PURPOSES, BUT DO NOT USE IN PRODUCTION
// sesConnection.setConfig("StrictHostKeyChecking", "no");
sesConnection.connect(intTimeOut);
}
catch (JSchException jschX)
{
errorMessage = jschX.getMessage();
}
return errorMessage;
}
private String logError(String errorMessage)
{
if (errorMessage != null)
{
LOGGER.log(Level.SEVERE, "{0}:{1} - {2}", new Object[] {strConnectionIP, intConnectionPort, errorMessage});
}
return errorMessage;
}
private String logWarning(String warnMessage)
{
if (warnMessage != null)
{
LOGGER.log(Level.WARNING, "{0}:{1} - {2}", new Object[] {strConnectionIP, intConnectionPort, warnMessage});
}
return warnMessage;
}
public String sendCommand(String command)
{
StringBuilder outputBuffer = new StringBuilder();
try
{
Channel channel = sesConnection.openChannel("exec");
((ChannelExec) channel).setCommand(command);
InputStream commandOutput = channel.getInputStream();
channel.connect();
int readByte = commandOutput.read();
while (readByte != 0xffffffff)
{
outputBuffer.append((char) readByte);
readByte = commandOutput.read();
}
channel.disconnect();
}
catch (IOException ioX)
{
logWarning(ioX.getMessage());
return null;
}
catch (JSchException jschX)
{
logWarning(jschX.getMessage());
return null;
}
return outputBuffer.toString();
}
public void close()
{
sesConnection.disconnect();
}
}
分享到:
相关推荐
Java使用JSCH(Java Secure Channel)库连接远程服务器是一个常见的任务,特别是在自动化运维、文件传输或者执行远程命令等场景中。JSCH是一个纯Java实现的SSH2库,它提供了连接到支持SSH协议的服务器的能力,如...
本文将深入探讨如何使用JSCH库来执行远程命令,并且处理输入密码的情况。我们将参考CSDN博客文章"JSCH执行命令是输入密码的方法",并结合相关标签"JSCH Password System.in"进行详细讲解。 首先,了解SSH协议至关...
模板化执行命令示例 [$]send[su - root] [Password:]password[123456] [#]send[cd /etc] [#]send[] [#]send[] [#]send[exit] [$]send[exit] 具体模板参数意义下载解压缩后查看batch.list中有解释
jsch通过java代码ssh登录主机远程执行命令并返回结果。注意,这个是源代码,请自行编译后在使用。当然,也可以根据自己的需要更改源代码。
`runCmd`方法用于执行远程命令。首先,我们打开一个`ChannelExec`通道,设置要执行的命令,然后连接该通道。通过`getInputStream`读取命令的输出,并使用`BufferedReader`逐行读取打印出来。最后关闭输入流和通道。 ...
基于jsch包实现远程服务器的sftp访问,并可远程发送命令执行,可以配合https://download.csdn.net/download/u011230766/10710755,实现密钥登录,类KeyGen用于生成非对称密钥
总的来说,Java通过JSch库远程登录Linux服务器并执行命令,是Java与Linux系统交互的一种常用方式,尤其适用于自动化运维和脚本化的任务。通过理解并实践这些代码,你将能够更好地理解和掌握Java进行远程操作的能力。
然后,你可以使用以下代码执行远程命令: ```java import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import java.io....
JSch(Java Secure Channel)是一个纯Java实现的SSH2库,它允许Java应用程序连接到SSH服务器并执行各种操作,包括运行远程shell命令和脚本。以下是如何使用JSch在Java程序中运行远程Linux主机上的shell脚本的详细...
java通过ssh调用centos7指令,获取磁盘空间使用率、磁盘空间使用情况、网络使用情况,CPU使用率,内存使用率
JSch库提供了一个API,使得开发者可以方便地在Java应用中建立SSH连接,执行命令、传输文件以及打开隧道。JSch-0.1.54.jar是该库的一个版本,包含了所有必要的类和方法来支持SSH连接。 要使用JSch库,首先需要在项目...
例如,Apache Commons Exec提供了一个方便的API来执行本地或远程命令,而Spring的Shell Executor则是在Spring应用中执行命令的工具。 至于smDemo文件,这可能是示例代码或示例项目的名称。在实际情况中,这个文件...
2. **执行远程命令**:一旦连接建立,我们可以通过`session.openChannel("exec")`创建一个执行命令的通道,然后通过该通道发送命令: ```java Channel channel = session.openChannel("exec"); ((ChannelExec) ...
JSCH库提供了对SSH2协议的强大支持,使得用户可以通过安全的方式进行远程文件传输、执行命令以及建立安全的网络隧道。 **SSH协议** SSH是一种网络协议,用于加密网络连接,常用于远程登录和其他网络服务。它的主要...
Java SSH 执行命令主要涉及到Java编程语言与SSH(Secure Shell)协议的交互,通常用于远程服务器的管理和自动化任务执行。SSH是一种网络协议,允许用户安全地在不安全的网络上进行远程登录和其他网络服务。在Java中...
具体来说,开发者可能使用了Java的SSH(Secure Shell)库,如JSch或者Apache MINA,这些库提供了与远程Linux服务器安全连接并执行命令的能力。 SSH协议是一种在网络上传输数据的安全方式,通常用于远程登录、文件...
sshxcute 就是这样一个框架工具集,它基于 JSCH 构建,允许工程师利用Java 代码通过 SSH 连接远程批量执行 Linux/UNIX 系统上的命令或者脚本,同时加入了判断成功与否,取回输出等多种实用功能。sshxcute 不管是针对...
要实现Java调用本地的远程桌面连接,通常会使用`Runtime.getRuntime().exec()`方法来执行系统命令。这个方法允许我们在Java程序中执行任何可执行文件或命令行脚本。例如,我们可以构造一个包含用户名、密码和目标...
在Java编程中,执行SSH(Secure Shell)命令是一项常见的任务,尤其在远程服务器管理、自动化运维和分布式系统中。SSH是一种网络协议,用于安全地在远程主机上执行命令和传输数据。下面我们将深入探讨如何在Java中...
JSch 是一个纯 Java 实现的 SSH2 客户端,可以用来连接到 SSH 服务器,进行文件传输、命令执行等操作。下面是一个简单的 SSH 连接示例: ```java import com.jcraft.jsch.*; public class SSHConnection { public...