Есть ли эквивалент или порт ssh-copy-id для Windows? То есть, есть ли простой способ перенести ключи SSH с локального компьютера на удаленный сервер под Windows?
Если это поможет, я использую Pageant и Китти (альтернатива Putty) уже.
ssh-copy-id - довольно простой скрипт, который должно быть довольно легко воспроизвести под Windows.
Если вы проигнорируете всю обработку параметров, обработку ошибок и т. Д., Это две команды из ssh-copy-id, которые на самом деле большую часть времени выполняют работу.
GET_ID="cat ${ID_FILE}"
{ eval "$GET_ID" ; } | ssh ${1%:} "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys" || exit 1
Используя инструменты шпатлевки, такая команда должна быть эквивалентной (не проверенной).
type public_id | plink.exe username@hostname "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys"
Если вы хотите выполнять такую же обработку ошибок и автоматическое определение местоположения клавиш, я уверен, что написать сценарий под Windows будет намного сложнее, но, безусловно, возможно.
Эти ответы мне не помогли. Мне действительно не нужны были сумасшедшие скрипты. Я создал открытый ключ на своей клиентской машине в git bash и пытался скопировать его на VPS.
После создания открытого ключа ключ должен храниться как «(в какой бы папке вы ни начали) /. Ssh / id_rsa.pub»
Так что используйте эту команду:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.67.89 "cat >> ~/.ssh/authorized_keys"
где user
ваше имя пользователя (иногда "root" или что-то другое, что вы могли настроить), и замените 123.45.67.89
с IP-адресом вашего компьютера / хоста / VPS.
Если каталог .ssh
еще не создан на хост-машине, используйте этот небольшой вариант:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"
ssh-copy-id делает пару вещей (прочтите страница руководства для подробностей), но самое главное, что он делает, это добавляет содержимое вашего локального файла открытого ключа в удаленный файл с именем authorized_keys.
Вы можете сделать это самостоятельно, открыв ключевой файл в текстовом редакторе и вставив его содержимое в терминал Kitty.
echo 'long_line_with_contents_of_public_key_file' >> .ssh/authorized_keys
В качестве альтернативы вы можете загрузить файл, используя WinSCP (который использует sftp или scp как запасной вариант) и сделайте что-то подобное моему предыдущему предложению, без уродливого копирования / вставки.
cat id_rsa.pub >> .ssh/authorized_keys
где id_rsa.pub - имя загруженного вами открытого ключа.
В Windows 7 есть ssh.exe
Вот что у меня сработало:
1. создать айдентику (в windows)
c:\>ssh-keygen
Это создало идентификационный файл в домашнем каталоге. Я изменил имя открытого ключа на "id_rsa"
2. скопируйте файл в целевую систему Linux с помощью ssh Кредиты для https://serverfault.com/users/984/zoredache за его ответ
c:\>ssh user@lnxhost "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1" < \\path_to_where_the_file_was_generated_from_ssh_key_gen\id_rsa.pub
Примечание: у меня почему-то не работали трубопроводы:
# this should work but it didn't work for me
type file | ssh user@lnxhost "cat >> /tmp/t.txt"
3. Исправьте файл на linux Файл id_rsa.pub в Windows является многострочным, тогда как Linux ожидает его в одной строке, поэтому мы должны немного его исправить. Войдите в Linux и откройте файл:
vi ~/.ssh/authorized_keys
Например:
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "2048-bit RSA, user@winhost"
AAAAB3NzaC1yc2EAAAABIwAAAQEAnvYlVooXGoj3+7huZBUqf4wj57r25SHCKiiShyla33
5flX7Rsmb4meExpdh2NzfzffG15xl1wo0xBZ3HdZdqF2GUniEcNbtVjS1FKzQwPfsYPHMC
Y58qT0U2ZgK1zsXj2o0D2RWrCv3DFFfwUgNyZRYN2HK32umY6OmGSOVuJvIKhT+X6YaCVy
ax3CHv2ByB2OTBl9mh4nrwYAVXToT+X2psBE+MKB5R85lrUGkl3GtymTk10Dvf5O80exdT
LFRMvkCA5RAIZgvxMk/bbNaH/0UHQoctX9oaDeKGWUPfVaknFBQdU9009+lK/ocAlKVNHE
Qkw+1wuV6dFoT1/hngSw==
---- END SSH2 PUBLIC KEY ----
должен стать
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnvYlVooXGoj3+7huZBUqf4wj57r25SHCKiiShyla335flX7Rsmb4meExpdh2NzfzffG15xl1wo0xBZ3HdZdqF2GUniEcNbtVjS1FKzQwPfsYPHMCY58qT0U2ZgK1zsXj2o0D2RWrCv3DFFfwUgNyZRYN2HK32umY6OmGSOVuJvIKhT+X6YaCVyax3CHv2ByB2OTBl9mh4nrwYAVXToT+X2psBE+MKB5R85lrUGkl3GtymTk10Dvf5O80exdTLFRMvkCA5RAIZgvxMk/bbNaH/0UHQoctX9oaDeKGWUPfVaknFBQdU9009+lK/ocAlKVNHEQkw+1wuV6dFoT1/hngSw== user@winhost
4. протестировать
c:\>ssh user@lnxhost "ls -al /tmp/"
Это должно перечислить содержимое / tmp без запроса пароля.
Вдохновленный ответом zoredache, я создал несколько скриптов для Windows. Однако все они зависят от Plink. Пожалуйста, посмотрите здесь
https://github.com/VijayS1/Scripts/blob/master/ssh-copy-id/
У меня также есть сценарий winscp, который можно использовать в соответствии с другим ответом. :) Отрывок из ридми:
Попытки методов на данный момент:
usage: .\Scriptname test@example.com password [identity file]
usage: .\Scriptname /i:idtest.pub user@example.com /p:password
usage: .\Scriptname -i idtest.pub user@example.com password
# "WinSCP.com" /script=".\Scriptname" /parameter "user[:password]@example.com" "id_rsa.pub" [/log=".\copyssh.log]"
Если у вас нет ssh-copy-id
в Windows вы можете запустить его на самом сервере.
.pub
расширение..pub
файл на сервер.На сервере типа:
ssh-copy-id -i mykey.pub username@localhost
В Windows ssh-copy-id
сценарий идет с Git для Windows. Так что вы можете использовать это локально, если у вас есть Git для Windows.
Если вы не хотите делать это вручную, вы можете использовать WinSCP 5.15. Он может настроить для вас аутентификацию с открытым ключом.
Использовать Инструменты> Установить открытый ключ на сервер кнопка на SSH> Страница аутентификации диалогового окна "Дополнительные параметры сайта WinSCP".
(Я автор WinSCP)
Если вы используете cmder (или msysgit / mingw с scp и ssh), я просто написал для этого простой скрипт на Python. Это можно найти здесь: https://gist.github.com/ceilfors/fb6908dc8ac96e8fc983
Пример использования: python ssh-copy-id.py user @ remote-machine.
Пароль будет запрошен при запуске скрипта.
что я сделал, имея CygWin на моем Win10, подключившись к Linux (на основе ответа выше):
- примечание: использование cat автоматически разрешит путь cygwin, а также любую команду cygwin, использующую структуру cygwin-linux-folder-structure
1. added c:\cygwin\bin to the environment's Path variable
2. starting cmd.exe (windows commandline)
3. > ssh-keygen -t rsa (just pressing enter till done)
4. > cat ~/.ssh/id_rsa.pub | ssh user@server "umask 077; test -d ~/.ssh || mkdir ~/.ssh ; cat >> ~/.ssh/authorized_keys"
5. ..enter server password
6. > ssh user@server (testing, not beeing asked for password)
Вот следующие шаги:
ШАГ-1: Создание пары ключей RSA
C:\Users\user>ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/user//.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/user//.ssh/id_rsa.
Your public key has been saved in /c/Users/user//.ssh/id_rsa.pub.
The key fingerprint is:
20:16:9b:0d:00:92:c4:34:99:51:20:b7:ef:50:c4:0f user@localhost
STE2-2: эквивалент ssh-copy-id в windows
C:\Users\user>ssh user@remote "umask 077; test -d .ssh || mkdir .ssh ; cat >> .s
sh/authorized_keys || exit 1" < "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys
|| exit 1" < C:\Users\user\.ssh\id_rsa.pub
The authenticity of host 'remote (xx.xx.xxx.xx)' can't be established.
RSA key fingerprint is 99:99:73:74:fe:14:bc:91:c8:3b:ac:f4:95:99:4d:06.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'remote,xx.xx.xxx.xx' (RSA) to the list of known hosts.
*************************************************************************
This computer system is the property of Sample Corporation and is to
be used for business purposes. All information, messages, software and
hardware created, stored, accessed, received, or used by you through
this system is considered to be the sole property of Sample Corporation
and can and may be monitored, reviewed, and retained at any time. You
should have no expectation that any such information, messages or
material will be private. By accessing and using this computer, you
acknowledge and consent to such monitoring and information retrieval.
By accessing and using this computer, you also agree to comply with
all of Sample Company's policies and standards.
*************************************************************************
user@remote's password:[Enter Password for first time]
ШАГ-3: Аутентификация без пароля работает!
C:\Users\user>ssh user@remote
*************************************************************************
This computer system is the property of Sample Corporation and is to
be used for business purposes. All information, messages, software and
hardware created, stored, accessed, received, or used by you through
this system is considered to be the sole property of Sample Corporation
and can and may be monitored, reviewed, and retained at any time. You
should have no expectation that any such information, messages or
material will be private. By accessing and using this computer, you
acknowledge and consent to such monitoring and information retrieval.
By accessing and using this computer, you also agree to comply with
all of Sample Company's policies and standards.
*************************************************************************
Last login: Wed Oct 14 14:37:13 2015 from localhost
На GitHub я нашел версию ssh-copy-id для Windows: https://github.com/zhengyi-yang/ssh-copy-id/tree/master/dist
Фактически, он может работать, пока у вас есть ssh
на вашем пути. Добавьте в свой профиль PowerShell следующее:
function ssh-copy-id([string]$userAtMachine){
$publicKey = "$ENV:USERPROFILE" + "/.ssh/id_rsa.pub"
if (!(Test-Path "$publicKey")){
Write-Error "ERROR: failed to open ID file '$publicKey': No such file"
}
else {
& cat "$publicKey" | ssh $userAtMachine "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1"
}
}
В консоли PowerShell:
ssh-copy-id user@machine