Próbowałem napisać skrypt powłoki, który może wykonać automatyczne logowanie do serwera ssh przy użyciu hasła wymienionego w skrypcie. Napisałem następujący kod:
set timeout 30
/usr/bin/ssh -p 8484 [email protected]
expect
{
"[email protected]'s password"
{
send "password\r"
}
}
Ten kod nie działa poprawnie, wciąż prosi o hasło. Czy ktoś może mi pomóc w rozwiązaniu tego problemu
Odpowiedzi:
Kiedyś napisałem
expect
skrypt, aby zalogować się na serwerze ssh (takim jak Twoja sprawa), a mój skrypt wyglądał mniej więcej tak:Myślę, że może
interact
brakuje tego w twoim skrypcie.źródło
cd
ils
i odczytać zawartość pliku, jak również. Czy można to zrobić po interakcji? Odpowiedzls
polecenie po zalogowaniu. Na przykład po wysłaniu hasła wykonajexpect
tekst wiersza polecenia (aby upewnić się, że jesteś zalogowany), a następniesend "ls\r"
. Wszystko to dzieje się wcześniejinteract
.file_list
po wyjściu, aby uzyskać dostęp z lokalnego wiersza poleceniaZrozumiesz to źle. To, co chcesz zrobić, to wygenerować parę kluczy ssh bez hasła, a następnie (o ile serwer obsługuje uwierzytelnianie za pomocą klucza RSA) możesz wejść bez konieczności wpisywania hasła dla wszystkich. Jest to zagrożenie bezpieczeństwa, jeśli klucz prywatny jest przechowywany w miejscu, w którym mógłby zostać skradziony.
Wykonaj następujące kroki:
mkdir -p ~/.ssh
cd ~/.ssh
ssh-keygen -type dsa -i mysshkeys
W twoim
~/.ssh
katalogu będą teraz dwa plikimysshkey.pub
imysshkey
.mysshkey.pub
to twój klucz publiczny, ten można bezpiecznie umieścić na zdalnych serwerach.mysshkey
jest Twój prywatny klucz podawania haseł, to nie jest bezpieczne, aby umieścić na serwerach zdalnych (lub gdzieś kogoś innego może dostać kopię).Na serwerze chcesz SSH na:
mkdir -p ~/.ssh
mysshkey.pub
do~/.ssh/authorized_keys
~/.ssh/authorized_keys
znaczychmod
„d600
Teraz, aby uruchomić go na komputerze lokalnym, uruchom następujące polecenie:
I będziesz zalogowany bez pytania o hasło.
Jest to o wiele lepsza metoda zarządzania automatycznymi logowaniami, ponieważ nie kończysz na twardym kodowaniu hasła w wielu miejscach, które wymagają aktualizacji, jeśli kiedykolwiek je zmienisz.
źródło
W przypadku dystrybucji opartych na Debianie
sshpass
pakiet zapewnia łatwiejszy sposób robienia tego, co chcesz. Pakiet jest dostępny dla wielu innych popularnych dystrybucji. Najpierw musisz go skonfigurować:Następnie wywołaj polecenie SSH ze skryptu takiego jak ten:
Zapewnia to większą elastyczność, na przykład w przypadku korzystania z innego ustawienia narodowego lub konieczności zmiany hasła, niż przy użyciu rozwiązań
expect
.źródło
Najpierw zainstaluj sshPass
sudo apt-get install sshpass
Następnie utwórz alias w pliku .bashrc jako
Teraz ponownie załaduj zmieniony plik .bashrc przez
source ~/.bashrc
Skończyłeś.
Teraz możesz uruchomić ssh używając wyżej utworzonego aliasu
sshLogin
w terminalu.źródło
możesz użyć tego:
źródło
Wszystko, czego potrzebujesz, aby utworzyć klucz mieszający i zapisać go na komputerze
Po prostu wpisz
następnie wprowadź
następnie zaloguj się normalnie, używając
Teraz nie potrzebujesz hasła
źródło
ssh-copy-id
polecenie, o którym nikt inny nie wspomniał. Głosuję za to.SSH Logowanie bez hasła za pomocą SSH Keygen w 5 łatwych krokach :
Konfiguracja środowiska:
Krok 1: Uwierzytelnianie SSH-Kegen Keys on - (192.168.0.12)
Najpierw zaloguj się do serwera 192.168.0.12 z użytkownikiem i wygeneruj parę kluczy publicznych za pomocą następującego polecenia.
Krok 2: Utwórz katalog .ssh na - 192.168.0.11
Użyj SSH z serwera 192.168.0.12, aby połączyć się z serwerem 192.168.0.11, aby utworzyć katalog .ssh pod nim, używając następującej komendy.
Krok 3: Prześlij wygenerowane klucze publiczne do - 192.168.0.11
Użyj SSH z serwera 192.168.0.12 i załaduj nowy wygenerowany klucz publiczny (id_rsa.pub) na serwer 192.168.0.11 w
.ssh
katalogu użytkownika jako nazwa pliku klucze autoryzowane.Krok 4: Ustaw uprawnienia na - 192.168.0.11
Ze względu na różne wersje SSH na serwerach, musimy ustawić uprawnienia do
.ssh
katalogu iauthorized_keys
pliku.Krok 5: Zaloguj się z 192.168.0.12 do 192.168.0.11 Serwer bez hasła
Od teraz możemy zalogować się do 192.168.0.11 jako użytkownik sheena z serwera 192.168.0.12 jako użytkownik tecmint bez hasła.
źródło
chmod 700 id_rsa
w katalogu .ssh na lokalnym serwerze (klient, tj. 192.168.0.12 w twoim przykładzie): problem rozwiązanyJak już opisano w innych odpowiedziach, również używam,
sshpass
ale łączę to zread
poleceniem przechowywania hasła w tymczasowej zmiennej środowiskowej. W ten sposób moje hasło nigdy nie jest nigdzie zapisane. Oto polecenie, którego używam w jednym wierszu:Następnie musisz wprowadzić hasło (nic nie pojawia się na ekranie), a następnie naciśnięcie enter otworzy połączenie.
źródło
Niedawno to zrobiłem, może ci to pomóc:
jeśli to nie zadziała, będziesz musiał wygenerować klucze na innym komputerze, z którym chcesz się połączyć
wygeneruje klucze prywatne i publiczne i poprosi o lokalizację, pozostaw puste, domyślnie zapisze klucze w folderze .ssh poprosi o podanie hasła, możesz też pozostawić puste puste w folderze .ssh i zmienić nazwa klucza publicznego na „klucze autoryzowane”
to doda użytkownika do listy, przejdź teraz do katalogu domowego i udziel uprawnienia i zrestartuj usługi sshd
teraz będziesz musiał przenieść klucz prywatny do systemu w tej lokalizacji, z której chcesz uruchomić polecenie ssh, a następnie możesz połączyć się z
jeśli nawet to nie działa, wejdź do / etc / ssh otwórz sshd_config z edytorem vim sprawdź, czy pubkeyAuthenticatoin jest ustawiony na tak, czy nie, jeśli nie zmienisz go na tak, zrestartuj usługi sshd, a następnie spróbuj, to na pewno będzie działać .
źródło
Pierwszy argument to nazwa hosta, a drugi to hasło.
Wykonanie: ./script.expect
źródło