Вот что я попробовал, и я получил ошибку:
$ 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-agent и впитайте информацию, как SSH_AGENT_PID, и т. Д.
ssh-agent -s > ~/mysshagent
source ~/mysshagent
rm ~/mysshagent
Теперь начните загружать ключи в ваш агент SSH
ssh-add ~/.ssh/id_rsa4k
Проверьте, что он загружен
ssh-add -l
ssh-add -L
Это покажет вам, что у вас есть в ssh-agent
Теперь собственно SSH к удаленной системе
ssh username@remotehost.network
Теперь вы можете запустить ssh-copy-id без аргументов:
ssh-copy-id
Это создает ~/.ssh/authorized_keysи заполняет основную информацию, требуемую от ssh-agent.
У меня были проблемы с 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
Иногда это может пригодиться, особенно если мы храним его в нестандартном месте или у нас на компьютере несколько открытых ключей, и мы хотим указать конкретный ключ.