คัดลอกคีย์ ssh ไปยังเครื่องอื่นเพื่อให้ฉันสามารถใช้ GitHub ได้หรือไม่


12

ฉันมีเซิร์ฟเวอร์ระยะไกล ฉันสามารถ ssh ไปยังเซิร์ฟเวอร์ระยะไกลได้สำเร็จ - กุญแจของฉันอยู่ในauthorized_keysเซิร์ฟเวอร์ระยะไกล

ตอนนี้ฉันต้องการดึงจาก GitHub ไปยังเซิร์ฟเวอร์ระยะไกลโดยตรง แต่ฉันจะได้รับpermission denied (publickey)เมื่อฉันลองssh -T git@github.comเซิร์ฟเวอร์ระยะไกล

ฉันควรจะคัดลอกid_rsa.pubโดยตรงจากเครื่องท้องถิ่นของฉันไปยังเซิร์ฟเวอร์ระยะไกลหรือว่าเป็นอันตรายหรือไม่?

หากนี่คือคำตอบวิธีที่ดีที่สุดที่จะทำคืออะไร?

หรือฉันควรสร้างพับลิกคีย์ใหม่บนรีโมตเซิร์ฟเวอร์และเพิ่มเข้าไปใน github acocount ของฉัน?

UPDATE:

นี่คือผลลัพธ์จาก verbose ssh:

~$ ssh -Tv git@github.com
OpenSSH_6.0p1 Debian-4+deb7u2, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to github.com [192.30.252.131] port 22.
debug1: Connection established.
debug1: identity file /home/richard/.ssh/id_rsa type -1
debug1: identity file /home/richard/.ssh/id_rsa-cert type -1
debug1: identity file /home/richard/.ssh/id_dsa type -1
debug1: identity file /home/richard/.ssh/id_dsa-cert type -1
debug1: identity file /home/richard/.ssh/id_ecdsa type -1
debug1: identity file /home/richard/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version libssh-0.6.0
debug1: no match: libssh-0.6.0
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u2
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-sha1 none
debug1: kex: client->server aes128-ctr hmac-sha1 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: RSA 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
debug1: Host 'github.com' is known and matches the RSA host key.
debug1: Found key in /home/richard/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/richard/.ssh/id_rsa
debug1: Trying private key: /home/richard/.ssh/id_dsa
debug1: Trying private key: /home/richard/.ssh/id_ecdsa
debug1: No more authentication

ฉันเพิ่งลองตั้งค่าการส่งต่อตัวแทน ssh โดยใช้ที่อยู่ IP ของเซิร์ฟเวอร์ของฉัน: developer.github.com/guides/using-ssh-agent-forwardingแต่ฉันยังคงPermission denied (publickey)อยู่บนเครื่องระยะไกล
Richard

1
มีตัวเลือก verbose ในคำสั่ง ssh ฉันคิดว่าอาจบอกคุณว่าไฟล์คีย์ใดที่พยายามใช้จริงมันช่วยฉันสองสามครั้ง
Allman

คำตอบ:


4

id_rsa.pubสามารถคัดลอกได้ทุกที่โดยไม่เป็นอันตรายใด ๆ ที่จริงมัน นี่คือกุญแจสาธารณะของคุณและมีไว้สำหรับสิ่งนี้ เป็นครึ่งหนึ่งของคู่คีย์และแบ่งปันกับสถานที่ที่คุณต้องการเข้าถึงคือวิธีที่คุณอนุญาตให้ใช้งานไพรเวตคีย์

หากต้องการอนุญาตการเข้าสู่ระบบระยะไกลรหัสสาธารณะของคุณจะต้องแสดงรายการในauthorized_keys( authorized_keys2ในบางระบบ) หนึ่งคีย์ในแต่ละบรรทัดในรูปแบบนี้:

ssh-rsa AAAIHAVEREMOVEDTHEMAJORITYOFTHEKEYBECAUSEISEENONEEDTOPOSTTHATWALLOFTEXTHERE9yfRjxw== jarmund@jarmint

เพื่อให้บรรลุเป้าหมายนี้เมื่อคุณคัดลอกเสร็จแล้วเพียงแค่ต่อท้ายauthorized_keysไฟล์ดังกล่าว:cat id_rsa.pub >> ~/.ssh/authorized_keys

ระบบที่มีเหตุผลส่วนใหญ่จะปฏิเสธที่จะอนุญาตให้คุณใช้การเข้าสู่ระบบด้วยคีย์หาก.sshโฟลเดอร์นั้นมีการอนุญาตที่หลวมเกินไป ควรเป็นโฟลเดอร์700ดังนั้นหากคุณยังมีปัญหา:chmod 700 ~/.ssh

นอกจากนี้ไฟล์ใน.sshโฟลเดอร์ควรเป็น 600:chmod 600 ~/.ssh


แก้ไข 1:

ไฟล์เองid_rsa.pubไม่จำเป็นต้องใช้ตัวเองบนเซิร์ฟเวอร์ระยะไกล authorized_keysเฉพาะเนื้อหาเป็นส่วนหนึ่งของ ฉันแนะนำให้เรียกใช้ssh -vT git@github.comเพื่อเปิดใช้งานการบันทึก verbose เพื่อให้คุณสามารถดูว่าสิทธิ์ใดที่มันบ่น

แก้ไข 2:

ซึ่งหมายความว่าไม่มีคีย์ใด ๆ ที่ตรงกับสิ่งที่เซิร์ฟเวอร์ระยะไกลมีอยู่ในไฟล์ สิ่งที่คุณต้องการเห็นคืออะไรเช่นนี้:

