Meine Anforderung lautet wie folgt:
Ich muss mich mit meinen Zugangsdaten in die Unix-Box einloggen und sobald ich mich eingeloggt habe, muss ich Sudo für andere Benutzer tun. Sobald Sudo erfolgreich ist, muss ich Shell in Nohup aufrufen. Schließen Sie Kanal und Sitzung nach Abschluss der Ausführungen.Mehrere Befehle mit JSch
Ich versuchte den ersten Schritt, der Verbindung mit Sudo Befehl ist, aber ich weiß nicht, wie Shell-Skript nach dem Sudo-Befehl aufrufen.
Im folgenden Code kann ich Sudo-Befehl ausführen, aber nach Sudo Zugriff wie kann ich eine Shell in nohup mit Benutzer masteruser
ausführen. Damit die benötigten Dateien meine Shell haben, hat der Besitzer masteruser
.
public class SSHUploader {
Session session = null;
public SSHUploader(){
}
public void connect(){
try {
JSch jsch = new JSch();
session = jsch.getSession("user", "xxx.xxx.xx.xx", 22);
session.setPassword("test");
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void executeCommand(String script) throws JSchException, IOException{
System.out.println("Execute sudo");
String sudo_pass = "test";
ChannelExec channel = (ChannelExec) session.openChannel("exec");
((ChannelExec) channel).setCommand(script);
InputStream in = channel.getInputStream();
OutputStream out = channel.getOutputStream();
((ChannelExec) channel).setErrStream(System.err);
channel.connect();
out.write((sudo_pass + "\n").getBytes());
out.flush();
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0)
break;
System.out.print(new String(tmp, 0, i));
}
if (channel.isClosed()) {
System.out.println("exit-status: " + channel.getExitStatus());
break;
}
try {
Thread.sleep(1000);
} catch (Exception ee) {
System.out.println(ee);
}
}
channel.disconnect();
System.out.println("Sudo disconnect");
}
public void disconnect(){
session.disconnect();
}
public static void main(String... args) throws JSchException, IOException {
SSHUploader up = new SSHUploader();
up.connect();
up.executeCommand("sudo -u masteruser bash");
up.disconnect();
}
}
Mögliches Duplikat von [So führen Sie mehrere Operationen mit JSch aus] (https://stackoverflow.com/questions/7419513/how-to-perform-multiple-operations-with-jsch) – Gregor