java - 无法使用 jsch 执行 sftp 子命令
问题描述
这是我的代码,它登录到 sftp 服务器并执行命令“dzdo su - ibmusr”命令并更改文件夹的路径并执行 ls 命令。这是代码
public class Sudo{
public static void main(String[] arg) throws Exception{
int port=22;
String name ="john";
String ip ="xxxx";
String password ="root";
JSch jsch = new JSch();
Session session = jsch.getSession(name, ip, 22);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
System.out.println("Establishing Connection...");
session.connect();
System.out.println("Connection established.");
ChannelExec channelExec = (ChannelExec)session.openChannel("exec");
InputStream in = channelExec.getInputStream();
channelExec.setCommand("dzdo su - john");
OutputStream out = channelExec.getOutputStream();
out.write(("cd /xx.yy/zz \n").getBytes());
out.write(("ls \n").getBytes());
out.flush();
channelExec.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
int index = 0;
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null)
{
System.out.println(line);
}
session.disconnect();
}
}
我低于异常
Exception in thread "main" java.io.IOException: failed to initialize the channel.
at com.jcraft.jsch.Channel$1.init(Channel.java:242)
at com.jcraft.jsch.Channel$1.write(Channel.java:253)
at java.io.OutputStream.write(OutputStream.java:75)
at com.consol.citrus.samples.todolist.Sudo.main(Sudo.java:43)
解决方案
移动线
channelExec.connect();
在此块上方:
OutputStream out = channelExec.getOutputStream();
out.write(("cd /xx.yy/zz \n").getBytes());
out.write(("ls \n").getBytes());
out.flush();
因此,您首先建立连接,然后获取输出流。
推荐阅读
- javascript - JavaScript 中小于 1960 年的 UTC 到本地日期转换失败
- github - 访问回购的社交图标
- javascript - 执行后取消链接js文件
- c# - 找不到 System.Runtime.Remoting.ChannelServices
- python - 无论我更改单选按钮多少次,如何仅获取相应的输入框?
- c++ - Microsoft-STL 和 GNU-STL 之间的差异
- reactjs - 通过组件将 Props 传递给“Single Page Views”
- rust - 如何为 Rust Cargo 依赖模块选择 C/C++ 编译器
- python-3.x - python中的并发循环
- python - 如何更正这一行的缩进?