JSch 指令不识别

本文介绍了如何通过JSch在远程主机上执行shell命令来获取JVM内存等信息的方法。文章详细阐述了如何解决只能执行简单命令而无法执行如jstat-gccapacity等复杂命令的问题,即通过在命令前加入环境变量文件的加载指令来实现。

今天遇到从远程主机上取一些jvm内存等信息的问题,发现可以通过jdk自带的一些工具来获取,就需要在远程主机上执行shell命令来实现,这里我使用的是JSch,通过ip,端口连接ssh2主机,执行shell命令获取,但是发现只能识别一些简单指令,并不能识别一些工具指令如jstat -gccapacity,是因为并没有引入环境变量导致,于是在command指令前加入引入环境变量文件指令  

source /etc/profile;source ~/.bash_profile;source ~/.bashrc; 

再加上想执行命令jstat -gccapacity

source /etc/profile;source ~/.bash_profile;source ~/.bashrc; jstat -gccapacity

执行完成

给定引用中未提及jsch执行指令的限制相关内容。过,通常jsch执行指令可能存在以下一些常见限制: ### 资源限制 - **内存限制**:如果执行的指令需要大量内存,而服务器的可用内存足,可能会导致指令执行失败。例如,运行一个需要加载大量数据到内存中的脚本。 - **CPU限制**:复杂或长时间运行的指令可能会占用过多的CPU资源,当服务器CPU资源紧张时,指令的执行速度会变慢,甚至可能被系统终止。 ### 权限限制 - **用户权限**:jsch通过指定的用户账户连接到远程服务器,该用户账户的权限决定了可以执行的指令范围。如果用户没有足够的权限,执行某些敏感指令(如修改系统配置文件、安装软件等)会失败。 - **文件系统权限**:对于涉及文件操作的指令,用户必须具有相应文件或目录的读写权限,否则操作会被拒绝。 ### 网络限制 - **带宽限制**:如果网络带宽足,数据传输会变慢,影响指令执行结果的返回。特别是当执行需要传输大量数据的指令时,如大文件的上传或下载。 - **网络稳定性**:稳定的网络连接可能导致指令执行过程中出现中断,影响指令的正常完成。 ### 指令本身的限制 - **指令长度限制**:某些系统对单个指令的长度有上限要求,如果指令过长,可能无法正常执行。 - **指令类型限制**:同的操作系统支持的指令同,jsch连接到的远程服务器可能支持某些特定的指令。 以下是一个简单的jsch执行指令的示例代码: ```java import com.jcraft.jsch.*; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; public class JschExample { public static void main(String[] args) { try { JSch jsch = new JSch(); Session session = jsch.getSession("username", "hostname", 22); session.setConfig("StrictHostKeyChecking", "no"); session.setPassword("password"); session.connect(); Channel channel = session.openChannel("exec"); ((ChannelExec) channel).setCommand("ls -l"); channel.setInputStream(null); ((ChannelExec) channel).setErrStream(System.err); InputStream in = channel.getInputStream(); channel.connect(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } channel.disconnect(); session.disconnect(); } catch (JSchException | java.io.IOException e) { e.printStackTrace(); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值