SSH config - โฮสต์เดียวกัน แต่มีคีย์และชื่อผู้ใช้ต่างกัน


28

ฉันได้ตั้งค่าบัญชี GitHub สองบัญชี แต่ฉันไม่สามารถรับคีย์ ssh เพื่อทำงานได้อย่างถูกต้อง ฉันได้ลองตั้งค่าต่างๆแล้ว


Host github_username1
    HostName github.com
    IdentityFile ~/.ssh/rsa_1
    User username1
Host github_username2
    HostName github.com
    IdentityFile ~/.ssh/rsa_2
    User username2

git push:

Permission denied (publickey).
fatal: The remote end hung up unexpectedly

ใช้งานได้สำหรับชื่อผู้ใช้ 1:

Host github.com
    HostName github.com
    IdentityFile ~/.ssh/rsa_1
    User username1
Host github.com
    HostName github.com
    IdentityFile ~/.ssh/rsa_2
    User username2

git push ที่ repo ของ username2:

ERROR: Permission to username2/repo.git denied to username1.
fatal: The remote end hung up unexpectedly

ฉันได้พยายามยังgit pushมีทั้งIdentityFileและการตั้งค่าภายใต้เดียวกันUser Hostเอาต์พุตเหมือนกับการกำหนดค่าล่าสุด

ฉันคิดว่า git ค้นหา Host "github.com" โดยอัตโนมัติเพราะรีโมทเป็นเช่นนั้น ว่ากันว่าโฮสต์สามารถเป็นอะไรก็ได้ที่คุณต้องการ ( https://stackoverflow.com/a/3828682 ) มีวิธีใดที่จะเปลี่ยนแปลงสิ่งที่โฮสต์จากการกำหนดค่า SSH ควรใช้ repo เฉพาะหรือไม่

มันจะเหมาะถ้าฉันสามารถแก้ปัญหานี้ได้เพียงแค่จาก ~ / .ssh / config

คำตอบ:


42

ไคลเอนต์ OpenSSH ใช้เฉพาะHostบรรทัดเป็นตัวระบุส่วนและทุกอย่างเป็นการตั้งค่า หากคุณเชื่อมต่อfoo@bar.comSSH จะไม่ค้นหา " User foo"; มันจะค้นหาเฉพาะ " Host bar.com"

ในคำอื่น ๆ : หากคุณมี " Host github_username2" ในการตั้งค่า SSH ของคุณแล้วคุณจะต้องใช้โฮสต์เดียวกันในรีโมท Git ของคุณ - ไม่github_username2git@github.com

แต่ที่ไม่ได้เป็นสิ่งที่ทำให้เกิดความล้มเหลวในการตรวจสอบในกรณีที่github.com, จุ๊ชื่อผู้ใช้ต้อง "git " เซิร์ฟเวอร์ GitHub SSH ระบุผู้ใช้ด้วยคีย์ SSH ของพวกเขาเท่านั้น


การกำหนดค่า SSH ที่ถูกต้องจะเป็น:

Host github_username1
    Hostname github.com
    User git
    IdentityFile ~/.ssh/rsa_1
Host github_username2
    Hostname github.com
    User git
    IdentityFile ~/.ssh/rsa_2

การกำหนดค่า Git:

[remote "origin"]
    url = git@github_username1:username2/repo.git

หมายเหตุ: แม้ว่าฉันจะระบุgitชื่อผู้ใช้ในสถานที่ทั้งสองในตัวอย่างของฉันก็ต้องระบุเพียงครั้งเดียว - git@ใน Git URL จะให้ความสำคัญมากกว่าUser gitในการกำหนดค่า SSH


2
ในบางกรณีคุณอาจต้องเพิ่มIdentitiesOnly=yesในแต่ละhostส่วนเพื่อให้แน่ใจว่า ssh จะเลือกไฟล์ข้อมูลประจำตัวที่เลือกเท่านั้นและอย่าเริ่มต้น / ลองสิ่งอื่น ..
TCB13
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.