Альтернатива ssh-copy-id на Windows

Вопрос или проблема

Я хочу скопировать публичный ключ SSH на удаленное устройство под управлением Windows. Я не использую PuTTYgen, а просто OpenSSH через PowerShell. Я выполнил

ssh-keygen -t rsa

И он выдал мне публичный и приватный ключ в моей папке .ssh, но если я пытаюсь сделать

ssh-copy-id -i ~/.ssh/id_rsa.pub <name@machine>

Я получаю ту же ошибку:

ssh-copy-id : Термин ‘ssh-copy-id’ не распознан как имя командлета, функции, скрипта или исполняемой программы. Проверьте правильность написания имени или, если был указан путь, проверьте, что путь правильный, и попробуйте снова.

Возможно, команда ssh-copy-id предназначена для Linux, но мне удалось выполнить некоторые другие команды, предназначенные для Linux.

Как мне скопировать ключ с моего ноутбука под управлением Windows на мою удаленную машину? Возможно ли это сделать только в Windows без приложения вроде PuTTYgen?

(при условии, что id_rsa.pub существует, как когда он был ранее сгенерирован с “ssh-keygen -t rsa”)

Этот единый ответ едва ли отличается от данного barlop без cygwin, упоминая, что с использованием родного ssh в Windows это также работает…

C:\> type %USERPROFILE%\.ssh\id_rsa.pub | ssh user@host "cat >> .ssh/authorized_keys"

У меня установлен cygwin, и в нем есть ssh и включена ssh-copy-id (что, кстати, является скриптом).

$ which ssh-copy-id
/usr/bin/ssh-copy-id

Кстати, если вы получите ошибку, похожую на ту, что у вас была, то базовый шаг по устранению неполадок для упрощения — просто попробовать $ ssh-copy-id <ENTER>, чтобы знать, что это не связано со всеми параметрами, которые вы указали после ssh-copy-id.

В этой статье упоминается ручной метод ssh-copy-id
https://chrisjhart.com/Windows-10-ssh-copy-id/

type $env:USERPROFILE\.ssh\id_rsa.pub | ssh {IP-ADDRESS-OR-FQDN} "cat >> .ssh/authorized_keys"

и он приводит пример

PS C:\Users\Christopher> type $env:USERPROFILE\.ssh\id_rsa.pub | ssh 192.168.30.31 "cat >> .ssh/authorized_keys"

немного больше информации, связанный Чтобы использовать ssh-id-copy, нужны ли оба id_rsa.pub и id_rsa?

На самом деле, все, что вы делаете, — это добавляете содержимое файла id_rsa.pub в файл ~/.ssh/authorized_keys на вашем linux-хосте. (Возможно, вам нужно будет выполнить ‘systemctl restart ssh’.)

На вашем компьютере с Windows вы затем используете параметр -i:

ssh -i {путь к файлу приватного ключа}\id_rsa {name}@{machine}

Если вы использовали пароль, вам будет предложено ввести его, иначе вас пустят сразу.

При установке OpenSSH, должны быть включены команды scp. просто введите scp в командной строке, чтобы убедиться, что эта программа установлена.

Вы можете использовать эту команду:

  1. Сначала измените текущую директорию на рабочую

    cd /D %HOMEDRIVE%%HOMEPATH%"/.ssh" (CMD) или

    Set-Location -Path $Env:HOMEDRIVE$Env:HOMEPATH"/.ssh" (PowerShell)

  2. Используя команду scp

    scp -v -P {{port}} {{source}} {{userID}}@{{instanceIP}}:{{target}}

    В вашем случае

    scp -v "id_rsa.pub" user@host:/home/directory/
    Затем введите ваш пароль.

Вы можете проверить файл на целевой машине.

Ответ или решение

Копирование SSH-ключа на удаленный сервер в Windows может быть выполнено несколькими способами, несмотря на отсутствие утилиты ssh-copy-id, которая часто используется на Linux. В этой статье мы рассмотрим альтернативные методы копирования вашего публичного ключа SSH на удаленную машину с использованием встроенного SSH-клиента PowerShell или командной строки Windows.

Использование PowerShell

Если вы уже сгенерировали SSH-ключи с помощью команды:

ssh-keygen -t rsa

И получили файл id_rsa.pub в каталоге .ssh, вы можете перенести его на удаленный сервер следующим образом:

  1. Открытие PowerShell:
    Зайдите в PowerShell на вашем Windows-машине.

  2. Команда для копирования публичного ключа:
    Используйте следующую команду для передачи содержимого вашего публичного ключа на удаленный сервер:

    type $env:USERPROFILE\.ssh\id_rsa.pub | ssh username@remote_host "cat >> ~/.ssh/authorized_keys"

    В этой команде:

    • username — это имя пользователя на удаленной машине.
    • remote_host — это IP-адрес или доменное имя вашей удаленной машины.
  3. Ввод пароля:
    После выполнения команды будет необходимо ввести пароль от учетной записи на удаленной машине.

Альтернативный метод с помощью SCP

Если вы предпочитаете использовать scp, вы можете следовать этим шагам:

  1. Переход в директорию .ssh:
    Задайте текущую директорию в вашу папку .ssh:

    Для командной строки (CMD):

    cd /D %HOMEDRIVE%%HOMEPATH%\.ssh

    Или в PowerShell:

    Set-Location -Path $Env:HOMEDRIVE$Env:HOMEPATH\.ssh
  2. Использование команды SCP:
    Теперь выполните следующую команду для копирования вашего публичного ключа на удаленный сервер:

    scp -v id_rsa.pub username@remote_host:~/.ssh/

    После этого вам также потребуется ввести пароль.

  3. Дальнейшие действия на удаленном сервере:
    После успешной передачи файла вам нужно будет добавить ключ в файл authorized_keys. Для этого выполните следующие команды на удаленной машине:

    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    rm ~/.ssh/id_rsa.pub  # Удалите публичный ключ, если он больше не нужен

Проверка работоспособности

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

Заключение

Эти методы обеспечивают возможность копирования вашего SSH-ключа на удаленные устройства под управлением Windows, используя интегрированные инструменты PowerShell или командной строки. Копирование ключей SSH позволяет значительно упростить процесс подключения к удаленным серверам и повысить безопасность вашего доступа. Не забудьте всегда проверять правильность конфигураций SSH на удаленном сервере и управлять доступом к файлам ключей.

Оцените материал
Добавить комментарий

Капча загружается...