Konfigurasi SSH - host yang sama tetapi kunci dan nama pengguna berbeda

31

Saya telah menyiapkan dua akun GitHub, tetapi saya tidak bisa mendapatkan kunci ssh agar berfungsi dengan benar. Saya sudah mencoba berbagai konfigurasi.


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

Bekerja untuk username1:

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 di repo username2:

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

Saya juga sudah mencoba git pushkeduanya IdentityFiledan Userpengaturannya sama Host. Outputnya sama dengan konfigurasi terakhir.

Saya pikir git secara otomatis mencari Host "github.com" karena remotenya seperti itu. Dikatakan bahwa Host dapat menjadi apa pun yang Anda inginkan ( /programming//a/3828682 ). Apakah ada cara untuk mengubah Host dari ssh config apa yang harus digunakan repo tertentu?

Akan ideal jika saya bisa menyelesaikan ini hanya dari ~ / .ssh / config.

usr
sumber

Jawaban:

44

Klien OpenSSH hanya menggunakan Hostgaris sebagai pengidentifikasi bagian, dan yang lainnya adalah pengaturan. Jika Anda terhubung [email protected], SSH tidak akan mencari " User foo"; itu hanya akan mencari " Host bar.com".

Dengan kata lain: Jika Anda memiliki " Host github_username2" di konfigurasi SSH Anda, maka Anda harus menggunakan host yang sama di remote Git Anda - github_username2, tidak [email protected].

Namun, bukan itu yang menyebabkan kegagalan otentikasi, Dalam kasus ini github.com, nama penggunagit SSH harus " " . Server GitHub SSH mengidentifikasi pengguna dengan kunci SSH mereka saja.


Konfigurasi SSH yang benar adalah:

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

Konfigurasi git:

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

Catatan: Meskipun saya menentukan gitnama pengguna di kedua tempat dalam contoh saya, itu hanya harus ditentukan satu kali - git@dalam URL Git akan diprioritaskan User gitdalam konfigurasi SSH.

grawity
sumber
2
Dalam beberapa kasus, Anda mungkin perlu menambahkan IdentitiesOnly=yespada setiap hostbagian untuk memastikan ssh hanya akan memilih file identitas yang dipilih dan tidak melakukan default / coba yang lain ..
TCB13