Banyak 'Host *' di ssh_config?

27

Pemahaman saya tentang cara ~ / .ssh / config berfungsi adalah bahwa setiap baris 'Host' berlaku untuk semua host yang cocok setelah titik tersebut dalam file config.

Saya memiliki sejumlah server pribadi dan server kerja yang harus saya hubungkan. Saya mencoba melakukan sesuatu seperti berikut:

# Pengaturan Umum
ControlMaster otomatis
ControlPath ~/.ssh/controlmaster/%r@%h:% p
ForwardAgent ya
ForwardX11 ya
GSSAPIAuthentication no
PubkeyAuthentication ya

# Server Pribadi
Tuan rumah *
Pengguna harleypig
IdentityFile ~ / .ssh / personal_id_rsa

Tuan rumah tuan rumah1
Hostname host1.com

Tuan rumah tuan rumah2
Hostname host2.com

# Server Pekerjaan
Tuan rumah *
Pengguna alan.young
IdentityFile ~ / .ssh / work_id_rsa

Tuan rumah bekerja1
Hostname work1.companyserver.com

Tuan rumah bekerja2
Hostname work2.companyserver.com

Tuan rumah *
Pengguna devuser

Tuan rumah dev1
Hostname dev1.companyserver.com

Tuan rumah dev2
Hostname dev2.companyserver.com

Dokumen tampaknya menunjukkan bahwa host1 dan host2 harus menggunakan 'personal_id_rsa' dan pengguna harleypig. work1, work2, dev1, dan dev2 harus menggunakan 'work_id_rsa' dan dua yang pertama adalah pengguna 'alan.young' dan dev1 dan dev2 harus menjadi pengguna 'pengguna'

Namun, ini tidak terjadi. Apapun 'Host *' yang saya utamakan adalah apa yang ingin disambungkan oleh semua host berikut. Apakah saya salah paham atau melewatkan sesuatu?

Harleypig
sumber
Terima kasih, di antara kedua jawaban ini, saya bisa membuat koneksi saya berfungsi.
harleypig

Jawaban:

36

Dari ssh_configmanual :

Karena nilai yang diperoleh pertama untuk setiap parameter digunakan, lebih banyak deklarasi khusus host harus diberikan di dekat awal file, dan default umum di akhir.

Jadi, dalam contoh Anda, semua host akan menggunakan User harleypigdan IdentityFile ~/.ssh/personal_id_rsa.

Pikirkan Hostarahan dengan wildcard sebagai fallback: gunakan pengaturan berikut ini hanya jika belum ditetapkan. Anda perlu menulis sesuatu seperti ini:

Host host1
Hostname host1.com
Host host2
Hostname host2.com
Host host*
User harleypig
IdentityFile ~/.ssh/personal_id_rsa

Anda bisa meletakkan banyak pola pada satu Hostbaris jika set alias host tertentu tidak dapat dicocokkan dengan wildcard, misalnya Host host* more* outlier.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
15

Anda pasti salah melakukannya.

  • Anda harus selalu memasukkan Host *sebagai entri terakhir.
  • Anda tidak dapat memiliki banyak Host *entri

Jika mesin kerja Anda memiliki format nama yang dapat digeneralisasi untuk hanya menargetkan mesin kerja, misalnya: machine1.work.com, host.work.com, fileserver.work.com maka Anda dapat menargetkan mesin kerja Anda sebagai:

Host *.work.com
User alan.young
IdentityFile ~/.ssh/work_id_rsa

Hal yang sama berlaku untuk mesin pribadi Anda.

Hameedullah Khan
sumber
Bagi saya, meletakkan Host *di awal file sepertinya berfungsi dengan baik. Mungkin fakta bahwa Anda menggunakan wildcard mengalahkan fakta bahwa itu adalah entri pertama ketika memprioritaskannya?
Zaz
Btw, Host *.work.comini adalah sintaks yang tidak valid. Ini hanya bekerja sebaliknya:Host myserver*
Daniel Andrei Mincă
3
@ MincăDanielAndrei berfungsi dua arah, itu hanya ekspresi wildcard dan Anda dapat menggunakannya sebagai wildcard lainnya. Tuan rumah git-codecommit. *. Amazonaws.com Ini adalah contoh kerja dari ~ / .ssh / config saya
Hameedullah Khan
@HameedullahKhan dengan serius, saya sudah mencobanya dan tidak merespons. Jika Anda melakukannya, Host *subdomain.comitu tidak akan merespons.
Daniel Andrei Mincă
1
@ MincăDanielAndrei Perilaku itu didokumentasikan di halaman manual, jika tidak berhasil (bagi saya juga) itu adalah bug.
goetzc