SSH จาก Windows ถึง Linux โดยไม่ต้องป้อนรหัสผ่าน


11

ฉันพยายามใช้ ssh / scp จาก Windows ถึง Linux โดยไม่ต้องป้อนรหัสผ่าน

นี่คือสิ่งที่ฉันทำและดูเหมือนว่าจะไม่ทำงาน:

  • สร้างกุญแจสาธารณะและกุญแจส่วนตัวโดยใช้ Putty Key Generator (บน Windows)
  • บันทึกไฟล์เป็นid_rsa.pubและid_rsa
  • คัดลอกมาไว้ใน ~/.ssh
  • เพิ่ม id_rsa.pub ไปยังกล่อง Linux ใน ~/.ssh/authorized_keys
  • ฉันลองไปsshที่กล่อง Linux จาก Windows และฉันยังต้องใส่รหัสผ่าน

ฉันพลาดอะไรไปรึเปล่า?

คำตอบ:


10

คุณต้องเรียกใช้ตัวแทนการรับรองความถูกต้องบน Windows

ตัวอย่างเช่นPageantใช้ร่วมกับPuTTY (ไคลเอ็นต์ SSH แบบกราฟิก) หรือ Plink (เทียบเท่ากับบรรทัดคำสั่ง)

คุณจะต้องบอก Pageant คีย์สาธารณะของเซิร์ฟเวอร์ SSH ของคุณ หลังจากนั้นจะจัดการกับคำขอการตรวจสอบสิทธิ์เซิร์ฟเวอร์ของคุณในขณะที่ทำงานในพื้นหลัง


2
หมายเหตุ: (นี่ไม่ชัดเจนสำหรับฉัน) เมื่อเปิด Pageant มันจะเปิดเป็นไอคอนในพื้นที่แจ้งเตือนที่ด้านล่างขวา คลิกขวาจากนั้นคลิกAdd Keyและเลือกไฟล์. ppt ที่สร้างขึ้นจาก puttygen
badjr

8

คุณต้องประกวด

ดูวิดีโอเข้าสู่ระบบรหัสผ่านน้อยลงด้วยฉาบและประกวด และ / หรือโพสต์บล็อกHowto: การตรวจสอบ SSH passwordless กับฉาบ


1
โปรดลองลิงก์ไปยังบทช่วยสอนที่ใช้ข้อความแทนวิดีโอ
ผู้เข้ารหัส

ลิงก์บล็อกเสีย ลองอันนี้: tecmint.com/ssh-passwordless-login-with-putty
Kai Wang

2
ลิงก์บล็อกที่เสียหายคือเหตุผลที่แท้จริงคำตอบควรมากกว่าลิงก์
Ramhound

5

ลองใช้ Plink (เป็นส่วนหนึ่งของ PuTTY)

 plink -v youruser@yourhost.com -pw yourpw "some linux command"

3
+1 สำหรับคำตอบที่ถูกต้อง แต่คุณควรใช้คู่คีย์สาธารณะ / ส่วนตัวดีกว่ารหัสผ่าน
Ted Percival

แม้จะมีตัวเลือกอื่นด้วยการใช้เสียงกริ่งคุณไม่สามารถใช้เครื่องปลายทางปกติได้เช่น: ปุ่มลูกศรจะไม่สามารถใช้งานได้กับประวัติทุบตี
PYK

3

การตั้งค่าการรับรองความถูกต้องของคีย์ SSH อาจยุ่งยากเล็กน้อย ดูเหมือนว่าคุณกำลังครอบคลุมฐานทั้งหมดของคุณ สิ่งหนึ่งที่มักจะดึงดูดผู้คนให้ระวัง - คุณต้องแน่ใจว่า.sshไดเรกทอรีและเนื้อหานั้นเป็นของคุณและคุณ / อ่านได้เท่านั้น

ตรวจสอบให้แน่ใจว่าได้เรียกใช้สิ่งนี้ (ในทุก.sshไดเรกทอรีของคุณ):

chmod -R 700 on ~/.ssh

หากวิธีนี้ไม่ได้ผลให้เปิดการบันทึก verbose ด้วยการเพิ่มคำสั่ง-vของคุณssh(คุณสามารถเพิ่มได้มากถึงสาม-vss สำหรับ verbosity เพิ่มเติม)



2

ฉันสมมติว่ากุญแจของคุณไม่ได้รับการป้องกันด้วยรหัสผ่านและสิ่งที่คุณได้รับไม่ใช่คำขอรหัสผ่านของกุญแจ

~ / .ssh ไม่ใช้โดย putty ทางหน้าต่างและ putty ไม่มีการตั้งค่าคีย์ส่วนตัวเริ่มต้น หากคุณกำลังใช้ไคลเอนต์ ssh บรรทัดคำสั่งเช่น cygwin การสร้างไดเรกทอรี. ssh จากที่บ้านจะใช้งานได้ จากผงสำหรับอุดรูคุณจะต้องกำหนดค่าและบันทึกเซสชัน

