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
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]
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.
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.
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
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ší.
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í.