Jak połączyć się z innym komputerem za pośrednictwem SSH w jednej linii? Gdybym miał to zrobić ssh host@IP
, wymagałoby to wpisania hasła w drugiej linii. Myślałem, że mogę zrobić coś takiego:, ssh host@IP | echo password
ale to wstawia hasło przed zapytaniem o hasło.
26
ssh
odczytał hasło ze standardowego wejścia,echo password | ssh host@IP
działałoby, ale zwykle SSH próbuje odczytać bezpośrednio z terminala.Odpowiedzi:
Powinieneś używać kluczy SSH do uwierzytelniania, zamiast umieszczać hasło w linii poleceń, ponieważ jest to bardzo niebezpieczne.
Działa to po skonfigurowaniu kluczy SSH, wystarczy wydać polecenie:
i bez wpisywania innej rzeczy, zostaniesz automatycznie zalogowany.
Skopiuj klucz publiczny SSH na Mac / FreeBSD / Linux z macOS
Zakłada się, że masz dostęp do zdalnego serwera za pomocą uwierzytelniania opartego na haśle (wpisując hasło) i że już wygenerowałeś klucz prywatny / publiczny (jeśli nie, patrz poniżej). W poniższym przykładzie używamy RSA. Na początek skopiujmy klucz (pamiętaj, że katalog „home” różni się między macOS, Linux, BSD itp.):
Za pomocą SCP:
Lub po prostu cat-plik do
authorized_keys
(wolę tę metodę):(Twoja nazwa klucza może się różnić) Jeśli katalog .ssh nie istnieje na serwerze zdalnym, musisz się zalogować i utworzyć.
Teraz klucz został skopiowany z komputera Mac na zdalny serwer. Ustaw prawidłowe uprawnienia do klucza publicznego SSH na zdalnym serwerze:
Następnie dodaj klucz do pliku autoryzowanych kluczy SSH, jeśli plik nie istnieje, utwórz go.
Jeśli plik
authorized_keys
już istnieje,~/.ssh
użyj następującego polecenia:Jeśli plik nie istnieje, wprowadź następujące polecenia:
Wygeneruj klucz publiczny / prywatny SSH na macOS
Otwórz Terminal, przechodząc do Aplikacje -> Narzędzia -> Terminal
W terminalu użyj następującego polecenia, aby rozpocząć generowanie klucza
Następnie zostaniesz poproszony o podanie lokalizacji, w której chcesz utworzyć plik klucza prywatnego:
Wprowadź plik, w którym chcesz zapisać klucz (
/Users/username/.ssh/id_rsa
):Pozostaw to puste, aby utworzyć klucz w domyślnej lokalizacji, czyli
/Users/username/.ssh/id_rsa
. Plik klucza publicznego zostanie utworzony w tej samej lokalizacji i pod tą samą nazwą, ale z rozszerzeniem .PUB.Po pojawieniu się monitu o wybranie hasła. To hasło jest opcjonalne, aby użyć klucza prywatnego.
Twój klucz SSH został wygenerowany.
Pamiętaj, że jeśli wpiszesz hasło, będziesz musiał je wprowadzić przy każdym połączeniu. Narzędzie
ssh-agent
zachowa hasło w pamięci, eliminując potrzebę ręcznego wprowadzania go za każdym razem, gdy łączysz się podczas tej samej sesji. Aby uzyskać więcej informacji zobaczman ssh-agent
źródło
ssh-copy-id
to miłe narzędzie do automatyzacji niektórych z powyższych.Istnieje kilka możliwości. Twój przykład oczywiście nie zadziała, ale możesz osiągnąć coś podobnego za pomocą
sshpass
narzędzia:Uwaga: nie jest to zalecane, ponieważ
password
będzie widoczne dla innych procesów lub w historii powłoki.Znacznie lepszym sposobem na zrobienie tego samego jest skonfigurowanie uwierzytelniania bez hasła przy użyciu kluczy SSH. W skrócie:
źródło
sshpass
zgodnie z zaleceniami, ale napisano, że polecenie nie zostało znalezione.ps auxw | grep sshpass
, powie innym użytkownikom hasło ssh.pi@sshbox:~ $ ps auxw | grep sshpass pi 4891 0.0 0.3 2256 1560 pts/0 S+ 06:29 0:00 sshpass -p zzzzzzzz ssh [email protected]
. Tozzzzzzzz
jest dosłowne; sshpass maskuje treść hasła. Być może wcześniejsze iteracje były mniej świadome prywatności.Długo też szukałem odpowiedzi na to pytanie. Mimo że jest to niepewne i wszystkie te osoby mówią ci, abyś używał kluczy RSA ( co jest bezpieczniejszym i niezawodnym pomysłem ), jest całkiem możliwe.
Użyj
expect
do tego programu. Spodziewaj się, że obejrzy dla ciebie stdout (i myślę, że stderr, jeśli poprawnie skonfigurowany), czekając na pewne wiadomości i odpowiadając na nie za pomocą wyjścia. Spodziewaj się, że sam jest językiem skryptowym, a kiedy robiłem to samo, bardzo ciężko mi było uruchomić mój własny skrypt ze względu na czas. Spodziewaj się jednak również przydatnego narzędzia o nazwieautoexpect
.Dzięki autoexpect będzie cię obserwować i wygenerować dla Ciebie skrypt oczekiwań. Po prostu uruchom autoexpect i odpowiednie polecenie:
i rób to, co normalnie. Po wyjściu z programu (przez wpisanie
exit
powłoki ssh'd) wygeneruje on skrypt. Jeśli nie chcesz, aby cały skrypt, który piszesz, był skryptem oczekiwanym, możesz edytować skrypt z autoexpect (wywoływanyscript.exp
), aby wyjść przed wpisaniemexit
polecenia w powłoce. Linia, którą chcesz przenieść, aby zmienić zakończenie skryptu, to:co oznacza oczekiwanie końca pliku. Mam nadzieję że to pomoże!
źródło
Używanie
expect
jest po prostu niewłaściwe, aby zalogować się do połączenia ssh dla czegokolwiek innego niż w zestawie testowym.To, czego szuka @ ben-a, jest już zaimplementowane w ssh. Sztuka polega na tym, jak go używać. Więc oto idzie:
ssh-keygen
. Użyj ECDSA lub RSA jako-t
(lub typu), a dla RSA użyj 2048 lub 4096 jako-b
(lub długości BITS). To powinno wystarczyć w momencie pisania. ZAWSZE używaj HASŁA!ssh-copy-id
wyżej wymienionej metodologii, aby utworzyć na komputerze, na którym logujesz się (inaczej serwer)~/.ssh/authorized_keys
plik. Wewnątrz znajduje się kopia właśnie wygenerowanego klucza publicznego.~/.ssh/config
. Jeśli nie istnieje, możesz go utworzyć.W tym pliku dodajesz następujące dla swoich potrzeb
Możesz teraz użyć tylko
ssh <name>
do skonfigurowania połączenia, ale nadal będzie ono wymagało hasła do twojego klucza. Aby rozwiązać ten problem, użyj opracowanego do tego celu i dołączonego ssh-agent. Aby dodać swój klucz do agenta, po prostu użyjssh-add <path to keyfile>
. Zostaniesz poproszony o podanie hasła, które bezpiecznie zapisze klucz dla ciebie w tej sesji. Jeśli pojawi się błąd „nie można znaleźć agenta ssh” (lub podobnego), oznacza to, że prawdopodobnie agent nie został uruchomiony. Możesz rozpocząć dla tej sesji za pomocąssh-agent bash
. Spowoduje to uruchomienie nowej powłoki z aktywnym agentem.Wykonując te kroki, nie tylko utrudniasz podszywanie się pod Ciebie przez przechwycenie twoich poświadczeń, ale także utrzymujesz porządek w użyteczności (jest łatwiejszy w użyciu niż zwykłe hasła).
źródło