JSch执行切换用户的命令后,如果关闭连接,再次打开还是使用当前用户运行命令。
所以我们需要直接在切换用户的时候直接运行命令
try{ JSch jsch = new JSch(); // 创建JSch对象 String username="root"; String host="127.0.0.1"; int port=22; String password="*******"; Session session = jsch.getSession(username, host, port); // 根据用户名,主机ip,端口获取一个Session对象 session.setPassword(password); // 设置密码 session.connect(); // 通过Session建立链接 String cmd ="su - test -c'pwd' "; ChannelExec channelExec = (ChannelExec) session.openChannel("exec"); channelExec.setCommand(cmd); channelExec.setInputStream(null); channelExec.setErrStream(System.err); channelExec.connect(); InputStream in = channelExec.getInputStream(); String charset="GBK"; BufferedReader reader = new BufferedReader(new InputStreamReader(in, Charset.forName(charset))); String buf = null; while ((buf = reader.readLine()) != null){ System.out.println(buf); } if(reader!=null){ reader.close(); } if(in!=null){ in.close(); } }catch(Exception e){ System.out.println("登录出错!"); e.printStackTrace(); }
运行的命令直接写成su - test -c "cmd"的形式