Ось що я спробував, і я отримав помилку:
$ 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
Ось що я спробував, і я отримав помилку:
$ 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
Відповіді:
OpenSSH поставляється з командою , щоб зробити це, ssh-copy-id. Ви просто даєте йому віддалену адресу, і він додає ваш відкритий ключ до authorized_keysфайлу на віддаленій машині:
$ ssh-copy-id tim@just.some.other.server
Можливо, вам потрібно буде використовувати -iпрапор, щоб знайти ваш відкритий ключ на локальній машині:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub tim@just.some.other.server
>>обробляється вашою оболонкою, і ви виконуєте команду через SSH, а не через оболонку. Його фіксація того, що SSH запустить оболонку, яка потім виконує вашу команду, повинна спрацювати
ssh-copy-idне буде працювати, правда?
Ви завжди можете зробити щось подібне:
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
Я не впевнений, чи зможете ви catз локальної машини перейти на сеанс ssh. Просто перемістіть його в / tmp, як було запропоновано.
Редагувати: саме це і ssh-copy-idробить. Так, як сказав Майкл.
catабо іншим чином). Те, що ви описуєте, - старомодний спосіб; ssh-copy-idрекомендується, оскільки існує менший ризик помилок друку або надання файлам неправильних дозволів.
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'.
Ця відповідь описує, як зробити намічений спосіб, показаний у запитанні.
Ви можете виконати оболонку на віддаленому комп'ютері для інтерпретації спеціального значення >>оператора перенаправлення:
ssh tim@just.some.other.server sh -c "'cat >> .ssh/authorized_keys'" < /home/tim/.ssh/id_rsa.pub
Оператор перенаправлення >>зазвичай інтерпретується оболонкою.
Коли ви виконаєте, ssh host 'command >> file'тоді не гарантується, що command >> fileбуде інтерпретований оболонкою. У вашому випадку command >> fileвиконується замість оболонки без спеціальної інтерпретації і >>дається команді як аргумент - так само, як і запуск command '>>' fileв оболонці.
Деякі версії SSH (OpenSSH_5.9) автоматично викликають оболонку на віддалений сервер і передають їй команду, коли вони виявлять лексеми, що інтерпретуються оболонкою, ; > >>тощо.
opensshнадає ssh-copy-id. Послідовність буде такою:
Створіть гідний 4k ключ
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa4k
Запустіть свій ssh-агент і відсмоктуйте інформацію SSH_AGENT_PID, та ін.
ssh-agent -s > ~/mysshagent
source ~/mysshagent
rm ~/mysshagent
Тепер почніть завантажувати ключі у свій агент SSH
ssh-add ~/.ssh/id_rsa4k
Перевірте, чи він завантажений
ssh-add -l
ssh-add -L
Це покаже вам, що у вас є в ssh-агенті
Тепер фактично SSH для віддаленої системи
ssh username@remotehost.network
Тепер ви можете запустити ssh-copy-id без аргументів:
ssh-copy-id
Це створює ~/.ssh/authorized_keysі заповнює основну інформацію, необхідну від ssh-агента.
У мене виникли проблеми з ssh-copy-id при виборі іншого порту, ніж 22 ... тому ось мій oneliner з іншим ssh-портом (наприклад, 7572):
ssh yourServer.dom -p7572 "mkdir .ssh; chmod 700 .ssh; umask 177; sh -c 'cat >> .ssh/authorized_keys'" < .ssh/id_rsa.pub
Дійсноthe ssh-copy-id команда робить саме це (з openssh-clientпакета):
ssh-copy-id user@host
Примітка: hostозначає IP-адресу або домен .
Я також хотів би додати до цього якусь додаткову інформацію
1) Ми можемо вказати інший порт для SSH на сервері призначення:
ssh-copy-id "-p 8127 user@host"
Примітка
. Порт повинен бути перед user@hostабо не вирішиться.
2) Ми можемо вказати файл із відкритим ключем :
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
Примітка.
Цей -iпараметр дозволяє нам вказати відповідне місце імені разом із файлом, який містить відкритий ключ.
Іноді це може стати в нагоді, особливо якщо ми зберігаємо його в нестандартному місці або на нашому комп’ютері є більше одного відкритого ключа і ми хочемо вказати на конкретний.