Verwendung von PuTTY in der Befehlszeile von Hudson

9343
kij

Ich versuche, PuTTY in der Befehlszeile eines Hudson- Jobs zu verwenden.

Der Befehl ist der folgende:

putty -ssh -2 -P 22 USERNAME@SERVER_ADDR -pw PASS -m command.txt 

Dabei ist 'command.txt' ein Shell-Skript, das auf dem Server über SSH ausgeführt wird .

Wenn ich diesen Befehl über die Windows-Eingabeaufforderung starte, funktioniert er. Das Shell-Skript wird auf dem Server-Rechner ausgeführt.

Wenn ich einen Build des mit diesem Batchbefehl konfigurierten Hudson-Jobs starte, funktioniert es nicht. Der Build läuft ... und läuft ... und läuft ... ohne etwas zu tun, und ich muss ihn manuell stoppen.

Ist es möglich, ein externes Programm (dh PuTTY) von einem Hudson-Job aus zu starten?

PS: Ich habe SSH-Plugin ausprobiert, aber ... kein wirklich gutes Plugin (Pre / Post-Build, Fehlerstatus der Befehle, die nicht von Hudson abgefangen wurden, usw.)

Dies sind die Build-Protokolle:

[workspace] $ cmd /c call C:\WINDOWS\TEMP\hudson7429256014041663539.bat  C:\Hudson\jobs\Artifact deployer\workspace>putty -ssh -2 -P 22 USER@SERV_ADD -pw PASS -m com.txt  Le build a été annulé Finished: ABORTED 

Und die Hudson.err.log-Datei gleichzeitig (nach einem Stopp):

3 juin 2010 18:27:28 hudson.model.Run run INFO: Artifact deployer #6 aborted java.lang.InterruptedException at java.lang.ProcessImpl.waitFor(Native Method) at hudson.Proc$LocalProc.join(Proc.java:179) at hudson.Launcher$ProcStarter.join(Launcher.java:278) at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:83) at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:58) at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19) at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:601) at hudson.model.Build$RunnerImpl.build(Build.java:174) at hudson.model.Build$RunnerImpl.doRun(Build.java:138) at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:416) at hudson.model.Run.run(Run.java:1241) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46) at hudson.model.ResourceController.execute(ResourceController.java:88) at hudson.model.Executor.run(Executor.java:124) 

Mein Shell-Skript schreibt nur "Hallo" in eine "Hallo.txt" -Datei auf dem Server, und es wird nichts unternommen.

1
Was sagt Ihre Hudson-Protokolldatei, während der Build ausgeführt wird? Wird auch etwas im Build-Protokoll ausgedruckt? Vielleicht möchten Sie Ihrer command.txt Protokollierung hinzufügen, um zu sehen, ob die Ausführung beginnt oder nicht. vor 14 Jahren 0
Ich habe meinen ursprünglichen Beitrag mit den Protokollen aktualisiert. ps: USER, PASS & SERV_ADD sind ersetzte Werte. vor 14 Jahren 0

4 Antworten auf die Frage

1
Dave Bacher

