ssh-keygen: tworzenie kluczy SSH, rejestracja klucza publicznego i ssh-copy-id
ssh-keygen to polecenie OpenSSH, które tworzy parę klucza prywatnego i publicznego do połączeń SSH, a do tego sprawdza odciski, zmienia hasło klucza i porządkuje known_hosts. Na serwerze AlmaLinux 9 utworzono klucze ed25519 i rsa, sprawdzono ich odciski, zmieniono hasło klucza i komentarz, a potem uruchomiono ssh-copy-id w trybie dry-run: na serwer trafia tylko jedna linia klucza publicznego z pliku .pub.
Nazwy kont i ścieżki plików kluczy w wynikach poniżej to przykładowe wartości, a odciski, klucze publiczne i randomart pochodzą z kluczy utworzonych na potrzeby tego artykułu i potem usuniętych. Polecenie, które naprawdę rejestruje klucz publiczny na serwerze, jest tylko zapisane, nie zostało uruchomione.
1️⃣ Tworzenie klucza w ssh-keygen: -t ed25519 i komentarz -C
Klucz tworzysz w formie ssh-keygen -t typ -C komentarz. -t to typ klucza, a -C to komentarz dopisywany na końcu klucza publicznego, w którym wpisujesz adres e-mail albo przeznaczenie klucza. Poniżej pełny wynik z plikiem wskazanym przez -f i dwukrotnym naciśnięciem Enter przy pytaniach o hasło klucza.
ssh-keygen -t ed25519 -C "user@example.com" -f ~/.ssh/id_ed25519Generating public/private ed25519 key pair.
Enter passphrase for "/home/user/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com
The key's randomart image is:
+--[ED25519 256]--+
| |
| . |
| o o |
| = o . |
| = Soo . |
| = *+*.. . |
| o.B.o++ . |
| .=o*Eo.+ |
| o+=@OO= |
+----[SHA256]-----+Jeśli przy pytaniu o hasło klucza naciśniesz tylko Enter, klucz będzie bez hasła. Gdy pominiesz -f, przed tym pytaniem pojawi się linia z pytaniem, gdzie zapisać plik. W nawiasie widać domyślną ścieżkę .ssh/id_ed25519 w katalogu domowym i samo Enter zapisuje klucz właśnie tam.
randomart na końcu wyniku to odcisk zamieniony na obrazek. Ten sam obrazek pojawił się przy tworzeniu klucza i przy ponownym sprawdzeniu przez -lv.
ls -l ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub-rw------- 1 user user 411 Oct 29 08:22 /home/user/.ssh/id_ed25519
-rw-r--r-- 1 user user 98 Oct 29 08:22 /home/user/.ssh/id_ed25519.pubKlucz prywatny powstał z uprawnieniami 600, a publiczny z 644. Klucz prywatny trzymasz tylko na swoim komputerze i nigdzie go nie wysyłasz.
cat ~/.ssh/id_ed25519.pubssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.comKlucz publiczny to jedna linia złożona z typu klucza, wartości klucza i komentarza rozdzielonych spacjami. To właśnie ta linia trafia do authorized_keys na serwerze, z którym się łączysz. Rolę każdego pliku w katalogu zebrano w drzewie.
2️⃣ Opcje ssh-keygen: -f, -N, -b, -q
Odpowiadanie na pytania jest wygodne przy ręcznym wpisywaniu, ale w skrypcie pytania muszą zniknąć. Gdy ustawisz plik przez -f, a hasło klucza przez -N, klucz powstaje od razu, bez pytań.
ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N "" -C "deploy@example.com"Generating public/private ed25519 key pair.
Your identification has been saved in /home/user/.ssh/deploy_key
Your public key has been saved in /home/user/.ssh/deploy_key.pub
The key fingerprint is:
SHA256:Rhk2/tgn59K8jtvDWJTOLiYnToM8t4gkdaMfu6TJ0oM deploy@example.com
The key's randomart image is:
+--[ED25519 256]--+
| + |
| o + |
| + . |
| . + o |
| . o S ++o |
| . + + B+ |
| .oo * + .=+ |
| E+o* Boo=++. |
| .=.=oo=o++. |
+----[SHA256]-----+Puste cudzysłowy po -N dają klucz bez hasła, a miejsce zapisu i odcisk pojawiły się za jednym razem, bez żadnego pytania.
ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N ""Generating public/private ed25519 key pair.
/home/user/.ssh/deploy_key already exists.
Overwrite (y/n)?Po ponownym uruchomieniu z tą samą nazwą polecenie po already exists pyta, czy nadpisać plik. Po wpisaniu n nic się nie zmieniło, a polecenie zakończyło się kodem wyjścia 1. Żeby przez pomyłkę nie nadpisać używanego klucza, nowe klucze twórz pod inną nazwą.
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N "" -C "user@example.com"Generating public/private rsa key pair.
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:f+uwCSQjMka1BEHzXADwIWbrlbVRiP6Z4tjnwNwPVAA user@example.com
The key's randomart image is:
+---[RSA 4096]----+
|o=BE*=+. |
|oo.Oo++ |
| .+o+. . |
|.... . |
| .+ o.= S |
| .o+o= + . |
| ++.o . o . |
| . o..o . = . |
| o. . o.o |
+----[SHA256]-----+Dla rsa długość ustawia -b. Według podręcznika domyślnie to 3072 bity; powyżej klucz utworzono z 4096 bitami i w nagłówku randomart pojawiło się RSA 4096. Podręcznik podaje, że ed25519 ma stałą długość, więc -b jest wtedy pomijane.
ssh-keygen -f ~/.ssh/default_key -N "" -C "user@example.com"Generating public/private ed25519 key pair.
Your identification has been saved in /home/user/.ssh/default_key
Your public key has been saved in /home/user/.ssh/default_key.pub
The key fingerprint is:
SHA256:mwy02fpKxjxEVvLC2EUJeaMIiNFOVS0GwWVjN9v0j4c user@example.com
The key's randomart image is:
+--[ED25519 256]--+
|o+ o+=O=*.. |
|o + .*+B== . |
| o ..oB+o.. . |
| . .+.= + |
| = S E o |
| + + o . |
| B + |
| o o |
| ... |
+----[SHA256]-----+Bez -t powstał klucz ed25519.
ssh-keygen -q -t ed25519 -f ~/.ssh/backup_key -N "" -C "backup@example.com"; echo rc=$?rc=0Z -q ukryte jest wszystko, łącznie z odciskiem i randomart, i zostaje tylko kod wyjścia. Przydaje się, gdy skrypt tworzy klucze dla wielu serwerów.
📌 Główne opcje: wyniki z tego artykułu
| Opcja | Zadanie | Wynik w tym artykule | |
|---|---|---|---|
| -t typ | Typ tworzonego klucza | Pierwsza linia wyniku pokazuje typ, np. ed25519 lub rsa; bez opcji ed25519 | |
| -C komentarz | Komentarz dopisywany na końcu klucza publicznego | user@example.com na końcu klucza publicznego wyświetlonego przez cat | |
| -f plik | Ścieżka pliku klucza | Linia o zapisie w /home/user/.ssh/deploy_key; ponownie z tą samą nazwą already exists i Overwrite (y/n)? | |
| -N hasło | Nowe hasło klucza (passphrase); puste cudzysłowy oznaczają brak hasła | Miejsce zapisu i odcisk za jednym razem, bez pytania o hasło | |
| -b bity | Długość klucza | Z 4096 dla rsa w nagłówku randomart widać RSA 4096 | |
| -q | Ukrywa cały wynik | Zostaje tylko linia rc=0 wypisana przez echo | |
| -l | Wypisuje odcisk pliku klucza | Ten sam odcisk SHA256 z klucza publicznego i prywatnego; dla authorized_keys jedna linia na klucz | |
| -E skrót | Ustawia typ skrótu odcisku | Z -E md5 odcisk zaczynający się od MD5:00:7b:02:5e | |
| -v | Razem z -l wypisuje też randomart | Ten sam randomart co przy tworzeniu klucza | |
| -y | Wyciąga z klucza prywatnego klucz publiczny i go wypisuje | Jedna linia klucza publicznego identyczna znak w znak z plikiem .pub | |
| -p | Zmienia hasło klucza prywatnego | Pojawia się linia o zapisie z nowym hasłem, a klucz prywatny rośnie z 411 do 464 bajtów | |
| -P hasło | Stare hasło klucza (obecnie ustawione) | Przy dobrym haśle klucz publiczny, przy złym incorrect passphrase supplied to decrypt private key | |
| -c | Zmienia komentarz; nowy podajesz przez -C | Old comment: user@example.com oraz Comment 'user@laptop' applied | |
| -F host | Szuka linii tego hosta w known_hosts | # Host 192.0.2.10 found: line 1 i sama linia | |
| -R host | Usuwa linię tego hosta z known_hosts | known_hosts updated i oryginalny plik known_hosts.old; nieznany host daje not found | |
| -H | Haszuje nazwy hostów i adresy w known_hosts | Linie zaczynające się od |1| oraz WARNING, że plik .old zawiera linie bez haszowania |
📎 Pozostałe opcje: według oficjalnego podręcznika
| Opcja | Zadanie | |
|---|---|---|
| -a rundy | Liczba rund KDF (bcrypt_pbkdf) przy zapisie klucza prywatnego; im więcej, tym wolniejsze sprawdzanie hasła i większa odporność na brute force; domyślnie 16 | |
| -A | Tworzy brakujące klucze hosta dla każdego domyślnego typu (rsa, ecdsa, ed25519) w domyślnych ścieżkach | |
| -B | Wypisuje skrót bubblebabble pliku klucza | |
| -e | Zamienia klucz OpenSSH na format -m (domyślnie RFC4716) i go wypisuje, dla innych programów SSH | |
| -i | Zamienia klucz bez hasła w formacie -m (domyślnie RFC4716) na format OpenSSH i go wypisuje | |
| -m format | Ustawia format klucza (RFC4716, PKCS8, PEM); razem z -p zamienia klucze prywatne między formatami OpenSSH i PEM | |
| -r host | Wypisuje z klucza publicznego rekord DNS SSHFP dla tej nazwy hosta | |
| -s klucz_CA | Podpisuje klucz publiczny kluczem CA i tworzy certyfikat | |
| -L | Wypisuje zawartość certyfikatu | |
| -K | Pobiera do bieżącego katalogu klucze resident zapisane w uwierzytelniaczu FIDO | |
| -Y sign | Podpisuje plik kluczem SSH; podpis zapisuje się z .sig na końcu nazwy pliku, a przestrzeń nazw podajesz przez -n |
3️⃣ ssh-keygen -l do sprawdzania odcisku i -y do wyciągania klucza publicznego
Gdy plików kluczy jest kilka, po samej nazwie trudno poznać, który klucz publiczny pasuje do którego prywatnego. Odcisk jest taki sam dla klucza prywatnego i publicznego, więc porównując przez -l odciski obu plików, potwierdzisz parę.
ssh-keygen -l -f ~/.ssh/id_ed25519.pub256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)ssh-keygen -l -f ~/.ssh/id_ed25519256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)Plik klucza publicznego i plik klucza prywatnego dały ten sam odcisk SHA256. 256 na początku to długość klucza, a nawias na końcu to typ klucza.
ssh-keygen -l -E md5 -f ~/.ssh/id_ed25519.pub256 MD5:00:7b:02:5e:b8:ba:85:0c:32:d7:15:7e:72:45:f7:bc user@example.com (ED25519)Z -E md5 wynik przechodzi na starszy format odcisku MD5. Przydaje się do porównania, gdy stary serwer albo panel administracyjny pokazuje odciski MD5.
ssh-keygen -lv -f ~/.ssh/id_ed25519.pub256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)
+--[ED25519 256]--+
| |
| . |
| o o |
| = o . |
| = Soo . |
| = *+*.. . |
| o.B.o++ . |
| .=o*Eo.+ |
| o+=@OO= |
+----[SHA256]-----+Po dodaniu -v randomart pojawia się znowu. Był to ten sam obrazek co przy tworzeniu klucza.
ssh-keygen -l -f ~/.ssh/authorized_keys256 SHA256:Rhk2/tgn59K8jtvDWJTOLiYnToM8t4gkdaMfu6TJ0oM deploy@example.com (ED25519)Gdy podasz plik z wieloma liniami kluczy publicznych, na przykład authorized_keys, dostaniesz jedną linię odcisku na każdy klucz. Tak sprawdzisz, jakie klucze są zarejestrowane na serwerze.
ssh-keygen -y -f ~/.ssh/id_ed25519ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com-y ponownie wyciąga klucz publiczny z prywatnego. Jeśli usunięto plik .pub albo na inny komputer przeniesiono tylko klucz prywatny, wystarczy zapisać ten wynik do pliku. Wynik był identyczny znak w znak z oryginalnym plikiem .pub.
4️⃣ ssh-keygen -p do zmiany hasła klucza i -c do zmiany komentarza
Z hasłem na kluczu prywatnym pliku nie da się użyć bez tego hasła, nawet jeśli wycieknie. W zamian trzeba je wpisywać przy każdym połączeniu, więc pasuje do kluczy używanych ręcznie przez ludzi, a nie do kluczy skryptów działających samodzielnie, jak zadania cron.
ssh-keygen -p -f ~/.ssh/id_ed25519 -P "" -N "example-pass"Key has comment 'user@example.com'
Your identification has been saved with the new passphrase.-P to stare hasło klucza, a -N nowe. Klucz nie miał hasła, więc -P dostało puste cudzysłowy i pojawiły się dwie linie o ponownym zapisie z nowym hasłem. Według podręcznika samo -p bez opcji pyta po kolei o stare i nowe hasło.
ls -l ~/.ssh/id_ed25519-rw------- 1 user user 464 Oct 29 08:22 /home/user/.ssh/id_ed25519Po ustawieniu hasła plik klucza prywatnego urósł z 411 do 464 bajtów.
ssh-keygen -y -f ~/.ssh/id_ed25519 -P "example-pass"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.comssh-keygen -y -f ~/.ssh/id_ed25519 -P "wrongpass"Load key "/home/user/.ssh/id_ed25519": incorrect passphrase supplied to decrypt private keyPrzy kluczu z hasłem także -y potrzebuje hasła podanego przez -P. Z dobrym hasłem wyszedł ten sam klucz publiczny co wcześniej, a ze złym polecenie zakończyło się błędem incorrect passphrase. Podręcznik wyjaśnia, że zgubionego hasła nie da się odzyskać, więc jeśli je zapomnisz, utwórz nowy klucz i zarejestruj klucz publiczny od nowa.
ssh-keygen -c -C "user@laptop" -f ~/.ssh/id_ed25519 -P "example-pass"Old comment: user@example.com
Comment 'user@laptop' appliedcat ~/.ssh/id_ed25519.pubssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@laptop-c zmienia komentarz. Stary i nowy komentarz pojawiają się w osobnych liniach, a komentarz na końcu pliku klucza publicznego też zmienił się na user@laptop. Komentarz to tylko etykieta do rozróżniania kluczy, więc sama wartość klucza się nie zmieniła.
ssh-keygen -p -f ~/.ssh/id_ed25519 -P "example-pass" -N ""Key has comment 'user@laptop'
Your identification has been saved with the new passphrase.Aby usunąć hasło, podaj -N puste cudzysłowy. Pojawiają się te same dwie linie, a potem -y znowu zadziałało bez -P.
5️⃣ ssh-keygen -R: usuwanie kluczy hosta z known_hosts
W known_hosts zbierają się klucze hosta serwerów, z którymi się łączono, po jednym w linii. Gdy serwer zostanie przeinstalowany i jego klucz hosta się zmieni, ssh odrzuca połączenie, bo klucz różni się od zapisanego, a opcja usuwająca starą linię to -R. known_hosts poniżej to plik z trzema liniami z przykładowymi adresami, wskazany przez -f.
cat ~/.ssh/known_hosts192.0.2.10 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk
server2.example.com,192.0.2.20 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
[192.0.2.30]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC0WmcBD2HIsiSn+tERrbeFIyExAodSEUhE9j5WMpkRWKażda linia zawiera kolejno nazwę hosta lub adres, typ klucza i wartość klucza. Druga linia, połączona przecinkiem, zawiera nazwę i adres tego samego serwera, a nawiasy kwadratowe z dwukropkiem w trzeciej linii oznaczają port inny niż 22.
ssh-keygen -F 192.0.2.10 -f ~/.ssh/known_hosts# Host 192.0.2.10 found: line 1
192.0.2.10 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk-F wypisuje linię tego hosta razem z jej numerem. Dla nieznanego hosta nic nie wypisało i zakończyło się kodem wyjścia 1.
ssh-keygen -R 192.0.2.10 -f ~/.ssh/known_hosts# Host 192.0.2.10 found: line 1
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.oldcat ~/.ssh/known_hostsserver2.example.com,192.0.2.20 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
[192.0.2.30]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC0WmcBD2HIsiSn+tERrbeFIyExAodSEUhE9j5WMpkRW-R usuwa linię tego hosta i zostawia oryginalny plik jako known_hosts.old. Po usunięciu zostały tylko dwie linie.
ssh-keygen -R 192.0.2.99 -f ~/.ssh/known_hostsHost 192.0.2.99 not found in /home/user/.ssh/known_hostsssh-keygen -R "[192.0.2.30]:2222" -f ~/.ssh/known_hosts# Host [192.0.2.30]:2222 found: line 2
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.oldDla nieznanego hosta pojawiła się tylko jedna linia not found. Serwer na innym porcie znajdziesz tylko wtedy, gdy podasz nawiasy kwadratowe i port dokładnie tak, jak zapisano je w known_hosts.
ssh-keygen -H -f ~/.ssh/known_hostsWARNING: /home/user/.ssh/known_hosts.old contains unhashed entries
Delete this file to ensure privacy of hostnames
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.oldcat ~/.ssh/known_hosts|1|JL/knNlx/BnCoOWp5rNeRo3r1rE=|OCPyeFd1rgG8P2QGzrju/V2Y8c4= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
|1|AG9QJQvGaQmVsEusSdND1lM9cKI=|Ue0a9suJIzN0yxoJgV7ClLBgSYw= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR-H haszuje nazwy hostów i adresy. Ta opcja sprawia, że wyciek pliku nie zdradza, z jakimi serwerami się łączono; nazwa i adres połączone przecinkiem rozdzieliły się na dwie zahaszowane linie. Pojawiło się też ostrzeżenie, że plik .old nadal zawiera treść bez haszowania.
ssh-keygen -F server2.example.com -f ~/.ssh/known_hosts# Host server2.example.com found: line 1
|1|JL/knNlx/BnCoOWp5rNeRo3r1rE=|OCPyeFd1rgG8P2QGzrju/V2Y8c4= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyRNawet w zahaszowanym pliku -F znalazło linię po nazwie.
6️⃣ ssh-copy-id: rejestracja klucza publicznego i authorized_keys
Samo utworzenie klucza nie wystarczy: dopóki serwer nie zna klucza publicznego, logujesz się dalej hasłem do konta. Miejscem, w którym serwer poznaje klucz publiczny, jest ~/.ssh/authorized_keys konta, na które się logujesz, a ssh-copy-id to polecenie, które dopisuje do tego pliku linię z .pub. Klucz prywatny zostaje na twoim komputerze, a na serwer przechodzi tylko linia klucza publicznego. Kliknij przyciski kroków na diagramie poniżej, aby zobaczyć, gdzie trafiają oba pliki.
ssh-copy-id -n -i ~/.ssh/deploy_key.pub -o ConnectTimeout=3 user@192.0.2.10/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/deploy_key.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: ERROR: ssh: connect to host 192.0.2.10 port 22: Connection timed out-n to dry-run, więc na serwerze nic nie jest zapisywane. Mimo to ssh-copy-id najpierw próbuje zalogować się tym kluczem, żeby odsiać już zarejestrowane klucze, a ponieważ 192.0.2.10 to adres do dokumentacji, połączenie się nie udało i skończyło się na timed out. Opcje po -o trafiają bez zmian do ssh.
ssh-copy-id -n -f -i ~/.ssh/deploy_key.pub -o ConnectTimeout=3 user@192.0.2.10/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/deploy_key.pub"
=-=-=-=-=-=-=-=
Would have added the following key(s):
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk deploy@example.com
=-=-=-=-=-=-=-=-f to tryb wymuszony, który pomija to sprawdzenie. Razem z -n pod Would have added pojawiła się linia klucza publicznego, która trafiłaby na serwer. To ta sama linia co zawartość pliku .pub.
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.0.2.10Właściwa rejestracja odbywa się tym poleceniem bez -n. Według skryptu ssh-copy-id i podręcznika polecenie raz pyta o hasło do konta, dopisuje klucz publiczny na końcu ~/.ssh/authorized_keys na serwerze, a potem wypisuje Number of key(s) added: 1. Jeśli pliku i katalogu nie ma, tworzy je, a jeśli ten sam klucz już jest, pomija go.
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@192.0.2.10Jeśli port to nie 22, podaj go przez -p.
Tam, gdzie nie ma ssh-copy-id, dopisz linię klucza publicznego do authorized_keys na serwerze samodzielnie. Zaloguj się na serwer hasłem i wykonaj kroki poniżej. Wynik sprawdzono, dopisując plik .pub na tym samym serwerze; na innym serwerze skopiuj linię z pliku .pub i dopisz ją przez echo.
mkdir -p ~/.sshchmod 700 ~/.sshJeśli katalogu .ssh nie ma, utwórz go i ustaw uprawnienia na 700.
cat ~/.ssh/deploy_key.pub >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keyscat ~/.ssh/authorized_keysssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk deploy@example.comls -l ~/.ssh/authorized_keys-rw------- 1 user user 100 Oct 29 08:22 /home/user/.ssh/authorized_keysLinia klucza publicznego trafiła do authorized_keys z uprawnieniami 600. Punkt StrictModes w podręczniku sshd_config podaje, że przy ustawieniach domyślnych sshd najpierw sprawdza uprawnienia plików użytkownika i odrzuca logowanie, jeśli każdy może w nich pisać.
ssh -i ~/.ssh/id_ed25519 user@192.0.2.10Po rejestracji łączysz się kluczem prywatnym. Jeśli klucz ma domyślną nazwę, na przykład id_ed25519, ssh znajdzie go sam; jeśli ma inną nazwę, na przykład deploy_key, wskaż plik opcją ssh -i.
🔲 Symulator polecenia ssh-keygen
W symulatorze poniżej możesz sam wpisać ssh-keygen, żeby utworzyć klucze, sprawdzić odciski, zmienić hasło klucza, uporządkować known_hosts i wypróbować ssh-copy-id. Odciski i klucze publiczne to te same przykładowe wartości co w artykule, a ssh-copy-id tylko udaje rejestrację na wirtualnym serwerze.
🔢 FAQ & polecane treści
Windows · Klucz publiczny
Jak wygenerować klucz publiczny w Xshell
Kroki tworzenia klucza publicznego kreatorem kluczy w kliencie SSH dla Windows Xshell i rejestrowania go na serwerze.
SSH · Ustawienia serwera
Konfiguracja SSH: funkcje i ustawienia pliku sshd_config
Artykuł o ustawianiu w sshd_config serwera odbierającego takich pozycji jak port, logowanie roota i uwierzytelnianie kluczem publicznym.
Linux · Pojęcia
SSH w Linuksie: definicja i podstawowe ustawienia
Czym jest SSH i czym różni się od Telnetu oraz jak włączyć sshd na serwerze i sprawdzić podstawowe ustawienia.
ℹ️ Informacja o linkach partnerskich
Treści tej witryny zawierają linki partnerskie. Jeśli odwiedzający kupi produkt lub usługę przez taki link, witryna otrzymuje od sprzedawcy prowizję. Kwota płacona przy tym przez kupującego (podczas promocji spada↓) nie wzrasta. Podane ceny, rabaty i dostępność odnoszą się do chwili pisania i mogą różnić się od stanu faktycznego, dlatego przed zakupem sprawdź je u sprzedawcy. Produkty wybieramy i oceniamy według własnych kryteriów, a prowizja nie wpływa ani na kolejność prezentacji, ani na treść ocen.