Domyślnie ssh wyszukuje id_dsa
i id_rsa
pliki. Klucze nie muszą być tak nazywane, możesz je mykey
równie dobrze nazwać , a nawet umieścić w innym katalogu. Jeśli jednak zrobisz jedną z nich, musisz jawnie odwołać się do klucza w komendzie ssh w następujący sposób:
ssh user@server -i /path/to/mykey
Jeśli polecenie nie akceptuje -i
, np. sshfs
Skorzystaj z IdentityFile
opcji:
sshfs -o IdentityFile=/path/to/mykey user@host:/path/on/remote /mountpoint
Jak to działa
Podczas generowania klucza otrzymasz dwa pliki: id_rsa
(klucz prywatny) i id_rsa.pub
(klucz publiczny). Jak sugerują ich nazwy, klucz prywatny należy zachować w tajemnicy, a klucz publiczny można opublikować publicznie.
Uwierzytelnianie za pomocą klucza publicznego działa z kluczem publicznym i prywatnym. Zarówno klient, jak i serwer mają własne klucze. Podczas instalacji openssh-server
serwera klucze publiczne i prywatne są generowane automatycznie. W przypadku klienta musisz to zrobić samodzielnie.
Kiedy (klient) łączysz się z serwerem, klucze publiczne są wymieniane. Otrzymasz jeden serwer, a serwer twój. Przy pierwszym otrzymaniu klucza publicznego serwera zostaniesz poproszony o jego zaakceptowanie. Jeśli ten klucz publiczny zmienia się z czasem, zostaniesz ostrzeżony, ponieważ trwa możliwy atak MITM (Man in the middle), przechwytujący ruch między klientem a serwerem.
Serwer sprawdza, czy możesz łączyć się (zdefiniowany w /etc/ssh/sshd_config
) i czy Twój klucz publiczny jest wymieniony w ~/.ssh/authorized_keys
pliku. Możliwe przyczyny odmowy klucza publicznego:
/etc/ssh/sshd_config
:
AllowUsers
lub AllowGroups
jest określony, ale użytkownik serwera nie jest wymieniony na liście grup lub użytkowników (domyślnie nie jest zdefiniowany, nie nakłada żadnych ograniczeń na logowanie się użytkowników lub grup).
DenyUsers
lub DenyGroups
jest określony i znajdujesz się na liście użytkowników lub grup.
- Próbujesz zalogować się jako root, ale
PermitRootLogin
jest ustawiony na No
(domyślny yes
).
PubkeyAuthentication
jest ustawiony na No
(domyślny yes
).
AuthorizedKeysFile
jest ustawiony w innej lokalizacji, a klucze publiczne nie są dodawane do tego pliku (domyślnie .ssh/authorized_keys
w stosunku do katalogu domowego)
~/.ssh/authorized_keys
: twój klucz publiczny nie został dodany do tego pliku (pamiętaj, że ten plik jest czytany jako użytkownik root)
Używanie wielu kluczy
Często zdarza się, że używasz wielu kluczy. Zamiast biegać ssh user@host -i /path/to/identity_file
, można użyć pliku konfiguracyjnego ~/.ssh/config
.
Typowe ustawienia to IdentityFile (klucze) i port. Następna konfiguracja sprawdzi „id_dsa” i „bender” tylko podczas łączenia z ssh youruser@yourhost
:
Host yourhost
IdentityFile ~/.ssh/id_dsa
IdentityFile ~/.ssh/bender
W przypadku pominięcia Host yourhost
ustawienia zostaną zastosowane do wszystkich połączeń SSH. Inne opcje mogą być określone dla tego gospodarza meczu, jak User youruser
, Port 2222
itp Pozwoliłoby to na połączenie z skrót ssh yourhost
zamiast ssh -p2222 youruser@yourhost -i ~/.ssh/id_dsa -i ~/.ssh/bender
.
ssh_config(5)
: Nazwa pliku może używać składni tyldy w odniesieniu do katalogu domowego użytkownika lub jednego z następujących znaków specjalnych: '% d' (katalog domowy lokalnego użytkownika), '% u' (lokalna nazwa użytkownika), '% l '(nazwa lokalnego hosta),'% h '(nazwa zdalnego hosta) lub'% r '(nazwa zdalnego użytkownika). Nie można podać symboli wieloznacznych, ale chyba powinno to być wystarczająco wygodne. Pamiętaj, że serwer musi sondować każdy wysłany klucz, dlatego lepiej jest określić mniej kluczy. Symbole wieloznaczne dotyczące pracy hosta, zobacz ponownie stronę podręcznikassh_config(5)
..ssh/authorized_keys
pliku na zdalnych komputerach. Jeśli użyjesz standardowej.ssh/id_rsa
nazwy pliku (lub id_dsa, id_ecdsa lub najnowszego id_ed25519), ssh spróbuje to automatycznie i nie musisz określać tegoIdentityFile
w konfiguracji (ani-i path/to/id_file
parametru dlassh
).Moja ulubiona metoda umożliwia automatyczne wybranie klucza prywatnego
SSH zastąpi% l nazwą lokalnego komputera,% r zdalną nazwą użytkownika i% h zdalnym hostem, więc jeśli chciałbym połączyć się z mojego komputera o nazwie foo, aby zablokować się jako użytkownik, uruchamiam:
A ssh automatycznie użyje:
Ponieważ lokalny host jest również przechowywany, pozwala to na udostępnianie katalogów domowych przez NFS (inny klucz na maszynę!), A nawet identyfikację, na której maszynie klucz miał być ...
źródło
Biorąc pod uwagę komentarz StevenRoose'a, że określenie wielu klawiszy zajmuje więcej czasu, a ja gram z dużą ilością klawiszy, chciałbym zasugerować moje osobiste rozwiązanie.
Tworzę dowiązanie symboliczne do klucza, którego chcę używać w tym czasie, a ponieważ zmienia się to nieczęsto w zależności od projektu, nad którym pracuję, jestem z niego zadowolony.
Tutaj mam link do moich kluczy dla maszyn działających pod wirtualnym pudełkiem:
Można również dodać naprawdę szybki skrypt, aby przejść do innego zestawu bez konieczności ręcznego wpisywania polecenia ln .
Ponownie, nie jest to rozwiązanie tylko dla dwóch kluczy, ale dla większej liczby może być wykonalne.
źródło