详细如下:
pom:
<dependency>
<groupId>ch.ethz.ganymed</groupId>
<artifactId>ganymed-ssh2</artifactId>
<version>262</version>
</dependency>
在java程序中使用ganymed-ssh2,采用exec的session方式
使用exec的方式登录不能获得当前用户的环境变量。比如会报 bash: java: command not found
解决办法:
String JAVA_HOME="export JAVA_HOME=/usr/java/jdk1.8.0_77";
ssh.execCommand(JAVA_HOME+";"+otherCommand)
另外还有一种办法就是PTY,建立输入流直接向终端输入命令详见
代码我参考了前辈的:如下:
最常见是当执行session.execcommand()这个命令的时候,出现在远程机器上环境变量丢失或者错误的问题。
因此不用session.execCommand(),用获取pty(虚拟终端)和启动sell命令来代替,(use Session.requestPTY() and Session.startShell())。这样你就不得不在另一方面通过用stdin和stdout来和shell进程通信。不管怎么样,当你要实现终端的算法时,例如(e.g.escape sequence handling (unless you use a "dumb" pty),"expect