Как Вы копируете открытый ключ в ssh-сервер?

echo {1..5} расширен в команду echo 1 2 3 4 5 который затем расширен обычным способом. Это нисколько не подобно seq 1 1000000000 >/dev/null, который никогда не расширяется до команды с очень многими аргументами.

Это больше похоже echo $(seq 1 1000000000): Я предполагаю, что это повреждается таким же образом?

Проблема, с которой Вы сталкиваетесь, относится к обработке больших команд, о которых Unix всегда был суетливым, который должен сказать, что это - общая проблема с обработкой командных строк. Это - одна из вещей, которые Perl был записан для фиксации.

Я зарегистрировал бы вежливый и информативный отчет об ошибках так или иначе: это могло бы вызвать интересное обсуждение.

36
03.06.2013, 09:32
6 ответов

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
70
27.01.2020, 19:36
  • 1
    Спасибо! Почему моя команда не работает? –  StackExchange for All 18.01.2012, 22:18
  • 2
    @Tim Этот ответ объяснил это; >> обрабатывается Вашей оболочкой, и Вы выполняете команду через SSH вместо через оболочку. Его фиксация наличия SSH выполняет оболочку, которая затем выполняет Вашу команду, должен работать отношение –  Michael Mrozek♦ 18.01.2012, 22:22
  • 3
    Спасибо! (1) ssh-copy-id не работает также. Я вручную копирую файл в удаленное и добавляю его содержание, затем он работает. Интересно, почему это? Я нашел, что моя оболочка по умолчанию на сервере является некоторым сценарием, который я обновляю к своему исходному сообщению и мог бы быть причиной. Взгляните. (2) Интересно, является ли ssh-copy-id просто копией открытый ключ к удаленному, это не создает и открытый ключ с закрытым ключом, не так ли? –  StackExchange for All 18.01.2012, 22:37
  • 4
    Позволяет нам предположить, что сервер SSH настроен таким способом, которым он только принимает аутентификацию с открытым ключом как механизм аутентификации. В этом случае, использование ssh-copy-id не будет работать, правильно? –  Abdull 07.06.2016, 18:24
  • 5
    @Abdull Не, если у Вас уже нет некоторого другого, включает ту машину для соединения с. Это просто соединяется по SSH –  Michael Mrozek♦ 07.06.2016, 18:31

Вы могли всегда делать что-то вроде этого:

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 делает. Точно так же, как Michael сказал.

33
27.01.2020, 19:36
  • 1
    Спасибо! интересно, является ли ssh-copy-id просто копией открытый ключ к удаленному. Это не создает и открытый ключ с закрытым ключом, не так ли? –  StackExchange for All 18.01.2012, 22:51
  • 2
    Нет это не создает его. Просто добавляет его. –  Mr. Monkey 18.01.2012, 23:22
  • 3
    @Mr. Обезьяна Да, можно передать данные по каналу в ssh сессию (от cat или иначе). То, что Вы описываете, является старомодным путем; ssh-copy-id рекомендуется, потому что существует меньше риска опечаток или предоставления файлов неправильных полномочий. –  Gilles 'SO- stop being evil' 19.01.2012, 01:19
  • 4
    @Gilles, у Вас не всегда есть доступ к серверу клиенту, особенно при подготовке компьютера к его операции таким образом, этот метод намного лучше, чем использование ssh-cpy-id, потому что Вы не должны брать оборудование или подключение к сети перед установкой. –  e-info128 26.10.2016, 22:13
  • 5
    Или можно просто передать по каналу непосредственно месту назначения: cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'. –  Pablo A 28.01.2018, 04:12

Этот ответ описывает, как сделать намеченный путь показанным в работе вопроса.

Можно выполнить оболочку на удаленном компьютере для интерпретации особого значения >> оператор перенаправления:

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) автоматически вызовут оболочку на удаленный сервер и передадут команду (команды) ему, когда они обнаружат маркеры, которые будут интерпретироваться оболочкой как ; > >> и т.д.

7
27.01.2020, 19:36

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-agent

  • Теперь на самом деле SSH к удаленной системе

     ssh (скрыто) 
     
  • Теперь вы можете запустить ssh-copy-id без аргументов:

     ssh-copy-id 
     

    Это создает ~ / .ssh / authorized_keys и заполняет основную информацию, требуемую от ssh-agent .

3
27.01.2020, 19:36

Tuve problemas con ssh -copia -id al elegir otro puerto que no sea 22... así que aquí está mi oneliner con un puerto ssh -diferente (, p. 7572):

ssh yourServer.dom -p7572 "mkdir.ssh; chmod 700.ssh; umask 177; sh -c 'cat >>.ssh/authorized_keys'" <.ssh/id_rsa.pub
1
27.01.2020, 19:36

Действительно команда 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позволяет указать соответствующее расположение имени в файле, содержащем открытый ключ.

Иногда это может пригодиться, особенно если мы храним его в -нестандартном месте или если на нашем компьютере имеется более одного открытого ключа, и мы хотим указать на определенный.

1
27.01.2020, 19:36

Теги

Похожие вопросы