debug1: Offering RSA public key: /home/jarmund/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535

สิ่งที่ต้องตรวจสอบ:

  • ตรวจสอบให้แน่ใจว่าหนึ่งในกุญแจส่วนตัวเป็นกุญแจที่ตรงกับกุญแจสาธารณะที่คุณเพิ่มลงในรีโมท authorized_keys
  • ตรวจสอบให้แน่ใจว่ารหัสนั้นตรงกับชื่อผู้ใช้ที่คุณพยายามเข้าสู่ระบบด้วย (ควรเป็นส่วนสุดท้ายของรหัสสาธารณะ)
  • ลองเปลี่ยนชื่อauthorized_keysเป็นauthorized_keys2

ขอบคุณ กุญแจสาธารณะของฉันคือการระบุไว้ใน~/.ssh/authorized_keysบนเซิร์ฟเวอร์ระยะไกล - cat ~/.ssh/id_rsa.pub | ssh me@server "cat >> ~/.ssh/authorized_keys"ฉันได้เพิ่มโดยใช้ จากนั้นก็ไปที่รีโมตแล้ววิ่งไป~$ chmod 700 ~/.ssh และ$ chmod 600 ~/.ssh/authorized_keysก็ยังได้ แต่Permission denied (publickey)เมื่อฉันลอง ssh ไปที่ github ฉันควรจะคัดลอกid_rsa.pubไฟล์ทั้งหมดไปยังเครื่องระยะไกลด้วยหรือไม่
Richard

@Richard คุณไม่จำเป็นต้องใช้ไฟล์ของตัวเองที่นั่นไม่ใช่ แม้ว่าฉันต้องการเก็บไว้ในโฟลเดอร์. ssh ในกรณีที่ฉันต้องการ แต่มันไม่จำเป็นมันเป็นสิ่งที่ฉันทำ ฉันขอแนะนำให้เรียกใช้sshคำสั่งที่อธิบายไว้ในคำถามของคุณด้วย-vสวิตช์เพื่อดูว่าสิทธิ์ใดที่ ssh บ่น
Jarmund

ขอบคุณสำหรับการแก้ไข 2. ฉันไม่แน่ใจว่าจะทำสัญลักษณ์แรกcheck that one of the private keys...- ฉันควรทำอย่างไรที่นี่?
ริชาร์ด

ในจุดที่ 2 คุณหมายถึงคีย์ควรตรงกับชื่อผู้ใช้ GitHub ของฉันหรือไม่ มันไม่ได้ดูอะไรเช่นนั้น :)
ริชาร์ด

สิ่งคือฉันสามารถใช้กุญแจสาธารณะเดียวกันนี้เพื่อ ssh ไปและดึงจาก GitHub จากเครื่องท้องถิ่นของฉันได้ดีดังนั้น GitHub ต้องคิดว่ามันโอเค ... ?
ริชาร์ด

2
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/richard/.ssh/id_rsa
debug1: Trying private key: /home/richard/.ssh/id_dsa
debug1: Trying private key: /home/richard/.ssh/id_ecdsa
debug1: No more authentication

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

ssh -i /path/to/some_key -Tv git@github.com

ไฟล์ที่สำคัญไม่ได้อยู่บนเซิร์ฟเวอร์ระยะไกลจากที่ผมกำลังพยายามที่จะ SSH เพื่อ GitHub authorized_keysแต่มันอยู่ใน มีเพียงพอหรือไม่ฉันต้องการคัดลอกไฟล์คีย์ตรงนั้นด้วยหรือไม่
ริชาร์ด

1
authorized_keysใช้สำหรับพับลิกคีย์ที่จะยอมรับสำหรับการเชื่อมต่อขาเข้า คุณต้องคัดลอกไฟล์กุญแจส่วนตัวเพื่อทำการเชื่อมต่อขาออกไปยังโฮสต์อื่น ดังนั้นใช่หนึ่งในไฟล์คีย์เหล่านั้น (id_rsa ฯลฯ ) จะต้องมีอยู่ในโฮสต์ที่คุณกำลังเรียกใช้ ssh
Kenster

ธง -i ช่วยให้ฉันแก้ปัญหาได้! ฉันคัดลอกโฟลเดอร์ ssh ไปยังคอมพิวเตอร์เครื่องอื่นและพยายามใช้ git ระยะไกล แต่ถูกปฏิเสธ -i บันทึกวัน!
pauljohn32

2

เซิร์ฟเวอร์ต้องการคีย์ส่วนตัวของคุณเพื่อตรวจสอบสิทธิ์กับ Github รหัสสาธารณะของคุณตามชื่อแนะนำจะถือว่าเป็นสาธารณะดังนั้นจึงไม่เพียงพอที่จะรับรองความถูกต้อง

หากคุณไม่ต้องการใช้ Github บนเซิร์ฟเวอร์ระยะไกลโดยไม่ต้องเชื่อมต่อผ่าน ssh คุณควรใช้การส่งต่อ ssh-agent คำแนะนำสำหรับผู้ที่ให้บริการบน Github: https://developer.github.com/guides/using-ssh-agent-forwarding/

มิฉะนั้นคุณควรสร้างรหัสใหม่และเชื่อมโยงกับบัญชีของคุณ


0

คุณสามารถใส่คำสั่งโดยตรง

$ cat ~ / .ssh / id_rsa.pub

หากคุณมีคีย์ ssh อยู่แล้วมันจะแสดงขึ้นมา มิฉะนั้นจะให้ข้อผิดพลาด คุณต้องเพิ่มรหัสใหม่

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