Chcę mieć możliwość zalogowania się do pilota przez ssh bez konieczności ciągłego wprowadzania hasła.
- Jak to skonfigurować?
- Czy do wykonania sesji bez hasła wymagane jest inne polecenie?
Chcę mieć możliwość zalogowania się do pilota przez ssh bez konieczności ciągłego wprowadzania hasła.
Odpowiedzi:
Wykonaj następujące polecenia:
ssh-keygen
Następnie musisz skopiować nowy klucz na serwer :
ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"
Po skopiowaniu klucza ssh do komputera jak zwykle:
ssh user@host
Możesz teraz zalogować się bez wprowadzania hasła z komputera, na którym wykonałeś polecenia.
not-marco@rinzwind-desktop:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa):
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo. |
|*B.+ . . |
|*=o . o . |
| = . = |
|. o S |
|E. |
| o |
| . |
| |
+-----------------+
not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password:
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:
~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
Zakłada się, że można już pomyślnie połączyć się z serwerem za pośrednictwem SSH.
Musisz wygenerować klucz SSH, który pozwoli ci zidentyfikować siebie jako osobę bez używania hasła. Możesz zdecydować się na ochronę kluczy hasłem, jeśli chcesz, ale można to pozostawić puste, umożliwiając dostęp SSH bez hasła.
ssh-keygen
go, aby utworzyć plik id_rsa
i id_rsa.pub
. pub
Plik jest to, co dzieje się na serwerach, klucz prywatny ( id_rsa
) jest to, co pozostaje z wami i to w jaki sposób identyfikować siebie.ssh-copy-id user@server
zastępując użytkownika zdalnym użytkownikiem, a serwerem nazwą DNS komputera lub adresem IP. Zostaniesz poproszony o podanie hasła SSH, wprowadź je, a jeśli wszystko się powiedzie, będziesz mógł uzyskać dostęp do urządzenia ssh user@server
bez potrzeby podawania hasła.ssh-keygen
zgodnie z instrukcjami wyświetlanymi na ekranie, a następnie wpisać ssh-copy-id user@server
zastępując użytkownika zdalnym użytkownikiem, a serwer zdalnym komputerem
ssh-copy-id "not-marco@127.0.0.1 -p 1234"
.
Zwykle robię to w następujący sposób:
ssh-keygen -t rsa
(Gdy pojawi się monit o hasło, pozostaw je puste)
Następnie:
cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'
(Wymaga to, aby folder .ssh znajdował się w katalogu domowym na docelowej nazwie hosta, w którym znajduje się plik autoryzowanych_kluczy)
Oczywiście zastąp nazwę użytkownika żądaną nazwą użytkownika, a nazwę hosta żądaną nazwą hosta lub adresem IP
Następnie po prostu SSH do tego pola, tak jak jesteś przyzwyczajony.
touch
i chmod
polecenia w odpowiedzi Rinzwind za?
.ssh/authorized_keys
pliku na 0600, inaczej to nie zadziała
Zwykle używam sshpass
do tego, instaluję go sudo apt-get install sshpass
i używam w ten sposób
sshpass -p 'password' ssh your_username@your_server
sshpass
jest to bardzo przydatny hack w przypadkach, gdy nie można zmienić metody uwierzytelniania na zdalnym serwerze!
Wyłącz uwierzytelnianie hasła
Ponieważ wiele osób korzystających z serwerów SSH używa słabych haseł, wielu atakujących online szuka serwera SSH, a następnie losowo zaczyna zgadywać hasła. Atakujący może wypróbować tysiące haseł w ciągu godziny i odgadnąć nawet najsilniejsze hasło, mając wystarczająco dużo czasu. Zalecanym rozwiązaniem jest użycie kluczy SSH zamiast haseł. Aby być tak trudnym do odgadnięcia jak zwykły klucz SSH, hasło musi zawierać 634 losowych liter i cyfr. Jeśli zawsze będziesz w stanie zalogować się do komputera za pomocą klucza SSH, należy całkowicie wyłączyć uwierzytelnianie za pomocą hasła.
Jeśli wyłączysz uwierzytelnianie za pomocą hasła, będzie można połączyć się tylko z komputerów, które zostały specjalnie zatwierdzone. To znacznie poprawia twoje bezpieczeństwo, ale uniemożliwia ci połączenie się z własnym komputerem z komputera znajomego bez wcześniejszego zatwierdzenia komputera lub z własnego laptopa, gdy przypadkowo usuniesz klucz.
Zaleca się wyłączenie uwierzytelniania hasła, chyba że masz konkretny powód, aby tego nie robić.
Aby wyłączyć uwierzytelnianie za pomocą hasła, poszukaj następującego wiersza w pliku sshd_config:
#PasswordAuthentication yes
zamień go na linię wyglądającą tak:
PasswordAuthentication no
Po zapisaniu pliku i zrestartowaniu serwera SSH nie powinieneś być nawet pytany o hasło podczas logowania.
https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication
PasswordAuthentication no
na wszystkich użytkowników? Jeśli nie, jak mogę go wyłączyć dla zwykłych użytkowników, ale pozostawić go bez zmian dla roota podczas testowania? Naprawdę nie chcę tego udaremniać i całkowicie się zamykać.
Permission denied (publickey).
z PasswordAuthentication no
. Co mam zrobić Czy mogę zmienić PasswordAuthentication no
na innym hoście?
To rozwiązanie jest przeznaczone specjalnie dla użytkowników korzystających z systemu Windows do ssh na swoich zdalnych komputerach, w tym obrazach w chmurze w AWS Cloud i GCE Cloud
Ostatnio użyłem tego rozwiązania do zdalnego logowania nowych wdrożonych obrazów VM na GCE.
puttygen
pobierz puttygenwinscp
pobierz winscpJeśli posiadasz klucz prywatny:
Otwórz puttygen
, naciśnij przycisk ładowania i wybierz *.pem
plik klucza prywatnego ( ).
Jeśli nie posiadasz klucza prywatnego:
puttygen
,(ze źródła 1, link podany poniżej)
notepad
)Skopiuj dane klucza publicznego z sekcji „Klucz publiczny do wklejenia do pliku kluczy autoryzowanych OpenSSH” generatora kluczy PuTTY i wklej dane klucza do authorized_keys
pliku.
Upewnij się, że w tym pliku jest tylko jeden wiersz tekstu.
Prześlij plik autoryzowanych kluczy do katalogu domowego na zdalnym komputerze.
Utwórz .ssh
katalog (jeśli nie istnieje)
Skopiuj authorized_keys
plik do .ssh
katalogu.
(spowoduje to zastąpienie istniejącego authorized_keys
pliku, zwróć uwagę na to).
Jeśli plik istnieje, po prostu dodaj zawartość tego pliku do istniejącego pliku.
Uruchom polecenia, aby ustawić uprawnienia:
sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
Teraz będziesz mógł przejść ssh
do zdalnego komputera bez podawania poświadczeń za każdym razem.
Jeśli utworzysz parę kluczy publicznych / cenowych i zalogujesz się przy użyciu naszego nowo utworzonego klucza publicznego, nie będziesz musiał wpisywać swojego hasła. W zależności od konfiguracji twojego breloka i / lub agenta ssh może być konieczne zabezpieczenie twojego klucza hasłem.
Oto jedno z wielu krótkich poradników dla Ciebie. Kluczowe znaczenie dla bezpieczeństwa tej metody ma to, aby wygenerowany klucz prywatny pozostał prywatny! Nigdy nie należy udostępniać go nikomu ani zezwalać na dostęp do niego w jakikolwiek sposób.
To polecenie generuje dość silny klucz w ~/.ssh/
:
ssh-keygen -b 4096
W ~/.ssh/
znajdziesz swój klucz publiczny jako id_rsa.pub
. Jego zawartość należy dołączyć do authorized_keys
pliku serwera , przenosząc za pośrednictwem przenośnego nośnika (pendrive) lub krótko włączając uwierzytelnianie hasła na serwerze, a następnie używając go, ssh-copy-id ~/.ssh/id_rsa.pub username@server
a następnie ponownie wyłączając.
Jeśli zdecydujesz się zabezpieczyć swój klucz za pomocą hasła (w pierwszym kroku), możesz użyć ssh-agent
lub klucza Ubuntu, aby zabezpieczyć ten farysek lokalnie, więc nie musisz go cały czas wpisywać.
Aby wprowadzić pewne zmiany:
Mac domyślnie nie ma ssh-copy-id
, sam musisz go zainstalować:
curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
chmod +x /usr/local/bin/ssh-copy-id
znajdź więcej tutaj: https://github.com/beautifulcode/ssh-copy-id-for-OSX
jeśli dokonałeś przekierowania portów, polecenie powinno wyglądać tak:
ssh-copy-id "not-marco@127.0.0.1 -p 2222"
zauważ, że cytaty są konieczne.
Odpowiednio aplikacje ssh
oraz scp
zdalne logowanie i zdalne kopiowanie umożliwiają komunikację ze zdalnym hostem bez podawania hasła. Wymaga to przestrzegania procedury uwierzytelniania, takiej jak opisana poniżej. Przez klienta rozumiemy maszynę, na której siedzisz, a przez serwer rozumiemy maszynę, na którą chcesz się zalogować bez podawania hasła. Kroki procedury uwierzytelniania to:
$HOME/.ssh
.$HOME/.ssh/authorized_keys
lub $HOME/.ssh/authorized_keys2
na serwerze.Istnieją trzy różne typy protokołów uwierzytelniania. Określ typ podczas uruchamiania ssh-keygen:
chmod 0700
upewnić się, że ten plik nie jest czytelny dla innych) i tożsamością.pub (klucz publiczny).ssh-keygen -t rsa
i powoduje utworzenie plików id_rsa
(klucz prywatny) i id_rsa.pub
(klucz publiczny)ssh-keygen -t dsa
i powoduje utworzenie plików id_dsa
(klucz prywatny) i id_dsa.pub
(klucz publiczny)Podczas uruchamiania ssh-keygen możesz polegać na domyślnych odpowiedziach (co oznacza, że nie podajesz hasła). To sprawia, że cała konfiguracja jest prosta, ale także niepewna.
Możesz określić typ kluczy, które będą używane przez opcję ssh ; ssh -1
wymusza użycie kluczy RSA1 (wersja protokołu 1), natomiast ssh -2
zmusza ssh do wypróbowania tylko kluczy RSA lub DSA (wersja protokołu 2). W poniższych przykładach generujemy i instalujemy klucze RSA1 i DSA na zdalnym hoście, abyś miał większą elastyczność. Możesz utworzyć plik konfiguracyjny w swoim .ssh
katalogu za pomocą wiersza
Protocol 1,2
To powoduje, że ssh próbuje połączenia RSA1 (wersja protokołu 1) przed RSA / DSA (wersja protokołu 2).
remote=user@remotehost # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy RSA1 key:
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"
remote=user@remotehost # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"
To wszystko, co musisz zrobić, jeśli nie użyłeś hasła podczas generowania kluczy. Możesz przetestować połączenie, uruchamiając ssh $ remote i sprawdzić, czy możesz się zalogować bez podania hasła (być może będziesz musiał użyć -1
lub -2
jako opcji ssh ). Procedurę można oczywiście powtórzyć dla dowolnej maszyny, na której chcesz się zalogować.
Jeśli użyłeś hasła, będziesz musiał uruchomić program, ssh-agent
aby uruchomić specjalną powłokę, a następnie ssh-add
zarejestrować kombinację klucz / hasłosshd
. Więcej informacji można znaleźć na stronach podręcznika użytkownika tych programów.
ssh-no-password.sh
#!/bin/sh
# create ssh connections without giving a password
if [ $# -lt 1 ]; then
echo Usage: $0 username@remotehost
exit
fi
remote="$1" # 1st command-line argument is the user@remotehost address
this=$HOST # name of client host
# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
echo "just type RETURN for each question:" # no passphrase - unsecure!!
# generate RSA1, RSA and DSA keys:
echo; echo; echo
ssh-keygen
echo; echo; echo
ssh-keygen -t rsa
echo; echo; echo
ssh-keygen -t dsa
else
# we have $HOME/.ssh, but check that we have all types of
# keys (RSA1, RSA, DSA):
if [ ! -f $HOME/.ssh/identity ]; then
# generate RSA1 keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen
fi
if [ ! -f $HOME/.ssh/id_rsa ]; then
# generate RSA keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen -t rsa
fi
if [ ! -f $HOME/.ssh/id_rsa ]; then
# generate DSA keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen -t dsa
fi
fi
cd $HOME/.ssh
if [ ! -f config ]; then
# make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
echo "Protocol 1,2" > config
fi
# copy public keys (all three types) to the destination host:
echo; echo; echo
# create .ssh on remote host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy RSA1 key:
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote host:
echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"
echo; echo; echo
echo "try an ssh $remote"
skopiowane z: http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html
Chciałbym dodać odpowiedź dla tych, którzy mogą znaleźć hasło, nawet jeśli przeczytali wszystkie odpowiedzi tutaj, ponieważ ustawiłeś IdentitiesOnly tylko na tak. Odpowiedź tutaj może zaoszczędzić dużo czasu na zarządzanie wieloma kluczami, które są kluczami do git lub serwera.
Po wygenerowaniu klucza i skopiowaniu go na serwer:
ssh-keygen # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub lerner@192.168.20.160
Odkryłem, że to nie działa.
Potem poszedłem sprawdzić ~/.ssh/config
plik na kliencie, zobaczyłem to na dole:
Host *
IdentitiesOnly yes
Następnie dodaję to powyżej:
Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something
Mogę się zalogować, wchodząc ssh somename
.
Następnie możesz dodać wiele kluczy ssh, używając swoich ulubionych nazw, i wystarczy dodać ustawienia, takie jak powyższe cztery linie, do pliku konfiguracyjnego.
Host to nazwa, którą chcesz wprowadzić podczas późniejszego łączenia się z serwerem; nazwa_hosta to adres IP serwera; Użytkownik to nazwa użytkownika, którą logujesz na serwerze; a plik tożsamości to plik, w którym przechowujesz wygenerowany klucz.