2012-04-30 15 views
8

Kod w pytaniuError „zakaz absolutny domu” za pośrednictwem sieci: SSH

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

ta zwraca „zakaz bezwzględny domu”. "Użytkownik" w rzeczywistości posiada katalog domowy. Jednym z sugerowanych podejść było zmodyfikowanie ~/.ssh/config z pełnymi ścieżkami do pliku IdentityFile. To nie rozwiązało problemu.

Szaloną częścią tego jest to, że kod działa poprawnie, jeśli zostanie wywołany przez irb lub konsolę. W momencie, w którym próbujemy wywoływać go z poziomu metody klasy (z tym samym kodem), zwraca błąd "nie jest absolutny dom".

"Użytkownik" może również ssh na serwerze za pośrednictwem wiersza poleceń bez problemu. Na serwerze działa system Ubuntu.

UPDATE

Dzięki @Phrogz - Poprawkę dotyczącą tego zachodziło ENV [ 'HOME'] do '/ home/wdrożyć'. Jednak nie domyśliłem się, dlaczego $ HOME ustawia się na "." na serwerze. Tak więc zostawię to pytanie bez "odpowiedzi", dopóki ja lub ktoś inny nie zda sobie z tego sprawy. Ręczne ustawienie programu HOME wydaje się bardziej "hackem" niż właściwym rozwiązaniem, ale działa.

+1

Czy masz zestaw zmiennych środowiska "HOME"? 'echo $ HOME' – Phrogz

+1

@Phrogz - jeśli wypiszę go przez irb, konsola, linia poleceń pokazuje ścieżkę. Jednak jeśli ustawię ją jako zmienną w klasie (home =% x [echo $ HOME]) sama (Rails_Root/lib/class_obj), to trafi do mnie z "."? – Jadon

+1

Wygląda na to, że twój interpreter działa pod powłoką o innej ścieżce.Jeśli ustawisz w ścieżce ścieżkę bezwzględną lub całkowicie ją wyłączysz, to to naprawi? – Phrogz

Odpowiedz

0

Linux ustawia te informacje na podstawie pliku /etc/passwd.

Sprawdź, co istnieje w /etc/passwd dla użytkownika deployer. Powinien znajdować się w dolnej części listy.

Pozycje są rozdzielone dwukropkami. Wartość dla ENV['HOME'] powinna być wartością od drugiej do ostatniej pozycji w tym wierszu.

Czy jest pusty, tzn. Ma dwa dwukropki?

Podejrzewam, że twoja zmienna HOME nie jest obecna w /etc/passwd i jest ustawiona w jednym z domyślnych plików dotfiles, tj. W rodzaju .bashrc. Następnie, .bashrc jest zwarte, jeśli aplikacja jest uruchomiona za pośrednictwem skryptu init.d, który nie pobiera twoich plików dotfiles. (Wiele plików .bashrc przestaje ładować pozostałe polecenia, jeśli jest wykonywane przez nieinteraktywną powłokę).

Mam nadzieję, że to pomoże i proszę o przesłanie swoich wyników.

+0

Mam podobny problem z domem prawidłowo ustawionym w/etc/passwd. – trimbletodd

1

Zdecydowanie działa poprzez ustawienie parametru HOME env var, jeśli nie jest ustawione.

2

Po prostu wpadliśmy na ten sam problem i znaleźliśmy przyczynę. Uruchomimy nasz skrypt jako usługę i jeśli zaznaczysz stronę podręcznika dla usługi, usuwa ona większość zmiennych env przed uruchomieniem skryptu, w tym HOME. Nie wiem, czy Twój scenariusz jest taki sam, ale HOME nie jest ustawiony.

net-ssh chce wyszukać ssh config z folderu domowego użytkownika, więc wymusił na ENV ['HOME'] na "." jeśli nie był ustawiony. Ale gdy File.expand_path próbuje rozwinąć "~/.ssh", argument ArgumentError zostaje podniesiony.

Naprawiono to dwa miesiące temu (https://github.com/net-ssh/net-ssh/pull/98), więc należy zaktualizować gem gem net-ssh.

Powiązane problemy