2012-04-30 5 views
8

Der Code in FrageError "nicht absolut home" über Net: SSH

Net::SSH.start('server name', 'user') 

Das gibt "nicht-absolut home". Der "Benutzer" hat tatsächlich ein Home-Verzeichnis. Ein vorgeschlagener Ansatz bestand darin, ~/.ssh/config mit vollständigen Pfaden zum IdentityFile zu modifizieren. Dies hat das Problem nicht gelöst.

Der verrückte Teil davon ist, dass der Code funktioniert, wenn er über IRB oder Konsole aufgerufen wird. In dem Moment, in dem wir versuchen, es innerhalb einer Klassenmethode (mit demselben Code) aufzurufen, wird der Fehler "nicht absolute Heimat" zurückgegeben.

Der 'Benutzer' kann auch ssh über die Befehlszeile ohne Problem in den Server. Auf dem Server läuft Ubuntu.

UPDATE

Dank @Phrogz - Die Lösung für dieses ENV einstellt [ 'HOME'] zu '/ home/deploy'. Ich habe jedoch nicht herausgefunden, warum $ HOME auf "gesetzt" wird. auf dem Server. Also werde ich diese Frage ohne eine "Antwort" aufgeben, bis ich oder jemand anderes das herausgefunden habe. Das manuelle Festlegen von HOME fühlt sich eher wie ein "Hack" an als eine richtige Lösung, aber es funktioniert.

+1

Haben Sie eine 'HOME'-Umgebungsvariable gesetzt? 'echo $ HOME' – Phrogz

+1

@Phrogz - wenn ich es über irb, Konsole, Befehlszeile ausgibt zeigt es einen Pfad. Wenn ich jedoch eine Variable in der Klasse (home =% x [echo $ HOME]) selbst (Rails_Root/lib/class_obj) setze, trifft sie mich mit einem "."? – Jadon

+1

Sieht so aus, als ob Ihr Interpreter unter einer Shell mit einem anderen Pfad läuft.Wenn Sie es entweder auf einen absoluten Pfad in Ihrem Skript setzen oder es vollständig deaktivieren, wird das Problem dadurch behoben? – Phrogz

Antwort

0

Linux legt diese Informationen basierend auf der Datei /etc/passwd fest.

prüfen, was für die deployer Benutzer in /etc/passwd existiert. Es sollte nahe dem Ende der Liste sein.

Die Elemente sind Doppelpunkt getrennt. Der Wert für ENV['HOME'] sollte der vorletzte Eintrag in dieser Zeile sein.

Ist es leer, dh haben zwei Doppelpunkte zusammen?

Ich vermute, dass Ihre HOME-Variable ist nicht in der /etc/passwd vorhanden und wird in einer der Standard-dotfiles, dh so etwas wie .bashrc gesetzt. Dann ist .bashrc kurzgeschlossen, wenn Ihre App über ein init.d-Skript ausgeführt wird, das Ihre dotfiles nicht bereitstellt. (Viele .bashrc Dateien beenden den Ladevorgang für die restlichen Befehle, wenn sie über eine nicht interaktive Shell ausgeführt werden).

Hoffe, dass dies hilft und bitte posten Sie zurück mit Ihren Ergebnissen.

+0

Ich habe ein ähnliches Problem, mit dem Haus richtig in/etc/passwd gesetzt. – trimbletodd

1

Es funktioniert definitiv, indem die HOME env var, wenn es nicht festgelegt ist.

2

Wir sind gerade in das gleiche Problem gerannt und haben die Ursache gefunden. Wir führen unser Skript als Dienst aus und wenn Sie die Manpage für den Dienst überprüfen, werden die meisten env-Variablen vor dem Ausführen des Skripts, einschließlich HOME, entfernt. Ich weiß nicht, ob dein Szenario das gleiche ist, aber HOME ist nicht festgelegt.

net-ssh möchte ssh config aus dem Home-Ordner des Benutzers nachschlagen, so dass ENV ['HOME'] auf "." wenn es nicht festgelegt wurde. Aber wenn File.expand_path versucht, "~/.ssh" zu erweitern, wird der ArgumentError ausgelöst.

Dies wurde vor zwei Monaten festgelegt (https://github.com/net-ssh/net-ssh/pull/98), so dass Ihr net-ssh Juwel Aktualisierung sollte dieses Problem zu beheben.

Verwandte Themen