มีสิ่งใดเทียบเท่าหรือพอร์ตของ ssh-copy-id สำหรับ Windows? นั่นคือมีวิธีง่าย ๆ ในการถ่ายโอนคีย์ SSH จากเครื่องท้องถิ่นไปยังเซิร์ฟเวอร์ระยะไกลใน Windows หรือไม่
ในกรณีที่ช่วยได้ฉันใช้ Pageant และKitty (ทางเลือก Putty) อยู่แล้ว
มีสิ่งใดเทียบเท่าหรือพอร์ตของ ssh-copy-id สำหรับ Windows? นั่นคือมีวิธีง่าย ๆ ในการถ่ายโอนคีย์ SSH จากเครื่องท้องถิ่นไปยังเซิร์ฟเวอร์ระยะไกลใน Windows หรือไม่
ในกรณีที่ช่วยได้ฉันใช้ Pageant และKitty (ทางเลือก Putty) อยู่แล้ว
คำตอบ:
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 จะค่อนข้างยุ่งยาก แต่ก็เป็นไปได้อย่างแน่นอน
plink.exe -pw password
โรงงาน นอกจากนี้หากคุณรู้ว่า. ssh / authorized_keys มีอยู่คำสั่งนั้นก็คือtype id_rsa.pub | plink.exe -ssh user@host -pw password "cat >> .ssh/authorized_keys"
.ssh/
ไดเรกทอรีอยู่ การ>>
เปลี่ยนเส้นทางจะสร้างไฟล์หากไม่มีอยู่
คำตอบเหล่านี้ไม่ได้ช่วยฉัน ฉันไม่ต้องการบทบ้า ๆ บอ ๆ ฉันสร้างพับลิกคีย์บนเครื่องไคลเอ็นต์ของฉันใน 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"
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 เป็นชื่อไฟล์ของกุญแจสาธารณะที่คุณอัปโหลด
ได้รับแรงบันดาลใจจากคำตอบของ zoredache ฉันได้สร้างสคริปต์ขึ้นมากมายซึ่งเป็นเวอร์ชั่นของ Windows อย่างไรก็ตามพวกเขาทั้งหมดขึ้นอยู่กับ plink โปรดดูที่นี่
https://github.com/VijayS1/Scripts/blob/master/ssh-copy-id/
ฉันยังมีสคริปต์ winscp ที่สามารถใช้ตามคำตอบอื่น :) ข้อความที่ตัดตอนมาจาก readme:
วิธีการที่พยายามมาจนถึงตอนนี้:
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]"
ใน 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 โดยไม่ต้องขอรหัสผ่าน
authorized_keys
แบบบรรทัดเดียวคือทั้งหมดที่ฉันต้องการ!
หากคุณไม่มี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)
หากคุณใช้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
มี ssh-copy-id เวอร์ชัน Windows ที่ฉันพบใน GitHub: 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