Чи є еквівалент ssh-copy-id для Windows?


56

Чи існує еквівалент або порт ssh-copy-id для Windows? Тобто, чи є простий спосіб передати SSH ключі з локальної машини на віддалений сервер під Windows?

У випадку, якщо це допоможе, я вже використовую Pageant та Kitty (альтернатива Putty).

Відповіді:


27

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

Використовуючи інструменти putty, така команда повинна бути еквівалентною (не перевірена).

type  public_id | plink.exe username@hostname "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys"

Якщо ви хочете зробити все ті ж самі помилки та автоматичне розташування ключів, я впевнений, що написання сценарію під Windows буде набагато складніше, але, безумовно, можливо.


1
Дякую! Я не міг спочатку змусити його працювати; Мені поверталися помилки "відмовлено у доступі", але плагін не зупинявся, щоб дозволити мені ввести пароль. Потім я спробував пропустити плагін паролем за допомогою перемикача -pw, і це спрацювало. Чи знаєте ви, чи є спосіб змусити пінк зробити паузу для введення пароля в середині?
Метт В.

Не дуже впевнений у автентифікації пароля та планкінгу. Щоразу, коли я його фактично використовую, у мене вже є свій ключ у системі, і у мене запущений патент.
Зоредаче

4
plink.exe -pw passwordпрацює. Крім того, якщо ви знаєте .ssh / type id_rsa.pub | plink.exe -ssh user@host -pw password "cat >> .ssh/authorized_keys"
autori_keys

@KCD Досить, якщо .ssh/каталог існує. Потім >>перенаправлення створить файл, якщо його не існує.
пабук

20

Ці відповіді мені не допомогли. Мені справді не потрібні були шалені сценарії. Я створив відкритий ключ на своїй клієнтській машині в 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"


2
Бажаю, щоб у мене було більше голосів! 👍 для однолінійного!
patricktokeeffe

16

ssh-copy-id робить кілька речей (прочитайте детальну сторінку для детальної інформації), але найважливіше, що він робить, - це додавання вмісту вашого локального відкритого ключа до віддаленого файлу, який називається санкціонованими ключами.

  • Ви можете зробити це самостійно, відкривши файл ключа з текстовим редактором та вставивши вміст у термінал 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 - ім'я файла відкритого ключа, який ви завантажили.


5

Натхненний відповіддю zoredache, я створив купу сценаріїв, що є версією Windows. Однак всі вони залежать від плаксингу. Будь ласка, подивіться тут

https://github.com/VijayS1/Scripts/blob/master/ssh-copy-id/

У мене також є сценарій wincp, який можна використовувати відповідно до іншої відповіді. :) Уривок з readme:

Досі спроби методів:

  • DOS (.cmd) - Успіх
    • usage: .\Scriptname test@example.com password [identity file]
  • VBS (.vbs) - Успіх
    • usage: .\Scriptname /i:idtest.pub user@example.com /p:password
  • Powershell (.ps1) - Успіх
    • usage: .\Scriptname -i idtest.pub user@example.com password
  • mremoteNG (ext додаток) - Успіх
    • Виберіть Хост, клацніть правою кнопкою миші, зовнішні інструменти, виберіть Ім'я сценарію
  • Сценарій WinSCP (.bat) - Успіх
    • # "WinSCP.com" /script=".\Scriptname" /parameter "user[:password]@example.com" "id_rsa.pub" [/log=".\copyssh.log]"

1
Ці досить милі
Pred

5

У Windows 7 є ssh.exe

Ось що для мене спрацювало:

1. створити ідентичність (у Windows)

c:\>ssh-keygen

Це створило файл ідентичності в домашньому каталозі. Я змінив назву відкритого ключа на "id_rsa"

2. скопіюйте файл у цільову систему Linux за допомогою ssh Credits на 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, не запитуючи пароль.


1
👍 для кроку 3. Переформатування authorized_keysв однорядкові - це все, що мені потрібно!
patricktokeeffe

щасливий, що допомогло тобі - до голосування відповідь :)
Deian

5

Якщо у вас немає ssh-copy-idWindows, можна запустити його на самому сервері.

  • У PuTTYgen завантажте свій приватний ключ (.ppk);
  • Скопіюйте вміст поля " Публічний ключ" для вставки у файл з дозволеними ключами OpenSSH до буфера обміну.
  • Вставте його у свій улюблений редактор (це зробить Блокнот Windows).
  • Збережіть вміст у файл із .pubрозширенням.
  • Завантажте .pubфайл на сервер.
  • Увійдіть на сервер за допомогою SSH-клієнта, як PuTTY.
  • На тип сервера:

    ssh-copy-id -i mykey.pub username@localhost
    

У Windows ssh-copy-idсценарій поставляється з Git для Windows . Тож ви можете використовувати це локально, якщо у вас є Git для Windows.


Якщо ви цього не хочете робити вручну, ви можете використовувати WinSCP 5.15. Він може налаштувати аутентифікацію відкритого ключа для вас.
Використовуйте Інструменти> Встановити відкритий ключ на кнопку Сервер на SSH> Сторінка автентифікації діалогового вікна «Розширені налаштування сайту» WinSCP .

введіть тут опис зображення

(Я автор WinSCP)


Це має бути прийнята відповідь: git-bash для Windows 7; Підсистема Linux доступна в Windows 10
Alex

0

Якщо ви використовуєте cmder (або msysgit / mingw, який має scp & ssh), я просто написав простий скрипт python для цього. Його можна знайти тут: https://gist.github.com/ceilfors/fb6908dc8ac96e8fc983

Використання зразка: python ssh-copy-id.py user @ remote-machine.

Після запуску сценарію буде запропоновано пароль.


чому для цього потрібен cmder?
Давид Зоріхта

@ user57411 Він не вимагає cmder, він вимагає команд scp та ssh.
ceilfors

0

що я зробив, маючи CygWin на своєму Win10, підключившись до Linux (на основі відповіді aboves):

- зауважте: використовуючи cat, це дозволить автоматично вирішити шлях cygwin, як і будь-яку команду cygwin, використовуючи структуру папок cygwin-linux-folder

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)

0

Виконайте наступні кроки:

КРОК-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


0

Версія Powershell для SSH включена в Git For Windows

Насправді він може працювати до тих пір, поки sshу вас на шляху. Додайте наступне у своєму профілі повноважень:

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"      
    }
}

На консолі powerhell:

ssh-copy-id user@machine

ssh-copy-id не повинен генерувати ключ, якщо його не існує.
РальфФрідль

@RalfFriedl Я видалив кейген
Fab
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.