Oto, co próbowałem i mam błąd:
$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
Oto, co próbowałem i mam błąd:
$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
Odpowiedzi:
OpenSSH pochodzi z poleceniem, aby to zrobić, ssh-copy-id
. Po prostu nadajesz mu adres zdalny, a on dodaje klucz publiczny do authorized_keys
pliku na zdalnym komputerze:
$ ssh-copy-id tim@just.some.other.server
Może być konieczne użycie -i
flagi do zlokalizowania klucza publicznego na komputerze lokalnym:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub tim@just.some.other.server
>>
jest obsługiwany przez twoją powłokę, a komendę uruchamiasz przez SSH zamiast przez powłokę. Jego poprawka polegająca na tym, że SSH uruchamia powłokę, która następnie uruchamia twoje polecenie, powinna działać
ssh-copy-id
nie będzie działać, prawda?
Zawsze możesz zrobić coś takiego:
scp ~/.ssh/id_rsa.pub user@remote.example.com:/tmp/id_rsa.pub
ssh user@remote.example.com
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
Nie jestem pewien, czy możesz cat
z lokalnego komputera na sesję ssh. Po prostu przenieś go do / tmp zgodnie z sugestią.
Edycja: Właśnie to ssh-copy-id
robi. Tak jak powiedział Michael.
cat
lub w inny sposób). To, co opisujesz, to staromodny sposób; ssh-copy-id
jest zalecane, ponieważ istnieje mniejsze ryzyko literówek lub niewłaściwych uprawnień dla plików.
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'
.
Ta odpowiedź opisuje, jak sprawić, by zamierzony sposób pokazany w pytaniu działał.
Możesz uruchomić powłokę na komputerze zdalnym, aby zinterpretować specjalne znaczenie >>
operatora przekierowania:
ssh tim@just.some.other.server sh -c "'cat >> .ssh/authorized_keys'" < /home/tim/.ssh/id_rsa.pub
Operator przekierowania >>
jest zwykle interpretowany przez powłokę.
Podczas wykonywania ssh host 'command >> file'
nie ma gwarancji, że command >> file
zostanie zinterpretowana przez powłokę. W twoim przypadku command >> file
jest wykonywany zamiast powłoki bez specjalnej interpretacji i >>
przekazany do polecenia jako argument - w ten sam sposób, jak command '>>' file
w powłoce.
Niektóre wersje SSH (OpenSSH_5.9) automatycznie wywołują powłokę na zdalnym serwerze i przekazują do niej polecenia (polecenia), gdy wykryją tokeny do interpretacji przez powłokę, taką jak ;
>
>>
itp.
openssh
zapewnia ssh-copy-id
. Sekwencja będzie następująca:
Wygeneruj porządny klucz 4k
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa4k
Uruchom agenta ssh i zasysaj informacje takie jak SSH_AGENT_PID
itp.
ssh-agent -s > ~/mysshagent
source ~/mysshagent
rm ~/mysshagent
Teraz zacznij ładować klucze do swojego agenta SSH
ssh-add ~/.ssh/id_rsa4k
Sprawdź, czy jest załadowany
ssh-add -l
ssh-add -L
To pokaże ci, co masz w agencie ssh
Teraz faktycznie SSH do zdalnego systemu
ssh username@remotehost.network
Teraz możesz uruchomić ssh-copy-id bez argumentów:
ssh-copy-id
Spowoduje to ~/.ssh/authorized_keys
utworzenie i uzupełnienie podstawowych informacji wymaganych od ssh-agent.
Miałem problemy z ssh-copy-id przy wyborze innego portu niż 22 ... więc oto mój oneliner z innym portem ssh (np. 7572):
ssh yourServer.dom -p7572 "mkdir .ssh; chmod 700 .ssh; umask 177; sh -c 'cat >> .ssh/authorized_keys'" < .ssh/id_rsa.pub
Rzeczywiściethe ssh-copy-id
komenda robi dokładnie to (z openssh-client
pakietu):
ssh-copy-id user@host
Uwaga: host
oznacza adres IP lub domenę .
Chciałbym również dodać do tego kilka dodatkowych informacji
1) Możemy określić inny port SSH na serwerze docelowym:
ssh-copy-id "-p 8127 user@host"
Uwaga: portu musi być z przodu lub go nie rozwiąże.user@host
2) Możemy określić plik z kluczem publicznym :
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
Uwaga:
Ta -i
opcja pozwala nam wskazać odpowiednią lokalizację nazwy w pliku zawierającym klucz publiczny.
Czasami może się przydać, zwłaszcza jeśli przechowujemy go w niestandardowej lokalizacji lub gdy mamy więcej niż jeden klucz publiczny na naszym komputerze i chcemy wskazać konkretny.