PuTTY creates a window. That's probably why it's hanging for Hudson (which doesn't have access to the windowing system). Plink is probably a better bet. However, with my PuTTY install (0.60), Plink's command-line options are completely broken. I couldn't log into a server other than with my PuTTY defaults.

In theory, you could set up a PuTTY session and use that with Plink (via -load). However, you'll have the problem of getting your configured session into whatever user Hudson is running as.

Plink funktioniert gut von meiner Eingabeaufforderung. Aber von Hudson wird der Schlüssel zur Registrierung in der Registrierung akzeptiert. (da es sich um die erste Verbindung zum Server von Hudson handelt) habe ich zuerst versucht, eine manuelle Verbindung herzustellen, um den Schlüssel zu registrieren ... aber ich habe diese Frage nicht gestellt (aus Putty oder Plink). Was soll ich machen ? ps: Die Option -load funktioniert nicht mit meinen konfigurierten Sitzungen. ps2: ausgeführte Befehlszeile = plink -ssh SERVER -l USER -pw PASS -m SCRIPT kij vor 14 Jahren 0
Ich bereinige die Knetsitzung und verbinde mich dann erneut mit meinem Server. Ich habe den Schlüssel gebeten, den Schlüssel im Cache zu speichern. Dann starte ich einen Build meines Hudson-Jobs, aber wieder dieselbe Nachricht, um den Schlüssel zu akzeptieren ... Also denke ich, dass von Hudson, Putty-Session nicht wie versucht gearbeitet wird (gleiches falsches Verhalten als -load-Plink-Option). Gibt es andere Methoden dazu eine Verbindung zu einem anderen Computer von Hudson herstellen und Shell-Skripts ausführen? kij vor 14 Jahren 0
1
Peter Schuetze

The problem is, that you need to accept the key with the username that you run Hudson with. So in case you don't run Hudson with the local system account (which is a bad idea anyway) you have to log in with the Hudson account and accept the key. Then your Hudson build will work.

If Hudson is running with the local system account there might be an option, but I am not sure if it will work or not. First, you have to allow the Hudson service to interact with the desktop. Then you log into your server as an admin. I am not sure if you need to be physically on the box. Launch Plink or PuTTY and hope that a pop up will appear, then you can accept the key and everything should work fine.

Another option would be to launch Plink with the runas command and supply your (different) user credentials.

Another option is: get Quest's Plink and use the option -auto_store_key_in_cache.

Ok, Hudson läuft mit dem lokalen System. Ich habe die Option zum Arbeiten mit dem Desktop ohne Erfolg geprüft. Tatsächlich benutze ich Benutzername A, um mich auf meinem lokalen Rechner anzumelden, und Benutzername B, um mich auf dem Server-Rechner anzumelden (über Putty oder Plink). Das Problem kommt also von diesen beiden Benutzernamen? Da der Server nicht meiner ist (Client), kann ich mein Benutzerkonto nicht ändern. Samme Sache mit meinem lokalen Konto. Ich werde versuchen, den Hudson-Server mit meinem Server-Benutzernamen (und Kennwort) zu starten, aber ich befürchte, dass dies zu anderen Fehlern führt. Trotzdem danke für deine Antwort. kij vor 14 Jahren 0
Wie ich befürchtet hatte, dass die Verwendung meines Serverkontos zum Starten von Hudson nicht funktioniert hat, da dieser Vorfall im lokalen Netzwerk nicht bekannt ist. Also über die erste "Lösung", wenn Hudson mit dem lokalen System läuft und die Option "Interagieren mit dem Desktop" aktiviert ist, auch wenn ich alle meine Sitzungsschlüssel bereinige und mich manuell beim Server anmelde (und den Schlüssel für den Computer akzeptiere) Erstes Mal), dann kann der Hudson-Job ohne die Schlüsselannahmemeldung immer noch nicht auf den Server zugreifen: / kij vor 14 Jahren 0
Folgende Voraussetzungen Zuerst müssen Sie selbst Administrator sein. Zweitens müssen Sie eine Remote-Software wie VNC verwenden, da sie Windows wie ein lokales Login und nicht wie eine Terminalserversitzung erscheinen. Melden Sie sich nach dem Verfahren beim Server an. Danach starten Sie hudson und sehen, ob Sie ein Popup sehen. Falls nicht, erstellen Sie einen Testjob mit Putty anstelle von Plink und sehen Sie, ob Sie ein Popup sehen. Übrigens können Sie auch einen Client-Administrator fragen, ob er sich lokal am Server anmelden und den Schlüssel akzeptieren kann. Peter Schuetze vor 14 Jahren 0
Hallo Peter, ich habe Quest's Plink mit der Option -auto_store_key_in_cache heruntergeladen und verwendet und ich arbeite. Danke nochmal für eure Hilfe (und natürlich Dave :)) kij vor 14 Jahren 0
Was genau hast du mit Plink gemacht? Lass es einfach laufen? tim vor 14 Jahren 0
plink ist die Kommandozeilenversion von putty. Wird normalerweise für das Scripting verwendet. Peter Schuetze vor 14 Jahren 0
1
tdl

Wie Peter Schuetze darauf hinweist, müssen Sie den Schlüssel mit dem Benutzernamen akzeptieren, mit dem Sie Hudson ausführen. Meine Lösung dafür, nur mit dem Standardkitt und Plink, ist folgende:

  1. Richten Sie eine Sitzung mit den Verbindungsdetails ein, die Sie benötigen, und speichern Sie sie
  2. einmal verbinden, Schlüssel annehmen
  3. Mit regedit exportieren Sie [HKEY_CURRENT_USER \ Software \ SimonTatham] vollständig
  4. Ersetzen Sie "HKEY_CURRENT_USER" durch "HKEY_USERS \ S-1-5-18". Dies ist die Sicherheitskennung für das lokale Systemkonto
  5. Speichern Sie die REG-Datei, und importieren Sie sie mit einem Doppelklick

Dadurch stehen Ihnen jetzt der akzeptierte Host-Schlüssel UND alle Einstellungen für die Sitzung zur Verfügung, wenn Sie eine Verbindung zum lokalen Systemkonto herstellen.

Besonders praktisch, wenn Sie auch eine private Schlüsseldatei festlegen, die für diese Sitzung nicht kennwortgeschützt ist.

0
Peter Schuetze

My favorite way to get into the context of another machine is to create a slave on the target machine and run the scripts. I use that extensively to get around storing passwords unencrypted on hard-drives. Have a look at the hudson documentation on how to do that.

Ich denke schon so (das Beste, was ich denke), aber ich habe keine Rechte, um Hudson-Sklaven auf dem Server zu installieren. Ich habe gerade Ihre BEARBEITUNG in einem vorherigen Beitrag gesehen. Ich werde morgen die Option zum automatischen Akzeptieren des Auth-Schlüssels prüfen. Ich muss die neue Version von plink herunterladen, da meine nur 0,60 ist (0.60_q1 ... für diese Option erforderlich). Danke nochmal für eure hilfe. kij vor 14 Jahren 0