Вопрос или проблема
Я хочу скопировать публичный ключ 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 в командной строке, чтобы убедиться, что эта программа установлена.
Вы можете использовать эту команду:
-
Сначала измените текущую директорию на рабочую
cd /D %HOMEDRIVE%%HOMEPATH%"/.ssh"
(CMD) илиSet-Location -Path $Env:HOMEDRIVE$Env:HOMEPATH"/.ssh"
(PowerShell) -
Используя команду 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
, вы можете перенести его на удаленный сервер следующим образом:
-
Открытие PowerShell:
Зайдите в PowerShell на вашем Windows-машине. -
Команда для копирования публичного ключа:
Используйте следующую команду для передачи содержимого вашего публичного ключа на удаленный сервер:type $env:USERPROFILE\.ssh\id_rsa.pub | ssh username@remote_host "cat >> ~/.ssh/authorized_keys"
В этой команде:
username
— это имя пользователя на удаленной машине.remote_host
— это IP-адрес или доменное имя вашей удаленной машины.
-
Ввод пароля:
После выполнения команды будет необходимо ввести пароль от учетной записи на удаленной машине.
Альтернативный метод с помощью SCP
Если вы предпочитаете использовать scp
, вы можете следовать этим шагам:
-
Переход в директорию .ssh:
Задайте текущую директорию в вашу папку.ssh
:Для командной строки (CMD):
cd /D %HOMEDRIVE%%HOMEPATH%\.ssh
Или в PowerShell:
Set-Location -Path $Env:HOMEDRIVE$Env:HOMEPATH\.ssh
-
Использование команды SCP:
Теперь выполните следующую команду для копирования вашего публичного ключа на удаленный сервер:scp -v id_rsa.pub username@remote_host:~/.ssh/
После этого вам также потребуется ввести пароль.
-
Дальнейшие действия на удаленном сервере:
После успешной передачи файла вам нужно будет добавить ключ в файлauthorized_keys
. Для этого выполните следующие команды на удаленной машине:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys rm ~/.ssh/id_rsa.pub # Удалите публичный ключ, если он больше не нужен
Проверка работоспособности
После завершения этих шагов вы сможете подключаться к вашему удаленному серверу без необходимости ввода пароля, если ваш приватный ключ (id_rsa
) находится на вашем клиенте.
Заключение
Эти методы обеспечивают возможность копирования вашего SSH-ключа на удаленные устройства под управлением Windows, используя интегрированные инструменты PowerShell или командной строки. Копирование ключей SSH позволяет значительно упростить процесс подключения к удаленным серверам и повысить безопасность вашего доступа. Не забудьте всегда проверять правильность конфигураций SSH на удаленном сервере и управлять доступом к файлам ключей.