2011-01-17 17 views
7

Ok, also ich habe Hudson (v1.393) läuft in einer Ubuntu VM und alles funktioniert gut. Ich versuche jedoch, einen Mac-Slave zum Ubuntu-Master hinzuzufügen, und ich habe ein paar Probleme bekommen.SSH Schlüsselauthentifizierung fehlgeschlagen beim Verbinden von Mac Hudson Slave mit Linux Master

Ich habe SSH-Schlüssel eingerichtet, so dass die Ubuntu-VM über die Befehlszeile ssh den Schlüssel in einen Benutzer namens Hudson auf dem Mac verwenden kann.

In der Hudson-Slave-Konfiguration habe ich "Slave-Agenten auf Unix-Maschinen über SSH starten" ausgewählt und die Host-IP, den Benutzernamen des Benutzers auf dem Slave und den Speicherort meiner privaten Schlüsseldatei auf dem Master eingegeben wurde zur autorisierten Schlüsseldatei am Slave hinzugefügt).

Der Master kann jedoch keine Verbindung zum Slave herstellen. Mit Blick auf das Protokoll (unten) versucht es, sich mit einem Passwort zu authentifizieren.

Ist dies ein Rückfall für einen fehlgeschlagenen Schlüssel basierte SSH-Versuch?
Versucht Hudson nur mit einem Passwort zu authentifizieren, und ich muss etwas anderes ändern, damit es die Schlüsseldatei verwendet, die in der Konfiguration definiert ist?
Ist es nicht möglich, Slave-Agenten über ssh auf einem Mac zu starten? (Ich weiß, dass der Name dieser Art von Slave-Startmethode explicity Unix heißt es, aber ich dachte (sprich: der Hoffnung), dass es mit OS X funktionieren würde)

Log

