2017-05-03 7 views
2

Unter Verwendung der Code-SchnipselWie beide ‚exec‘ verwenden und ‚sftp‘ Kanäle in JSch zur gleichen Zeit eine Sitzung

JSch jsch = new JSch(); 
session = jsch.getSession(SFTPUSER,SFTPHOST,SFTPPORT); 
session.setPassword(SFTPPASS); 
java.util.Properties config = new java.util.Properties(); 
config.put("StrictHostKeyChecking", "no"); 
config.put("PreferredAuthentications","publickey,keyboard-interactive,password"); 
session.setConfig(config); 
session.connect(); 

zu einer Sitzung nach dem Anschließen ich root wechseln, um benötigen zu kopieren eine Datei (da die Berechtigungen nicht aktiviert sind und es auch keine Option gibt, die Anmeldung direkt zu rootgen).

channel = session.openChannel("exec"); 
((ChannelExec) channel).setCommand("dzdo -iu root"); 

und jetzt kann ich Kopieren von Dateien

channel = session.openChannel("sftp"); 
channel.connect(); 

channelSftp = (ChannelSftp)channel; 
channelSftp.cd(SFTPWORKINGDIR); 

System.out.println("connected successfully"); 
channelSftp.put(FILETOTRANSFER, SFTPWORKINGDIR); 

Hier bin mit beiden „exec“ und „sftp“ Kanäle, aber es funktioniert nicht für mich. Irgendwelche Hilfe wie man einen Befehl ausführt und dann Dateien mit "sftp" kopiert?

+0

Verwenden Sie nicht 'StrictHostKeyChecking = nein'! –

+1

Bitte beachten Sie: "funktioniert nicht für mich" ist nicht wirklich eine hilfreiche Beschreibung! Lesen Sie über [mcve] - Sie möchten immer eine detaillierte Problembeschreibung angeben! – GhostCat

Antwort

1

Ihr Code ist korrekt. Aber wenn Sie erwartet haben, dass der "exec" -Kanal-Benutzerwechsel den "sftp" -Kanal beeinflusst, lagen Sie falsch. Die Kanäle laufen in isolierten Umgebungen.

Der einzige Weg zu tun, was Sie wollen, ist explizit SFTP-Server in erhöhter Umgebung zu betreiben. Dafür gibt es keine generische Lösung und bei einigen Servern ist dies möglicherweise nicht möglich.

Einige Referenzen:


Im Allgemeinen wird eine Notwendigkeit, den Benutzer zu wechseln eine Operation zu automatisieren, ist ein Zeichen für ein schlechtes Design . Sie sollten direkt ein Konto verwenden, das Zugriff auf die Ressourcen hat, die Sie für die Aufgabe benötigen.

Verwandte Themen