มีเทียบเท่า ssh-copy-id สำหรับ Windows หรือไม่


56

มีสิ่งใดเทียบเท่าหรือพอร์ตของ ssh-copy-id สำหรับ Windows? นั่นคือมีวิธีง่าย ๆ ในการถ่ายโอนคีย์ SSH จากเครื่องท้องถิ่นไปยังเซิร์ฟเวอร์ระยะไกลใน Windows หรือไม่

ในกรณีที่ช่วยได้ฉันใช้ Pageant และKitty (ทางเลือก Putty) อยู่แล้ว

คำตอบ:


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"

หากคุณต้องการจัดการข้อผิดพลาดเดียวกันทั้งหมดและตำแหน่งคีย์อัตโนมัติฉันแน่ใจว่าการเขียนสคริปต์ภายใต้ Windows จะค่อนข้างยุ่งยาก แต่ก็เป็นไปได้อย่างแน่นอน


1
ขอบคุณ! ฉันไม่สามารถทำงานได้ในตอนแรก ฉันได้รับข้อผิดพลาด "ปฏิเสธการเข้าใช้งาน" กลับมา แต่ปัญหาก็ไม่ได้หยุดลงเพื่อให้ฉันป้อนรหัสผ่าน ฉันลองส่งรหัสผ่านโดยใช้สวิตช์ -pw และใช้งานได้ คุณรู้หรือไม่ว่ามีวิธีที่จะทำให้เกิดการหยุดเพื่อให้คุณป้อนรหัสผ่านกลางทาง?
แมตต์โวลต์

ไม่แน่ใจจริงๆเกี่ยวกับการตรวจสอบรหัสผ่านและการเรียกใช้ เมื่อใดก็ตามที่ฉันใช้งานจริงฉันมีรหัสของฉันในระบบอยู่แล้ว
Zoredache

4
plink.exe -pw passwordโรงงาน นอกจากนี้หากคุณรู้ว่า. ssh / authorized_keys มีอยู่คำสั่งนั้นก็คือtype id_rsa.pub | plink.exe -ssh user@host -pw password "cat >> .ssh/authorized_keys"
KCD

@KCD มันเพียงพอแล้วหากมี.ssh/ไดเรกทอรีอยู่ การ>>เปลี่ยนเส้นทางจะสร้างไฟล์หากไม่มีอยู่
pabouk

20

คำตอบเหล่านี้ไม่ได้ช่วยฉัน ฉันไม่ต้องการบทบ้า ๆ บอ ๆ ฉันสร้างพับลิกคีย์บนเครื่องไคลเอ็นต์ของฉันใน gash bash และพยายามคัดลอกไปยัง VPS

หลังจากสร้างพับลิกคีย์ของคุณแล้วคีย์ควรถูกจัดเก็บเป็น "(โฟลเดอร์ใดก็ตามที่คุณเริ่มต้น) /. ssh / id_rsa.pub"

ดังนั้นใช้คำสั่งนี้: ชื่อผู้ใช้ของคุณอยู่
cat ~/.ssh/id_rsa.pub | ssh user@123.45.67.89 "cat >> ~/.ssh/authorized_keys" ที่ไหนuser(บางครั้ง "รูท" หรืออะไรก็ตามที่คุณตั้งค่าไว้) และแทนที่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 ทำสิ่งต่าง ๆ สองสามอย่าง (อ่านman pageสำหรับรายละเอียด) แต่สิ่งที่สำคัญที่สุดคือเพิ่มเนื้อหาของไฟล์กุญแจสาธารณะในพื้นที่ของคุณไปยังไฟล์ระยะไกลที่เรียกว่า authorized_keys

  • คุณสามารถทำได้ด้วยตัวเองโดยเปิดไฟล์กุญแจด้วยโปรแกรมแก้ไขข้อความและวางเนื้อหาในเทอร์มินัลคิตตี้
    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 อย่างไรก็ตามพวกเขาทั้งหมดขึ้นอยู่กับ plink โปรดดูที่นี่

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

ฉันยังมีสคริปต์ winscp ที่สามารถใช้ตามคำตอบอื่น :) ข้อความที่ตัดตอนมาจาก 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 (แอพต่อขยาย) - สำเร็จ
    • เลือกโฮสต์คลิกขวาเครื่องมือภายนอกเลือกสคริปต์
  • สคริปต์ WinSCP (.bat) - สำเร็จ
    • # "WinSCP.com" /script=".\Scriptname" /parameter "user[:password]@example.com" "id_rsa.pub" [/log=".\copyssh.log]"

1
นี่หวานมาก ๆ
พ.ค.

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-idบน Windows คุณสามารถเรียกใช้บนเซิร์ฟเวอร์ได้

  • ใน PuTTYgen โหลดคีย์ส่วนตัวของคุณ (.ppk);
  • คัดลอกเนื้อหาของกล่องคีย์สาธารณะสำหรับการวางลงในไฟล์ OpenSSH authorized_keysไปยังคลิปบอร์ด
  • วางลงในโปรแกรมแก้ไขรายการโปรดของคุณ (Windows Notepad จะทำ)
  • บันทึกเนื้อหาลงในไฟล์ที่มี.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)


นี่ควรเป็นคำตอบที่ยอมรับได้: git-bash สำหรับ Windows 7; Linux Subsystem พร้อมใช้งานใน 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?
David Zorychta

@ user57411 ไม่จำเป็นต้องใช้ cmder แต่ต้องใช้คำสั่ง scp และ ssh
เพดาน

0

สิ่งที่ฉันทำมี 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)

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 สำหรับ Windows

ในความเป็นจริงมันสามารถทำงานได้ตราบเท่าที่คุณมี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

ssh-copy-id ไม่ควรสร้างคีย์หากไม่มีอยู่
RalfFriedl

@RalfFriedl ฉันลบ keygen
Fab
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.