[01/14/11 10:38:07] [SSH] Opening SSH connection to 10.0.1.188:22. 
[01/14/11 10:38:07] [SSH] Authenticating as hudson/******. 
java.io.IOException: Password authentication failed. 
at com.trilead.ssh2.auth.AuthenticationManager.authenticatePassword(AuthenticationManager.java:319) 
at com.trilead.ssh2.Connection.authenticateWithPassword(Connection.java:314) 
at hudson.plugins.sshslaves.SSHLauncher.openConnection(SSHLauncher.java:565) 
at hudson.plugins.sshslaves.SSHLauncher.launch(SSHLauncher.java:179) 
at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:184) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
at java.lang.Thread.run(Thread.java:636) 
Caused by: java.io.IOException: Authentication method password not supported by the server at this stage. 
at com.trilead.ssh2.auth.AuthenticationManager.authenticatePassword(AuthenticationManager.java:289) 
... 9 more 
[01/14/11 10:38:07] [SSH] Connection closed. 

Wenn jemand hat es geschafft, diese Art von Setup zu erobern, oder hat irgendwelche Tipps oder Ideen, wäre ich sehr dankbar! Danke

+1

Haben Sie versucht, ohne den privaten Schlüssel und mit einem Passwort? Sehen Sie, ob es mit dieser Methode verbindet. – Sagar

+0

Haben Sie versucht, eine Verbindung zur OS X-Box von der VM mit jsut ssh, um zu sehen, ob Schlüsselauth aktiviert ist? Ist die OS X Box Server- oder Client-Version? Haben Sie das Passwort bei der Generierung des Schlüssels leer gelassen? – prodigitalson

+0

@Sagar: Ich habe es nur mit einem Passwort und nicht mit einem Schlüssel versucht. Kein Glück, gleiche Nachrichten im Logbuch. – mattbilson

Antwort

16

Ich habe kürzlich das gleiche Problem, versucht, einen Agenten auf einem Mac OS X 10.6-Rechner mit SSH zu starten.

Um Passwort-Authentifizierung erhalten Sie bearbeiten müssen, um zu arbeiten, werden/etc/sshd_config auf dem Client-Knoten, PasswordAuthentication yes

Im Hudson Armaturenbrett nehmen Sie den Knoten offline einstellen, stellen Sie sicher, dass die Konfiguration einen gültigen Benutzernamen und Passwort hat , und starten Sie den Agenten. Stellen Sie außerdem sicher, dass das Verzeichnis Remote FS root dem Buildbenutzer gehört, mit dem Sie eine Verbindung herstellen.

Für die ssh-Authentifizierung ohne Passwort prüfen Sie zunächst, unter welchem ​​Benutzer der Hudson-Master läuft. Nehmen wir an, dass dies tomcat55 ist. Generieren Sie ein öffentliches/privates SSH-Schlüsselpaar (mit einer leeren Passphrase) und vergewissern Sie sich, dass der Hudson-Benutzer eine Verbindung herstellen kann.

$ ssh-keygen -t rsa 
Generating public/private rsa key pair. 
Enter file in which to save the key (/home/tomcat55/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/tomcat55/.ssh/id_rsa. 
Your public key has been saved in /home/tomcat55/.ssh/id_rsa.pub. 

$ # authorize the hudson master on the hudson node 
$ scp /home/tomcat55/.ssh/id_rsa.pub [email protected]:~/.ssh/authorized_keys 
$ # test the connection 
$ ssh -i /home/tomcat55/.ssh/id_rsa [email protected] 

Auf dem Hudson-Mac-Knoten muss/etc/sshd_config Passwort-freien Zugriff ermöglichen.

Protocol 2 
PubkeyAuthentication yes 

In der Knotenkonfiguration das Passwortfeld löschen, und legen Sie das private Schlüsselfeld (in diesem Beispiel ist es /home/tomcat55/.ssh/id_rsa).Sie sollten nun in der Lage sein, das Mittel zu starten:

[01/19/11 22:38:44] [SSH] Opening SSH connection to macnode:22. 
[01/19/11 22:38:44] [SSH] Authenticating as hudson with /home/tomcat55/.ssh/id_rsa. 
[01/19/11 22:38:45] [SSH] Authentication successful. 
+0

Danke Ronen! Die Passwort-Authentifizierung funktioniert einwandfrei. Wenn ich jedoch das Passwort entferne und auf den ssh-Schlüssel vertraue, schlägt es immer noch fehl und Hudson scheint sich immer noch auf das Passwort zu verlassen - "[01.02.2011 13:11:45] [SSH] Authentifizieren als mattbilson/* *****. " Ist es etwas anderes in meiner sshd_config? Ich habe "RSAAuthentication ja", "PubkeyAuthentication ja", "AuthorizedKeysFile .ssh/authorized_keys" – mattbilson

+0

Das SSH-Plug-in greift auf das Kennwort zurück, wenn es den privaten Schlüssel nicht verwenden kann, um sich bei dem Knoten anzumelden. Ich würde das Passwort-Feld leer lassen, während Sie versuchen, Dinge herauszufinden, um sicherzustellen, dass es nicht die PasswordAuthentication ist, die es einlässt. Außerdem ist ssh -i KEYFILE USER @ HOST. Wenn Sie dies manuell * als Hudson-Benutzer * tun können, dann sollte Hudson das auch können. Sind Sie in der Lage zu su Hudson Benutzer, dann versuchen, ssh von der Befehlszeile? Wenn es ein Problem gibt, wirst du es wahrscheinlich so finden. –

+0

Das war's! Hudson läuft auf dem Hudson-Benutzer, aber ich bin auf der Ubuntu-Maschine als ein anderer Benutzer. Und Hudson hatte keine Berechtigungen für meine Schlüsseldatei. Jetzt habe ich einen Schlüssel für den Hudson-Benutzer erstellt und ihn dem Mac hinzugefügt. Es stellte sich heraus, dass es ein ziemlich einfacher Fehler war. Danke für die Info, was Hudson eigentlich Ronen gemacht hat! – mattbilson

2

Überprüfen Sie die Datei /var/log/auth.log auf dem Ubuntu-Computer. Ich wette, Sie müssen 700 das .ssh-Verzeichnis des Hudson-Benutzers chmod.

+0

Gerade versucht 700-ing diese Datei, Berechtigungen sind jetzt "-rwx ------". Immer noch kein Glück. – mattbilson

1

Ich denke, die erste Antwort (die ausgewählt) ist eine wunderbare Antwort, aber ich habe einen Fall, wo es nicht die einzige Lösung ist.

In meinem Fall habe ich einen Mac OS-Slave, der funktionierte, und dann nahm ich den Mac herunter und brachte einen neuen auf den Markt. Ich dachte, ich könnte nur die Einstellungen für die Konfiguration des bestehenden Knotens ändern, um sie auf den neuen Mac zu richten. Es hat nicht funktioniert und ich hatte alle die gleichen Fehler und Probleme in diesem Nachrichtenthread beschrieben.

Dann ging ich hinein und löschte den Knoten und neu erstellt es mit genau den gleichen Einstellungen und es hat funktioniert. Ich verdächtigen, dass SSH-Schlüssel Fingerabdruck geändert und durch Löschen des Knotens und neu erstellen es war ich in der Lage, es zum Laufen zu bringen. Was auch immer es ist, die Schlüsselkomponente, die den Fehler verursacht hat, ist keine Konfigurationsoption.