ssh-copy-id to mały, ale bezcenny skrypt z pakietu OpenSSH, który kopiuje Twój publiczny klucz SSH na zdalny serwer i dopisuje go do pliku ~/.ssh/authorized_keys tego serwera. Efekt: od tej pory logujesz się kluczem, bez wklepywania hasła przy każdym ssh. Robi też brudną robotę, o której łatwo zapomnieć przy ręcznym kopiowaniu — tworzy katalog .ssh, jeśli go nie ma, i ustawia sensowne uprawnienia, żeby serwer nie odrzucił klucza z powodu zbyt luźnych permisji.
Składnia i najważniejsze opcje
Podstawowa forma to ssh-copy-id [-i klucz] [-p port] użytkownik@host. Najważniejsze flagi:
-i klucz— użyj konkretnego klucza zamiast tego z ssh-agenta lub domyślnego. Jeśli podasz plik bez.pub, skrypt sam go dopisze.-p port— port SSH na zdalnym hoście, gdy serwer nie słucha na standardowym 22.-f— tryb wymuszony: nie sprawdza, czy klucz już tam jest, tylko wgrywa. Przydatne, gdy detekcja się wykłada.-n— dry-run: pokazuje, które klucze zostałyby zainstalowane, ale niczego nie zmienia. Świetne do podglądu przed strzałem.-s— tryb SFTP: zamiast wykonywać komendy zdalnie, pobieraauthorized_keys, edytuje lokalnie i wgrywa przez sftp. Ratunek, gdy zdalna powłoka jest ograniczona.-t plik— wskazuje docelowy plik z kluczami na serwerze (domyślnieauthorized_keys).
Przykłady użycia
ssh-copy-id [email protected]— wgrywa domyślny klucz na serwer i pyta o hasło ostatni raz.ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]— wskazujesz konkretny klucz publiczny, gdy masz ich kilka.ssh-copy-id -p 2222 [email protected]— serwer nasłuchuje na porcie 2222 zamiast 22.ssh-copy-id -n [email protected]— podgląd na sucho: sprawdzasz, co poleciałoby na serwer, zanim naprawdę wgrasz.ssh-copy-id -f -i ~/.ssh/id_rsa.pub [email protected]— wymuszasz wgranie klucza, pomijając kontrolę duplikatów.
Częste błędy i pułapki
Najczęstsza wpadka: nie masz jeszcze klucza. ssh-copy-id tylko kopiuje istniejący klucz — jeśli nie zrobiłeś wcześniej ssh-keygen, nie ma czego wgrać. Druga: podajesz plik z kluczem prywatnym zamiast publicznego; skrypt zwykle sam doda .pub, ale lepiej nie kusić losu i wskazywać wprost .pub.
Uważaj też na macOS — systemowo ssh-copy-id tam nie występuje, doinstalujesz go przez Homebrew (pakiet ssh-copy-id lub openssh). Na Linuksie bywa częścią pakietu openssh-client. I klasyk: jeśli po wgraniu klucza serwer dalej pyta o hasło, sprawdź uprawnienia — katalog .ssh powinien mieć 700, a authorized_keys 600. Zbyt luźne permisje to najczęstszy powód, dla którego SSH ignoruje klucz.
Powiązane komendy: ssh-keygen (generowanie pary kluczy), ssh-add i ssh-agent (zarządzanie kluczami w pamięci), ssh oraz scp (logowanie i kopiowanie plików).