ssh-copy-id în Linux / Bash

Rețea și transfer date OpenSSH (pachetul openssh-client)

Copiază cheia ta publică SSH pe un server, în authorized_keys, ca să te poți conecta fără parolă.

Sintaxă comandă
ssh-copy-id [-i CHEIE.pub] [-p PORT] utilizator@gazdă

Ce face ssh-copy-id

ssh-copy-id se conectează o dată la server cu parola, adaugă cheia ta publică în ~/.ssh/authorized_keys al utilizatorului de acolo și setează permisiunile corecte. De la conexiunea următoare, ssh folosește cheia.

Comanda verifică întâi ce chei sunt deja instalate și nu le adaugă de două ori. Dacă nu dai -i, alege cheile tale implicite din ~/.ssh.

Opțiuni și argumente

Opțiune / Parametru Descriere
-i FIȘIER Cheia publică de copiat (de exemplu ~/.ssh/id_ed25519_iasi.pub).
-p PORT Portul SSH al serverului, dacă nu este 22.
-n Probă (dry run): arată ce chei ar fi instalate, fără să modifice nimic.
-f Forțează copierea, fără verificarea cheilor deja instalate.

Exemple

Exemplul 1: Prima copiere a cheii pe server

Fără -i se folosește cheia implicită. Parola se cere o singură dată, iar mesajele de la final îți spun cum să testezi conexiunea.

ssh-copy-id ana@203.0.113.10

Ieșire în terminal

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ana/.ssh/id_ed25519.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: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
ana@203.0.113.10's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'ana@203.0.113.10'"
and check to make sure that only the key(s) you wanted were added.

Exemplul 2: Server pe alt port

Dacă cheia era deja pe server, nu se adaugă din nou.

ssh-copy-id -p 2222 deploy@203.0.113.20

Ieșire în terminal

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ana/.ssh/id_ed25519.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: WARNING: All keys were skipped because they already exist on the remote system.
		(if you think this is a mistake, you may want to use -f option)

Exemplul 3: Ce face, simulat local

Pe server, ssh-copy-id face în esență pașii de mai jos: creează ~/.ssh cu permisiuni 700 și adaugă cheia publică într-un authorized_keys cu permisiuni 600. Aici folosim un director local în loc de server.

ssh-keygen -q -t ed25519 -N "" -C "ana@iasi" -f ./cheie
mkdir -p server/.ssh && chmod 700 server/.ssh
cat cheie.pub >> server/.ssh/authorized_keys
chmod 600 server/.ssh/authorized_keys
cut -d' ' -f1,3 server/.ssh/authorized_keys

Rezultat

ssh-ed25519 ana@iasi

Greșeli frecvente

  • Rularea fără să ai o cheie generată: comanda se oprește cu mesajul că nu a găsit nicio identitate. Rulează întâi ssh-keygen.
  • Dezactivarea autentificării cu parolă pe server (PasswordAuthentication no) înainte să verifici că te poți conecta cu cheia.

Comenzi înrudite

  • ssh-keygen: Generează perechi de chei SSH (privată și publică), le schimbă parola și le afișează amprenta.
  • ssh: Conectează în siguranță un terminal criptat la distanță pe un alt server Linux.
  • ~/.ssh/config: Fișierul de configurare al clientului SSH: nume scurte pentru servere, utilizator, port și cheie implicite.