2017-03-23 1 views
1

Ich verwende JSch in einem Java-Client, um eine Verbindung zu einem Remote-Server herzustellen und einige Dateien mithilfe von SFTP zu erhalten. Der folgende Code gearbeitet hat gut für mich: -Mit JSch zu SFTP, wenn man auch Benutzer wechseln muss

JSch ssh = new JSch(); 
JSch.setConfig(FileTransferConstants.STRICT_HOST_KEY_CHECKING, FileTransferConstants.NO); 
Session session = ssh.getSession(userName, host, port); 
session.setPassword(password); 
session.connect(); 
Channel channel = session.openChannel(FileTransferConstants.SFTP); 
channel.connect(); 
ChannelSftp sftp = (ChannelSftp) channel; 
sftp.cd(remoteDirectoryPath); 
sftp.lcd(localDirectoryPath); 

sftp.get(remoteDirectoryPath + remoteFileName, remoteFileName); 

Das Problem ist, dass es jetzt eine Änderung der Standortpolitik gewesen ist. Ich darf mich nicht mehr direkt als dieser Benutzer anmelden (Benutzername oben). Ich muss mich zuerst als mein persönlicher Benutzer anmelden und dann su in den Benutzer, der Zugriff auf die Dateien hat, die ich zu SFTP haben möchte.

Ich glaube nicht, dass es sowieso gibt, ich kann den obigen Code umgestalten, um dies zu erreichen, und so habe ich angefangen, stattdessen einen Shell- oder Exec-Kanal zu verwenden. Ich habe bisher wenig Erfolg gehabt und finde keine Beispiele im Internet, daher wäre ich für jeden Rat oder Hinweise in die richtige Richtung sehr dankbar. Danke vielmals.

+0

Vielen Dank Martin und ich werde auf jeden Fall diesen Artikel betrachten. Ich schätze Ihre Besorgnis auch, aber die politischen Entscheidungsträger versichern mir, dass, solange mein Benutzer berechtigt ist, diesen Benutzer zu unterstützen, dies nicht gegen die Richtlinien verstößt. Ich wünschte nur, sie würden mir erlauben, mich direkt als dieser Benutzer anzumelden - aber leider nein! –

Antwort

2

Ich glaube nicht, dass Sie dies direkt mit JSch tun können. Aber mit einigen Modifikationen seines Codes ist es wahrscheinlich machbar.

Beachten Sie, dass meine Antwort davon ausgeht, dass der Server * nixbasiert ist (was von Ihrer Referenz auf su unterstützt wird) und den OpenSSH SFTP-Server verwendet.


Sie müssen SSH "exec" Kanal öffnen, auszuführen so etwas wie:

sudo /bin/sftp-server 

Aber oben auf diesem Kanal, müssen Sie die ChannelSftp Instanz bauen, nicht .

So müssen Sie Session.openChannel -artigen Verfahren implementieren, die exec Kanal öffnet, aber ChannelSftp dafür erstellen.


Für einige Hintergrundinformationen siehe how it's possible to do sudo with WinSCP SFTP client.

Beachten Sie, dass während der FAQ behauptet, dass Sie kein Kennwort für die sudo verwenden können, das gilt für WinSCP. Da Sie die Sitzung mit JSch jedoch vollständig steuern können, können Sie das Kennwort möglicherweise an sudo senden.

Dafür können Sie die ChannelSftp.start() überschreiben, um das Passwort auf den Kanaleingang zu schreiben, bevor Sie die eigentliche SFTP-Sitzung starten.

Sie müssen immer noch die Option requiretty aus sein, da das SFTP nicht mit TTY arbeiten kann.


Im Allgemeinen eine Notwendigkeit, den Benutzer zu wechseln, einige Operationen 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