Saya ingin mengatur penyelesaian perintah pada zsh untuk menampilkan nama host setelah saya mengetik
ssh [TAB]
mengeluarkan nama dari file .ssh / config saya (dan lebih disukai dari known_hosts dan / etc / hosts dan tempat lain yang masuk akal) dan menyajikan satu daftar tunggal.
Itu beberapa dari ini saat ini, tetapi
- tidak menggunakan .ssh / config sama sekali
- itu membutuhkan nama pengguna terlebih dahulu, meskipun menggunakan .ssh / config membuat pengetikan nama pengguna tidak perlu
- ini menyajikan banyak daftar (mungkin satu dari known_hosts dan lainnya dari / etc / hosts, tapi saya belum memverifikasi itu)
Jadi saya ingin memasukkan nama pengguna yang dikenal serta nama host yang dikenal dalam daftar (lebih disukai tunggal) setelah mengetik ssh [TAB]
(Saya datang ke sini sebelum Google karena 1) itu akan menghasilkan jawaban yang disimpan di sini, dan 2) mungkin lebih efisien. Jika tidak ada orang lain yang menjawab, saya akan mencari jawabannya.)
ssh
shell
zsh
command-line-interface
iconoclast
sumber
sumber
Jawaban:
Inilah bagian yang relevan dari saya
.zshrc
. Itu belum berubah sejak tahun 2002, jadi saya mungkin menulisnya secara berbeda hari ini, tetapi masih berfungsi untuk melengkapi nama host dari~/.ssh/config
dan~/.ssh/known_hosts
(jikaHashKnownHosts
tidak aktif - itu tidak ada pada masa itu).sumber
Fungsi yang menyediakan
ssh
penyelesaian terletak di/usr/share/zsh/functions/Completion/Unix/_ssh
pada sistem saya.Lihat juga
man zshcompsys
dokumentasi (terutama lakukan pencarian pada "host" yang muncul di banyak tempat dan "ssh" yang muncul di beberapa tempat).Mungkin saja menambahkan
zstyle
perintah pada Anda~/.zshrc
akan melakukan apa yang Anda cari tanpa harus memodifikasi fungsi penyelesaian.sumber
/usr/share/zsh/4.3.9/functions/_ssh
dalam Mac OS X (sesuaikan versi)Saya melakukan ini menggunakan daftar semua host di domain yang diberikan menggunakan dig. Anda dapat mengganti fungsi di bawah ini dengan sistem pencarian apa pun yang Anda inginkan termasuk file host Anda atau daftar statis:
Catatan: Kode di atas mungkin tidak sepenuhnya menggantikan sistem lengkap untuk perintah ssh di konfigurasi Anda. Jika Anda memiliki masalah dengannya, cobalah mengubah perintah "ssh" menjadi beberapa perintah acak lainnya seperti "mycompletetest" dan lihat apakah penyelesaiannya berhasil.
Perhatikan juga bahwa ini melakukan transfer zona dns pada setiap penyelesaian! Jika Anda sering menggunakan ini atau pada domain yang cukup statis akan masuk akal untuk melakukan pencarian dan menyimpan hasilnya, maka dalam fungsi pencarian Anda cukup atur reply = zone_result.
sumber
dig axfr mydomain.com @ns1.mydomain.com
. Pastikan Anda dapat menjalankannya secara manual dan bagian dari output harus berupa daftar host yang terdaftar di domain itu dan A atau catatan apa pun mereka. Itulah yang saya cari, kemudian memotong hanya bagian hostname bukan catatan yang sepenuhnya memenuhi syarat.Saya suka menyimpan
known_hosts
file hash saya dan lebih suka tidakHashKnownHosts
mematikan. Saya menemukan bahwa menyemai apa yang dimiliki @Gilles dengan apa yang sudah ada dalam sejarah saya telah cukup efektif untuk kebutuhan saya.Juga, FWIW, inilah yang saya gunakan untuk Bash:
sumber