क्या विंडोज के लिए ssh-copy-id के बराबर है?


56

क्या Windows के लिए ssh-copy-id का कोई समकक्ष या पोर्ट उपलब्ध है? यही है, क्या विंडोज के तहत एक स्थानीय मशीन से एसएसएच कुंजी को रिमोट सर्वर पर स्थानांतरित करने का एक आसान तरीका है?

यदि यह मदद करता है, तो मैं पहले ही पेजेंट और किटी (एक पुट्टी विकल्प) का उपयोग कर रहा हूं ।

जवाबों:


27

ssh-copy-id एक बहुत ही सरल स्क्रिप्ट है जिसे खिड़कियों के नीचे दोहराने के लिए बहुत आसान होना चाहिए।

यदि आप सभी पैरामीटर हैंडलिंग, त्रुटि हैंडलिंग, और इसी तरह की उपेक्षा करते हैं, तो ये 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"

यदि आप सभी समान त्रुटि हैंडलिंग, और स्वचालित कुंजी स्थान करना चाहते हैं, तो मुझे यकीन है कि विंडोज के तहत एक स्क्रिप्ट लिखना बहुत मुश्किल हो जाएगा, लेकिन निश्चित रूप से संभव है।


1
धन्यवाद! मैं इसे पहले काम करने के लिए नहीं मिला; मुझे "एक्सेस अस्वीकृत" त्रुटियां वापस मिल रही थीं, लेकिन पलक मुझे पासवर्ड दर्ज करने के लिए रोक नहीं रही थी। मैंने तब -pw स्विच का उपयोग करके पासवर्ड पास करने की कोशिश की और जो काम किया। क्या आपको पता है कि पासवर्ड के माध्यम से प्रवेश करने के लिए आपके पास रुकने के लिए पलक पाने का कोई तरीका है?
मैट वी।

पासवर्ड प्रमाणीकरण और पलक के बारे में वास्तव में निश्चित नहीं है। जब भी मैं वास्तव में इसका उपयोग करता हूं मेरे पास पहले से ही सिस्टम पर मेरी कुंजी है, और मेरे पास पगेंट चल रहा है।
बजे

4
plink.exe -pw passwordकाम करता है। इसके अलावा अगर आप जानते हैं कि .sh / अधिकृत_कीप्स मौजूद हैं, तो कमांड केवलtype id_rsa.pub | plink.exe -ssh user@host -pw password "cat >> .ssh/authorized_keys"
केसीडी

@ केसीडी पर्याप्त है अगर .ssh/निर्देशिका मौजूद है। >>अगर यह मौजूद नहीं है पुनर्निर्देशन फिर फ़ाइल को पैदा करेगा।
20.04 बजे पाबौक

20

इन उत्तरों ने मेरी मदद नहीं की। मुझे वास्तव में किसी भी पागल स्क्रिप्ट की आवश्यकता नहीं थी। मैंने अपने क्लाइंट मशीन पर git bash में एक सार्वजनिक कुंजी बनाई थी और इसे VPS पर कॉपी करने का प्रयास कर रहा था।

अपनी सार्वजनिक कुंजी बनाने के बाद, कुंजी को "(जो भी फ़ोल्डर आपने शुरू किया है) / ssh / id_rsa.pp" के रूप में संग्रहीत किया जाना चाहिए।

इसलिए इस कमांड का उपयोग करें:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.67.89 "cat >> ~/.ssh/authorized_keys" जहां userआपका उपयोगकर्ता नाम (कभी-कभी "रूट", या जो कुछ भी आपने सेट किया है), और 123.45.67.89अपने मशीन / होस्ट / वीपीएस के आईपी पते के साथ बदल सकते हैं।

यदि .sshहोस्ट मशीन पर निर्देशिका अभी तक नहीं बनाई गई है, तो इस छोटे बदलाव का उपयोग करें:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"


2
काश मेरे पास और वोट होते! 👍 वन-लाइनर के लिए!
patricktokeeffe

16

ssh-copy-id कुछ चीजें करता है ( विवरण के लिए मैन पेज पढ़ें ), लेकिन सबसे महत्वपूर्ण बात यह है कि आपके स्थानीय सार्वजनिक कुंजी फ़ाइल की सामग्री को एक दूरस्थ फ़ाइल में जोड़ें, जिसे अधिकृत_कीप्स कहा जाता है।

  • आप एक पाठ संपादक के साथ कुंजी फ़ाइल खोलकर और किट्टी टर्मिनल में सामग्री को चिपकाकर स्वयं ऐसा कर सकते हैं।
    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 के जवाब से प्रेरित होकर, मैंने स्क्रिप्ट का एक गुच्छा बनाया है जो विंडोज़ संस्करण है। हालांकि वे सभी पलक पर निर्भर हैं। कृपया यहाँ एक नज़र डालें

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
ये बहुत प्यारी हैं
पूर्ववत

