แชร์คีย์ SSH ส่วนตัวด้วย Bash บน Windows


18

ฉันติดตั้ง Windows 10 พร้อม Git แล้ว Git นี้ใช้C:/Users/MyNamedir ของฉันเป็นไดเรกทอรี HOME และ/.ssh/dir ภายในเหมาะสมสำหรับการจัดหาคีย์ SSH ส่วนตัวของฉัน

ฉันเพิ่งเปิดใช้งานและตั้งค่า "Bash บน Ubuntu บน Windows" (เป็นคำที่ถูกต้อง!) และติดตั้ง Git ในนั้นด้วย ฉันต้องการให้ทั้ง Gits ใช้ชุดคีย์เดียวกันซึ่งไม่สำคัญว่าจะใช้สภาพแวดล้อมแบบใดในเครื่องนี้การกระทำของฉันจะมาจากฉันเสมอ

เป็นปัญหาว่าผบหน้าแรกในทุบตีที่แตกต่างกัน ( /home/MyName) ../../mnt/c/Users/MyName/.sshและดังนั้นจึงไม่เห็นกุญแจที่ตั้งอยู่ในที่ห่างไกลในขณะนี้ ฉันคิดว่าฉันจะเป็นผู้ชนะด้วยการเปลี่ยนตัวแปรสภาพแวดล้อม HOME โดยใช้

export HOME=/c/mnt/Users/MyName

สิ่งนี้ได้เปลี่ยน HOME dir สำเร็จ แต่ bash git ยังไม่เห็นคีย์ที่อยู่ใน./.sshdir

ฉันไม่แน่ใจว่านี่คือ A) หรือไม่เพราะ bash git ต้องการคีย์ในรูปแบบไฟล์อื่น? (ปัจจุบันคือid_rsaและid_rsa.pub) B) bash git ไม่สนใจตัวแปร HOME ที่เปลี่ยนแปลงหรือไม่ หรืออาจจะทั้งคู่

ฉันยังไม่แน่ใจ C) หากการเปลี่ยนแปลงตัวแปร HOME เช่นนี้เป็นความคิดที่ดีโดยทั่วไปโปรแกรมอื่น ๆ ที่อาจอ้างอิงได้หรือไม่


2
ฟังดูเหมือนเป็นเวลาสำหรับ symlink แล้ว
Telastyn

มีอืม.sshอยู่แล้วที่/home/MyName... สามารถเชื่อมโยงไฟล์หนึ่งไฟล์ได้หรือไม่ อย่างนั้นฉันจะทำln -s /mnt/c/Users/MyName/.ssh/id_rsa /.ssh/id_rsaอย่างไร (ใหม่สำหรับการเชื่อมโยงด้วย!)
Toby

BOOM! นั่นทำงานได้ดี! @Telastyn ถ้าคุณต้องการที่จะแสดงความคิดเห็นของคุณเป็นคำตอบฉันจะยอมรับ :-) (แม้ว่าฉันยังคงไม่แน่ใจว่าทำไมแค่เปลี่ยน HOME var ไม่ทำงานในสถานที่แรก)
Toby

2
มันจะทำงานได้ดีขึ้นถ้าคุณเชื่อมโยง.sshไดเรกทอรีทั้งหมด
tripleee

