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

Вот то, что я попробовал, и я получил ошибку:

$ 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
36
03.06.2013, 09:32
3 ответа

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

Теги

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