Używam Ubuntu 12.04. Używam ssh do łączenia się z wieloma serwerami codziennie, więc umieszczam ich parametry w pliku .ssh / config ; lubię to :
Host server1
User tux
Port 2202
HostName xxx.x.xx.x
Czy istnieje sposób na umieszczenie haseł w tym pliku dla każdego połączenia? Kiedy więc serwer prosi o hasło, terminal umieszcza hasło i wysyła je do serwera, więc nie muszę za każdym razem wpisywać hasła. Nie chcę też używać pary kluczy publiczny / prywatny.
Odpowiedzi:
Nie, nie ma metody określania ani podawania w wierszu poleceń hasła w sposób nieinteraktywny do uwierzytelniania ssh przy użyciu wbudowanego mechanizmu openssh. Przynajmniej nie to, co wiem. Możesz na stałe zakodować hasło, aby oczekiwać skryptu, ale nie jest to również dobre rozwiązanie.
Zdecydowanie chciałbyś użyć par kluczy do uwierzytelniania bez hasła, jak stwierdził Michael, w końcu klucz prywatny jest dość dużym hasłem w pliku.
źródło
Aby uniknąć ciągu komentarzy: Tak, jest to niepewne (nawet prawdopodobnie niepewne). Gorąco polecam, abyś robił to tylko w sytuacji laboratoryjnej w odizolowanej sieci lub podobnej sytuacji, która nie obejmuje serwerów produkcyjnych lub potencjalnie produkcyjnego serwera bez pełnego resetu / formatu.
Chciałem to skonfigurować, ponieważ nie sądzę, że mój przełącznik 2950 obsługuje klucze prywatne / publiczne i mam nadzieję, że w pewnym momencie zdobędę tę wiedzę, ale jeszcze mnie tam nie ma.
Można to osiągnąć za pomocą aliasu i sshpass.
Mój przykładowy alias to:
Gdzie „cisco” to hasło. Uwaga: nie ma spacji między -p a hasłem.
Zastosowanie to (odniesienie do pytania):
Uwaga: To odpowiada na pytanie w tytule tylko dla tych, którzy korzystają z wyszukiwarek. Jeśli używasz serwerów takich jak w przykładzie pytań, należy użyć pary kluczy prywatny / publiczny, a nie tej odpowiedzi
źródło
Tak, jak wspomniano powyżej, nie można po prostu zapisać hasła. Polecam użycie klucza ssh do autoryzacji.
najpierw wygeneruj swój klucz:
Następnie skopiuj klucz na swoje serwery / komputery stacjonarne:
To wszystko. Nigdy więcej nie będziesz pytany o hasło.
Zalecam również usunięcie autoryzacji hasła w ogóle, ale to zależy od ciebie.
źródło
sshpass -p $PASSWORD ssh $USERNAME@$HOST "echo `cat ~/.ssh/id_rsa` >> /home/$USERNAME/.ssh/authorized_keys"
ale ten program jest czystszy i wyraźnie wyjaśnia intencję.Nie można tego zrobić za pomocą ssh, jest to tak niepewne, jak to możliwe.
Jak wspomniała Danila, można było użyć skryptów typu oczekiwanie, ale nie zawracałbym sobie głowy.
Zastanawiam się, co próbujesz osiągnąć? Czy chcesz przeskoczyć z jednego serwera na drugi? W takim przypadku chcesz skonfigurować i używać ssh-agent na stacji roboczej oraz włączyć przekazywanie agentów na hostach docelowych; w ten sposób wymiana poświadczeń zostanie skierowana do lokalnego agenta bez konieczności kopiowania klucza prywatnego.
źródło
Używam tego skryptu z
~/.local/bin
kataloguCo pozwala mi określić hasło jak
#PS <password>
w.ssh/config
pliku.Ale, jak wszyscy mówią, to lepiej użyć
ssh-keys
zessh-agent
kiedy jest to możliweźródło
Prawidłowym sposobem radzenia sobie z tą sytuacją jest użycie agenta ssh opartego na sesji. Oto jak:
Hasło pozostanie ważne przez resztę sesji. Wystarczy tylko raz uruchomić pierwsze polecenie, a następnie można dodać tyle kluczy, ile chcesz. Gdy sesja jest zabijana, tak samo jest z agentem, więc nie ma zakodowanego przechowywania hasła.
Zszokowany, że po tak długim czasie nie było tej odpowiedzi!
źródło
Możesz to zrobić w bezpieczniejszy sposób, używając sshpass
Ustaw swoje hasło bez historii
eksport PS = twoje_hasło ; historia -d $ (historia 1)
Ustaw alias hosta jak wyżej w ~ / .ssh / config
Użyj ssh pass, aby użyć zmiennej środowiskowej i zaloguj się na wymaganym komputerze za pomocą jednego polecenia
sshpass -p $ PS ssh host_alias
Twoje środowisko przechowuje twoje hasło i ryzykowne jest, że wszystkie uruchomione skrypty mogą wyciec to hasło, jeśli nie wiesz, co uruchomiłeś
źródło
sshpass -p $PS ...