1
ความทรงจำของฉันคือ PuTTY นำสิ่งต่าง ๆ มารวมกันในสถานที่ที่แตกต่างกันบ้าง แต่มันก็เป็นเวลากว่าหนึ่งปีแล้วที่ฉันต้องสัมผัส Windows (ขอบคุณ $
dmr

คำตอบ:


19

ดังนั้นตามที่ Telastyn แสดงความคิดเห็นฉันได้เพิ่ม symlink ใน WSL ~/.ssh/ไปยัง id_rsa และ id_rsa.pub โดยใช้:

> ln -s /mnt/c/Users/MyName/.ssh/id_rsa ~/.ssh/id_rsa
> ln -s /mnt/c/Users/MyName/.ssh/id_rsa.pub ~/.ssh/id_rsa.pub

การใช้เทคนิคเดียวกันเพื่อเชื่อมโยงไดเรกทอรี symlink แทนตามที่แนะนำโดย tripleee ฉันมีปัญหาจนกว่าฉันจะเห็นว่าเครื่องหมายสแลชต่อท้ายที่ฉันใช้ในlnคำสั่ง (เหลือจากการใช้ปุ่มแท็บเพื่อทุบตีกรอกชื่อไดเรกทอรี) เป็นปัญหา ดังนั้นแทนที่จะทำสิ่งใดสิ่งหนึ่งที่ดีกว่าจะทำได้ดีกว่า:

> ln -s /mnt/c/Users/Myname/.ssh ~/.ssh

ไฟล์ known_hosts นั้นแตกต่างกันเล็กน้อยระหว่างการใช้งานของฉัน (git in powershell โดยใช้ ssh-agent) ใน Windows และการใช้งาน SSH ใน WSL โดยที่ชื่อโฮสต์และ IP จะไม่ถูกแฮชในเวอร์ชัน Windows ตามหน้า man สำหรับ ssh-config มีการตั้งค่าสถานะเพื่อปิดการแฮ็กนี้ซึ่งฉันใช้เพื่อหมายความว่า SSH จะเข้าใจไฟล์โดยไม่ต้องแฮชซึ่งทำงานออกมาแล้ว

วิธีหลังนี้หมายความว่ารายละเอียดที่ใช้สำหรับ SSH ที่ใช้ระหว่างสองสภาพแวดล้อมที่แตกต่างกันจะเหมือนกันทุกประการ

ขอบคุณMatějKřížที่ชี้ให้เห็นตัวละครที่ขาดหายไป แต่สำคัญ!


3
ควร> ln -s /mnt/c/Users/MyName/.ssh/id_rsa ~/.ssh/id_rsaเพิ่ม "~" Nope?
MatějKříž

7
โปรดทราบว่ามันเป็นไปไม่ได้ที่จะใช้private keysจากbash on windowsถ้าคนทำs linkระหว่างไดเรกทอรี การทำเช่นนั้นจะทำให้ssh agentบ่นเกี่ยวกับการอนุญาตที่ไม่ถูกต้องในไฟล์คีย์ส่วนตัว เนื่องจากไฟล์ที่ติดตั้งจากหน้าต่างไม่สามารถเปลี่ยนแปลงการอนุญาตได้
โอ๊ก

@oak เป็นไปได้ด้วยการทุบตี?
Tj Gienger

@TjGienger คุณหมายถึงอะไร?
โอ๊ก

@oak นี่อาจเป็นสิ่งที่ Entity Black พยายามแก้ไขด้านล่างหรือไม่ หรือว่าเป็นปัญหาที่แตกต่างกันอย่างไร
sferencik

11

ขึ้นอยู่กับการอนุญาตสร้างภายใน "Build 17063" สำหรับไฟล์ทำงานต่างกันในขณะนี้ ในระยะสั้นคุณต้องทำ:

sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o metadata

สิ่งนี้จะทำให้การอนุญาตสำหรับโฟลเดอร์ ssh ของคุณทำงานตามที่คุณต้องการ จากนั้นทำตามที่ OP แนะนำในคำตอบของเขา

ลิงค์ที่เกี่ยวข้อง:

https://github.com/Microsoft/WSL/issues/3181 https://blogs.msdn.microsoft.com/commandline/2018/01/12/chmod-chown-wsl-improvements/

แก้ไข

ฉันกลับไปที่คำถามนี้เพราะฉันพบว่านี่เป็นเพียงวิธีแก้ปัญหาชั่วคราว (ใช่ฉันโง่) ทุกครั้งที่คุณรีสตาร์ท (ออกจากระบบ) WSL ของคุณคุณต้องส่งคำสั่งนี้อีกครั้ง

ดังนั้นทางออกที่เหมาะกับฉันตอนนี้คือแก้ไขไฟล์ (สร้าง) config /etc/wsl.confใน wsl ubuntu ของฉันและใส่ข้างในต่อไปนี้จากนั้นรีสตาร์ทเพื่อทำการเมาท์อีกครั้ง:

# Enable extra metadata options by default, set uid and gid to 0
[automount]
options = "metadata,uid=,gid="

ทำไมฉันเพิ่มข้อมูลเมตา:

สิทธิ์ Linux ถูกเพิ่มเป็นเมทาดาทาเพิ่มเติมให้กับไฟล์ ซึ่งหมายความว่าไฟล์สามารถมีบิตสิทธิ์การอ่าน / เขียน / ดำเนินการของ Windows และ Linux

ทำไมต้องตั้งค่า uid และ gid:

โดยค่าเริ่มต้น WSL ตั้งค่า uid และ gid เป็นค่าของผู้ใช้เริ่มต้น (ใน Ubuntu distro ผู้ใช้เริ่มต้นจะถูกสร้างด้วย uid = 1000, gid = 1000) หากผู้ใช้ระบุตัวเลือก gid หรือ uid อย่างชัดเจนผ่านทางคีย์นี้ค่าที่เกี่ยวข้องจะถูกเขียนทับ มิฉะนั้นค่าเริ่มต้นจะถูกผนวกเข้าไว้เสมอ

ลิงค์ที่เกี่ยวข้อง:

https://docs.microsoft.com/en-us/windows/wsl/wsl-config https://blogs.msdn.microsoft.com/commandline/2018/02/07/automatically-configuring-wsl/ https: / /blogs.msdn.microsoft.com/commandline/2018/01/12/chmod-chown-wsl-improvements/

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