java – 通过JSch shell的多个命令
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 通过JSch shell的多个命令,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2669字,纯文字阅读大概需要4分钟。
内容图文
![java – 通过JSch shell的多个命令](/upload/InfoBanner/zyjiaocheng/952/1bcadec0b91a44aa9aff2b35cd5f6766.jpg)
我试图使用JSch库通过SSH协议执行多个命令.但我似乎陷入困境,无法找到任何解决方案. setCommand()方法每个会话只能执行一个命令.但我想按顺序执行命令,就像Android平台上的connectbot应用程序一样.到目前为止我的代码是:
package com.example.ssh;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Properties;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
public class ExampleSSH extends Activity {
/** Called when the activity is first created. */
EditText command;
TextView result;
Session session;
ByteArrayOutputStream baos;
ByteArrayInputStream bais;
Channel channel;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bais = new ByteArrayInputStream(new byte[1000]);
command = (EditText) findViewById(R.id.editText1);
result = (TextView) findViewById(R.id.terminal);
}
public void onSSH(View v){
String username = "xxxyyyzzz";
String password = "aaabbbccc";
String host = "192.168.1.1"; // sample ip address
if(command.getText().toString() != ""){
JSch jsch = new JSch();
try {
session = jsch.getSession(username, host, 22);
session.setPassword(password);
Properties properties = new Properties();
properties.put("StrictHostKeyChecking", "no");
session.setConfig(properties);
session.connect(30000);
channel = session.openChannel("shell");
channel.setInputStream(bais);
channel.setOutputStream(baos);
channel.connect();
} catch (JSchException e) {
// TODO Auto-generated catch block
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
else{
Toast.makeText(this, "Command cannot be empty !", Toast.LENGTH_LONG).show();
}
}
public void onCommand(View v){
try {
bais.read(command.getText().toString().getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
baos = new ByteArrayOutputStream();
channel.setOutputStream(baos);
result.setText(baos.toString());
}
}
代码似乎连接到服务器,但我认为输入和输出数组缓冲区存在一些问题,因为根本没有输出.有人可以指导我如何正确处理服务器的输入和输出以获得所需的输出?
解决方法:
该命令是一个String,可以是远程shell接受的任何内容.尝试
cmd1 ; cmd2 ; cmd3
按顺序运行几个命令.要么
cmd1 && cmd2 && cmd3
运行命令直到一个失败.
即使这可能有效:
cmd1
cmd2
cmd3
或者在Java中:
channel.setCommand("cmd1\ncmd2\ncmd3");
旁注:不要将密码和用户名放入代码中.将它们放入属性文件并使用系统属性指定属性文件的名称.这样,您可以将文件保留在项目之外,并确保密码/用户名不会泄漏.
内容总结
以上是互联网集市为您收集整理的java – 通过JSch shell的多个命令全部内容,希望文章能够帮你解决java – 通过JSch shell的多个命令所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。