5

विंडोज 7 में ssh.exe है

यहाँ मेरे लिए क्या काम किया गया है:

1. पहचान बनाएँ (खिड़कियों पर)

c:\>ssh-keygen

इसने होम डायरेक्टरी में एक पहचान फ़ाइल बनाई। मैंने सार्वजनिक कुंजी का नाम बदलकर "id_rsa" कर दिया है

2. अपने जवाब के लिए https://shverfault.com/users/984/zoredache पर ssh क्रेडिट का उपयोग करके लक्ष्य लिनक्स सिस्टम में फ़ाइल को कॉपी करें

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 पर फाइल को सही करें । windows पर id_rsa.pub फाइल मल्टीलाइन है जहां 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
Lines चरण 3 के authorized_keysलिए। एकल-लाइनों के लिए सुधार की मुझे ज़रूरत है!
patricktokeeffe

इसने आपको खुश होने में मदद की - उत्तर मत दें :)
Deian

5

यदि आपके पास ssh-copy-idविंडोज नहीं है , तो आप इसे सर्वर पर ही चला सकते हैं।

  • PuTTYgen में, अपनी निजी कुंजी (.ppk) लोड करें;
  • बॉक्स की सामग्री की प्रतिलिपि करें OpenSSH अधिकृत_की फ़ाइल में चिपकाने के लिए सार्वजनिक कुंजी एक क्लिपबोर्ड पर।
  • इसे अपने पसंदीदा संपादक में पेस्ट करें (विंडोज नोटपैड करेगा)।
  • .pubएक्सटेंशन वाली फ़ाइल में सामग्री को सहेजें ।
  • .pubफ़ाइल को सर्वर पर अपलोड करें।
  • एक एसएसएच क्लाइंट के साथ सर्वर में प्रवेश करें, जैसे पुट्टी।
  • सर्वर प्रकार पर:

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

विंडोज ssh-copy-idस्क्रिप्ट पर विंडोज के लिए Git आता है । तो आप स्थानीय रूप से इसका उपयोग कर सकते हैं, यदि आपके पास विंडोज के लिए गिट है।


यदि आप मैन्युअल रूप से ऐसा नहीं करना चाहते हैं, तो आप WinSCP 5.15 का उपयोग कर सकते हैं । यह आपके लिए सार्वजनिक कुंजी प्रमाणीकरण सेटअप कर सकता है। उपकरण का
उपयोग करें > SSH> WinSCP उन्नत साइट सेटिंग्स संवाद के प्रमाणीकरण पृष्ठ पर सर्वर बटन में सार्वजनिक कुंजी स्थापित करें

यहाँ छवि विवरण दर्ज करें

(मैं WinSCP का लेखक हूं)


यह स्वीकृत उत्तर होना चाहिए: विंडोज 7 के लिए गिट-बैश; विंडोज 10 में उपलब्ध लिनक्स सबसिस्टम
एलेक्स

0

यदि आप cmder (या msysgit / mingw जिसमें scp & ssh है) का उपयोग कर रहे हैं , तो मैंने इसके लिए एक साधारण अजगर स्क्रिप्ट लिखी है। यह यहाँ पाया जा सकता है: https://gist.github.com/ceilfors/fb6908dc8ac96e8fc983

नमूना उपयोग: अजगर ssh-copy-id.py उपयोगकर्ता @ रिमोट-मशीन।

स्क्रिप्ट चलाने पर पासवर्ड संकेत दिया जाएगा।


इसके लिए cmder की आवश्यकता क्यों है?
डेविड जोरिच्टा

@ user57411 इसे cmder की आवश्यकता नहीं है, इसके लिए scp और ssh कमांड की आवश्यकता होती है।
Ceffors

0

मैंने क्या किया, मेरे Win10 पर CygWin होना, लिनक्स से कनेक्ट करना (aboves उत्तर पर आधारित)):

- ध्यान दें: बिल्ली का उपयोग करते हुए, यह स्वचालित रूप से साइबर मार्ग का समाधान करेगा, साथ ही साथ साइबर-लिनक्स-फ़ोल्डर-संरचना का उपयोग करके कोई भी साइबर कमांड

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: आरएसए कुंजी जोड़ी उत्पन्न करें

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 विंडोज़ में बराबर

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

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

एक शिल्पी कंसोल में:

ssh-copy-id user@machine

ssh-copy-id एक कुंजी उत्पन्न करने वाला नहीं है यदि यह मौजूद नहीं है।
राल्फफ्राइडल

@RalfFriedl मैंने
Fab
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.