จากกล่องโต้ตอบการกำหนดค่าโป๊วให้ดูที่การเชื่อมต่อ -> ข้อมูลและกรอกข้อมูลในฟิลด์ชื่อผู้ใช้เข้าสู่ระบบอัตโนมัติ จากนั้นไปที่การเชื่อมต่อ -> ssh -> รับรองความถูกต้องและตั้งค่าคีย์ส่วนตัวของคุณอย่างถูกต้อง จากนั้นกลับไปที่กล่องโต้ตอบเซสชันและบันทึกเซสชันนี้ คุณสามารถตั้งชื่อโฮสต์ได้ถ้าต้องการ

เมื่อคุณมีเซสชันที่บันทึกไว้คุณสามารถใช้ 'putty -load "hiddensession"'


นอกจากนี้ chmod 700 ~ / .ssh บนเครื่องเป้าหมายและ chmod 644 ~ / .ssh / คีย์ที่ได้รับอนุญาต เมื่อฉันทำตามคำแนะนำของคุณและตั้งค่าการอนุญาตอย่างถูกต้องแล้วมันก็เริ่มทำงานให้ฉัน
Blisterpeanuts

1

คุณอาจต้องเปลี่ยนการอนุญาตในไดเรกทอรีบ้านของคุณ:

chmod 755 ~

1

ฉันสามารถทำสิ่งนี้ได้อย่างแน่นอนจากการWindows 7ใช้-iตัวเลือกสำหรับการระบุรหัสส่วนตัว:

ssh -i X: \ win-path \ to \ ส่วนตัว remoteuser สำคัญ @remote.host.com

ยกเว้นว่าบนรีโมตโฮสต์คีย์ที่ได้รับอนุญาตของฉันอยู่ใน/etc/ssh/authorized_keys/remoteuserและใน/etc/ssh/sshd_configฉันเปลี่ยน

#AuthorizedKeysFile     .ssh/authorized_keys
AuthorizedKeysFile      /etc/ssh/authorized_keys/%u

แต่ฉันไม่รู้ว่าการกำหนดค่า SSH ระยะไกลน่าจะสำคัญหรือไม่


1

ทั้งหมดที่คุณต้องเป็นข้ามแพลตฟอร์มsshเครื่องมือ commandline, และssh-keygen ssh-copy-idgit สำหรับ Windows รวมไว้ด้วย

ทำสิ่งนี้จากbashเชลล์ที่ติดตั้ง git :

#By default this puts keyfile pair in ~/.ssh/id_rsa & ~/.ssh/id_rsa.pub :

ssh-keygen.exe -t rsa -b 2048 
ssh-copy-id -i ~/.ssh/id_rsa.pub  $remoteuser@$remotehost

# These two chmod lines are needed on unix platforms, probably not on Windows. 
# typically ssh refuses to use a private key file 
# if it is less-well protected than this:
chmod 700 ~/.ssh
chmod 640 ~/.ssh/id_rsa

หรือเรียกใช้สคริปต์นี้ใน PowerShell:

Param(
  [Parameter()][string]$keyfile="id_rsa",
  [Parameter()][string]$remotehost,
  [Parameter()][string]$remoteuser
  )
write-host "# ---------------------------------------------------------------------------------#"
write-host "# Create an RSA public/private key pair, and copy the public key to remote server  #"
write-host "#                                                                                  #"
write-host "# /superuser/96051                                            #"
write-host "#         ssh-from-windows-to-linux-without-entering-a-password/1194805#1194805    #"
write-host "#                                                                                  #"
write-host "# ---------------------------------------------------------------------------------#"

write-host "Keyfile pair will be saved at : ~/.ssh/$keyfile, ~/.ssh/$keyfile.pub"
write-host "And copied to $remoteuser@$remotehost"
write-host ""
write-host "You will need a password for the copy operation."
write-host ""

if( -not $(ls ~/.ssh) ) { mkdir ~/.ssh }
$sshdir=$(get-item ~/.ssh/).Fullname

#By default this puts keyfile pair in ~/.ssh/id_rsa & ~/.ssh/id_rsa.pub :
ssh-keygen.exe -t rsa -b 2048 -f "$sshdir$keyfile"

# ssh-copy-id somehow didn't work in Powershell so I called it via bash
bash -c "ssh-copy-id -i ~/.ssh/$keyfile.pub $remoteuser@$remotehost"

# I'm not sure if these two chmod lines work on windows but 
# typically ssh refuses to use a private key file 
# if it is less-well protected than this:
chmod.exe 700 $sshdir
chmod.exe 640 "$sshdir$keyfile"

หลังจากนี้เข้าสู่ระบบ passwordless ควรจะทำงานให้ทั้งสองและsshscp

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