$ 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
Почему бы не сделать это в два этапа? Скопировать его, а затем добавить?
Фахим Митха
@FaheemMitha: Это работает, спасибо! Я действительно могу понять причину проблемы. Пожалуйста, смотрите мой новый пост ?
Тим
С параметром -f вам не нужен закрытый ключ, так что вы можете просто передать ему ключ только с чьим-то открытым ключом!
Kzqai
Ответы:
67
OpenSSH поставляется с командой для этого ssh-copy-id. Вы просто даете ему удаленный адрес, и он добавляет ваш открытый ключ в authorized_keysфайл на удаленной машине:
$ ssh-copy-id tim@just.some.other.server
Возможно, вам понадобится использовать -iфлаг, чтобы найти ваш открытый ключ на вашем локальном компьютере:
@ Тим Этот ответ объяснил это; >>обрабатывается вашей оболочкой, и вы запускаете команду через SSH, а не через оболочку. Его исправление SSH для запуска оболочки, которая затем запускает вашу команду, должно сработать
Майкл Мрозек
Благодарность! (1) ssh-copy-id тоже не работает. Я вручную копирую файл на пульт и добавляю его содержимое, после чего он работает. Интересно, почему это? Я обнаружил, что моя оболочка по умолчанию на сервере - это какой-то скрипт, который я обновляю до своего исходного поста, и это может быть причиной. Пожалуйста, посмотрите. (2) Интересно, если ssh-copy-id просто копирует открытый ключ на удаленный компьютер, он не создает закрытый и открытый ключ?
Тим
1
Давайте предположим, что сервер SSH настроен таким образом, что он принимает только аутентификацию с открытым ключом в качестве механизма аутентификации. В этом случае использование ssh-copy-idне будет работать, верно?
Абдул
1
@Abdull Нет, если у вас уже нет другого ключа на этом компьютере для подключения. Это просто соединение через SSH
Благодарность! Интересно, если ssh-copy-id просто скопировать открытый ключ на удаленный компьютер? Это не создает закрытый и открытый ключ, не так ли?
Тим
Нет, это не создает его. Просто добавляет это.
Мистер Обезьяна
@ Mr.Monkey Да, вы можете передавать данные в сеанс SSH (из catили иным образом). То, что вы описываете, является старомодным способом; ssh-copy-idрекомендуется, потому что есть меньше риска опечаток или предоставления файлам неправильных разрешений.
Жиль "ТАК - перестань быть злым"
@Gilles, у вас не всегда есть доступ к серверу для клиента, особенно когда вы готовите компьютер к его работе, поэтому этот метод намного лучше, чем использование ssh-cpy-id, потому что вам не нужно брать оборудование или подключитесь к сети перед настройкой.
e-info128
1
Или вы можете просто труба непосредственно к месту назначения : cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'.
Пабло А
7
Этот ответ описывает, как сделать так, как показано в вопросе.
Вы можете запустить оболочку на удаленном компьютере для интерпретации специального значения >>оператора перенаправления:
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) автоматически вызывают оболочку на удаленном сервере и передают ей команды, когда обнаруживают, что токены интерпретируются такой оболочкой, как, например, ;>>>и т. Д.
Кстати, я создал небольшой скрипт на github.com/centic9/generate-and-send-ssh-key, который выполняет большинство этих шагов за один раз и дополнительно обеспечивает права доступа к файлам / каталогам, которые обычно всегда вызывали у меня головные боли ...
centic
Это отличный метод для использования, когда пароль отключен. Это позволяет добавить новый ключ при аутентификации с использованием предыдущего ключа.
MountainX
1
У меня были проблемы с ssh-copy-id при выборе другого порта, кроме 22 ... так вот мой oneliner с другим ssh-портом (например, 7572):
Примечание: опция позволяет указать соответствующее местоположение имени с файлом , который содержит открытый ключ. -i
Иногда это может пригодиться, особенно если мы храним его в нестандартном месте или у нас на компьютере несколько открытых ключей, и мы хотим указать конкретный ключ.
Ответы:
OpenSSH поставляется с командой для этого
ssh-copy-id
. Вы просто даете ему удаленный адрес, и он добавляет ваш открытый ключ вauthorized_keys
файл на удаленной машине:Возможно, вам понадобится использовать
-i
флаг, чтобы найти ваш открытый ключ на вашем локальном компьютере:источник
>>
обрабатывается вашей оболочкой, и вы запускаете команду через SSH, а не через оболочку. Его исправление SSH для запуска оболочки, которая затем запускает вашу команду, должно сработатьssh-copy-id
не будет работать, верно?Вы всегда можете сделать что-то вроде этого:
Я не уверен, если вы можете
cat
с локальной машины в сеанс SSH. Просто переместите его в / tmp, как предложено.Редактировать: это именно то, что
ssh-copy-id
делает. Как сказал Майкл.источник
cat
или иным образом). То, что вы описываете, является старомодным способом;ssh-copy-id
рекомендуется, потому что есть меньше риска опечаток или предоставления файлам неправильных разрешений.cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'
.Этот ответ описывает, как сделать так, как показано в вопросе.
Вы можете запустить оболочку на удаленном компьютере для интерпретации специального значения
>>
оператора перенаправления:Оператор перенаправления
>>
обычно интерпретируется оболочкой.При выполнении
ssh host 'command >> file'
тогда не гарантируется, чтоcommand >> file
будет интерпретироваться оболочкой. В вашем случаеcommand >> file
выполняется вместо оболочки без специальной интерпретации и>>
был передан команде в качестве аргумента - так же, как запускcommand '>>' file
в оболочке.Некоторые версии SSH (OpenSSH_5.9) автоматически вызывают оболочку на удаленном сервере и передают ей команды, когда обнаруживают, что токены интерпретируются такой оболочкой, как, например,
;
>
>>
и т. Д.источник
openssh
действительно обеспечиваетssh-copy-id
. Последовательность будет:Создать достойный ключ 4k
Запустите ваш ssh-agent и впитайте информацию, как
SSH_AGENT_PID
, и т. Д.Теперь начните загружать ключи в ваш агент SSH
Проверьте, что он загружен
Это покажет вам, что у вас есть в ssh-agent
Теперь собственно SSH к удаленной системе
Теперь вы можете запустить ssh-copy-id без аргументов:
Это создает
~/.ssh/authorized_keys
и заполняет основную информацию, требуемую от ssh-agent.источник
У меня были проблемы с ssh-copy-id при выборе другого порта, кроме 22 ... так вот мой oneliner с другим ssh-портом (например, 7572):
источник
Действительно
the ssh-copy-id
команда делает именно это (изopenssh-client
пакета):Примечание:
host
означает IP-адрес или домен .Я хотел бы также добавить дополнительную информацию к этому
1) Мы можем указать другой порт для SSH на целевом сервере:
Примечание
. Порт должен находиться перед
user@host
или не будет разрешен.Источник
2) Мы можем указать файл с открытым ключом :
Примечание: опция позволяет указать соответствующее местоположение имени с файлом , который содержит открытый ключ.
-i
Иногда это может пригодиться, особенно если мы храним его в нестандартном месте или у нас на компьютере несколько открытых ключей, и мы хотим указать конкретный ключ.
источник