it-swarm-eu.dev

Jak zkopírujete veřejný klíč na ssh-server?

Zde je to, co jsem vyzkoušel, a dostal jsem chybu:

$ cat /home/tim/.ssh/id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys'
Password: 
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
39
Tim

OpenSSH přichází s příkazem, jak to provést, ssh-copy-id. Stačí zadat vzdálenou adresu a přidá veřejný klíč do souboru authorized_keys Na vzdáleném počítači:

$ ssh-copy-id [email protected]

Možná budete muset použít příznak -i K vyhledání veřejného klíče na místním počítači:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
74
Michael Mrozek

Vždy byste mohli udělat něco takového:

scp ~/.ssh/id_rsa.pub [email protected]:/tmp/id_rsa.pub
ssh [email protected] 
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

Nejsem si jistý, jestli můžete cat z místního počítače do ssh relace. Jednoduše ji přesuňte do/tmp, jak bylo navrženo.

Upravit: Toto je přesně to, co ssh-copy-id Dělá. Stejně jako Michael řekl.

34
Mr. Monkey

Tato odpověď popisuje, jak dosáhnout zamýšleného způsobu znázorněného v otázce.

Na vzdáleném počítači můžete spustit prostředí Shell a interpretovat zvláštní význam >> operátor přesměrování:

ssh [email protected] sh -c "'cat >> .ssh/authorized_keys'" < /home/tim/.ssh/id_rsa.pub

Operátor přesměrování >> je obvykle interpretován Shellem.

Když spustíte ssh Host 'command >> file' pak není zaručeno, že command >> file bude interpretováno Shellem. Ve vašem případě command >> file je vykonán místo toho Shell bez speciální interpretace a >> byl příkazu dán jako argument - stejným způsobem jako spuštění command '>>' file ve skořápce.

Některé verze SSH (OpenSSH_5.9) automaticky vyvolají Shell na vzdáleném serveru a předají mu příkazy, když detekují tokeny, které mají být interpretovány Shellem jako ;>>> atd.

8
pabouk

openssh neposkytuje ssh-copy-id. Posloupnost by byla:

  • Vytvořte slušný 4k klíč

    ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa4k
    
  • Spusťte agenta ssh-up a nasejte informace jako SSH_AGENT_PID, atd.

    ssh-agent -s > ~/mysshagent
    source ~/mysshagent
    rm ~/mysshagent
    
  • Nyní začněte načítat klíče do svého agenta SSH

    ssh-add ~/.ssh/id_rsa4k
    
  • Zkontrolujte, zda je načten

    ssh-add -l
    ssh-add -L
    

    To vám ukáže, co máte v ssh-agentovi

  • Nyní vlastně SSH do vzdáleného systému

    ssh [email protected]
    
  • Nyní můžete spustit ssh-copy-id bez argumentů:

    ssh-copy-id
    

    Tím se vytvoří ~/.ssh/authorized_keys a vyplní základní informace požadované od ssh-agenta.

Měl jsem problémy s ssh-copy-id při výběru jiného portu než 22 ... takže tady je můj oneliner s jiným ssh-portem (např. 7572):

ssh yourServer.dom -p7572 "mkdir .ssh; chmod 700 .ssh; umask 177; sh -c 'cat >> .ssh/authorized_keys'" < .ssh/id_rsa.pub
1
user2664227

Opravdu příkaz the ssh-copy-id to přesně (od balíček openssh-client):

ssh-copy-id [email protected]

Poznámka:
Host znamená IP adresa nebo doména.


Chtěl bych také přidat nějaké další informace k tomu

1) Můžeme zadat jiný port pro SSH na cílovém serveru:

ssh-copy-id "-p 8127 [email protected]"

Poznámka:
port musí být před [email protected], Jinak se to nevyřeší.

Zdroj

2) Můžeme určit soubor s veřejným klíčem :

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

Poznámka:
Možnost -i Nám umožňuje označit vhodné umístění jména pomocí souboru, který obsahuje veřejný klíč.

Někdy se to může hodit, zejména pokud je uložíme na nestandardním místě nebo pokud máme v počítači více než jeden veřejný klíč a chceme ukázat na konkrétní.

0
simhumileco