ssh-copy-id

Kopiuje publiczny klucz SSH na zdalny serwer, umożliwiając logowanie bez hasła.

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 portport 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, pobiera authorized_keys, edytuje lokalnie i wgrywa przez sftp. Ratunek, gdy zdalna powłoka jest ograniczona.
  • -t plik — wskazuje docelowy plik z kluczami na serwerze (domyślnie authorized_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).