Saya memiliki beberapa server yang dikonfigurasi ~/.ssh/config
, seperti alpha
dan beta
. Bagaimana saya bisa mengkonfigurasi Bash sehingga perintah ssh al<tab>
dan scp file.tgz al<tab>
melengkapi otomatis nama-nama server yang dikonfigurasi?
Saya tidak ingin menambahkan server ke file lain (yaitu array Bash) setiap kali ditambahkan, karena kami menambah dan menghapus server secara teratur dan daftarnya cukup besar.
bash
ssh
autocomplete
scp
dotancohen
sumber
sumber
bash-completion
menginstalnya.Jawaban:
Menemukannya!!
Tampaknya di Ubuntu entri di
~/.ssh/known_hosts
hash , jadi penyelesaian SSH tidak dapat membacanya. Ini adalah fitur, bukan bug. Bahkan dengan menambahkanHashKnownHosts no
ke~/.ssh/config
dan/etc/ssh/ssh_config
saya tidak dapat mencegah hashing tuan rumah.Namun, host yang saya minati juga ditemukan
~/.ssh/config
. Berikut ini adalah skrip untuk Bash Completion yang membaca entri dari file itu:Masukkan skrip itu ke dalam
/etc/bash_completion.d/ssh
dan kemudian sumber dengan perintah berikut:Saya menemukan panduan ini sangat berharga dan saya tidak akan bisa menulis tanpa ini. Terima kasih Steve Kemp untuk menulis panduan hebat itu!
sumber
/etc/hosts
, distro lain mungkin melakukan hal yang sama.Pra-paket
Anda tidak mengatakan distro apa yang Anda gunakan tetapi pada sistem Fedora 19 saya memiliki paket berikut yang diinstal,
bash-completion
yang menyediakan fitur ini melalui file aturan penyelesaian ini:Ini paket yang saya instal:
Jika Anda melihat file aturan itu Anda akan melihat bait yang menginterogasi
$HOME/.ssh/config
file tersebut:Bergulir sendiri
Saya juga menemukan Intisari ini, known_hosts_autocomplete.sh , yang melakukan sesuatu yang serupa kecuali dengan
$HOME/.ssh/known_hosts
file.Anda dapat melakukan sesuatu yang serupa menggunakan
$HOME/.ssh/config
file Anda jika karena alasan tertentu Anda tidak dapat menemukan file aturan penyelesaian untuk yangssh
sudah dikemas sebelumnya.sumber
/usr/share/bash-completion/completions/ssh
. Bisakah Anda memposting seluruh file di suatu tempat yang mungkin saya salin? Terima kasih!/usr/share/bash-completion/completions/ssh
itu tidak membantu! Tidak menjalankancomplete -W ...
perintah dari Bash prompt. Apa yang mungkin menjadi masalah di sini?ssh
atauscp
.Saya menemukan bahwa autocomplete tidak berfungsi karena Ubuntu memiliki host yang dikenal. Anda dapat menambahkan
Ke
.ssh/config
file Anda, tetapi host yang ada tidak akan dibatalkan.sumber
~/.ssh/config
dan mengubah arahan dalam/etc/ssh/ssh_config
, dan saya telah menghapus~/.ssh/known_hosts
file. Setelah masuk ke server lagi, nama host masih disimpan hash..ssh/config
file sudah memiliki baris ini. Beri tahu saya jika itu berhasil.Untuk mengaktifkan pelengkapan otomatis ssh di Debian dan Ubuntu:
Perhatikan bahwa ini sama sekali tidak ada hubungannya dengan hashing known_hosts, bertentangan dengan apa yang dinyatakan di atas dan pertanyaan awal. Jika Anda ingin melengkapi otomatis dari known_hosts, maka tentu saja Anda harus menonaktifkan hashing, tetapi itu sangat tidak disarankan.
Sebagai contoh, saya punya:
di .ssh / config saya, dan saya masih memiliki ssh auto-completion yang berfungsi dengan baik terhadap host yang terdaftar di .ssh / config dan / etc / hosts. Anda perlu menambahkan host ke .ssh / config seperti yang dinyatakan OP:
Host my-awesome-host Hostname the.real.host.name
(Atau, Anda dapat menambahkan entri host ke / etc / hosts, yang merupakan sumber lain untuk skrip Debian / Ubuntu.)
Kemudian, Anda bisa mengetik
ssh my-awe<tab>
dan itu akan selesai secara otomatis. Sekali lagi, ini bahkan jika Anda HashKnownHosts, yang sangat dianjurkan. (Perhatikan bahwa penyelesaian bash perlu diaktifkan di bash shell Anda, dan Anda perlu menginstal skrip-skrip tersebut seperti di atas untuk distribusi Anda.)Kemudian, tambahkan baris ini ke Anda
.bashrc
untuk mengaktifkannya (memerlukan logout dan masuk kembali, atau hanya yang barubash
diketik untuk meluncurkan shell baru. (Anda tidak perlu mengaktifkan jika sudah diaktifkan/etc/bash.bashrc
dan/etc/profile
sumber/etc/bash.bashrc
).Hal ini akan memungkinkan autocompletion ssh (antara lain!) Dari
~/.ssh/config
,/etc/hosts
, dllPerhatikan bahwa Debian default ke ash bukan bash. Anda dapat beralih ke bash dengan mudah:
(Anda harus keluar dan masuk kembali agar ini berlaku.)
sumber
Di Ubuntu 14,04, pelengkapan
ssh
otomatis server yang disebutkan di Anda~/.ssh/config
Saya perhatikan ketika saya menyadari bahwa hanya satu dari server yang saya akses secara otomatis. Satu-satunya perbedaan antara keduanya adalah entri dalam file konfigurasi ssh yang terkait dengan otentikasi. Ketika saya menambahkan entri baru ke file konfigurasi untuk server lain, itu mulai melengkapi otomatis juga.
Inilah entri untuk mereka yang bertanya:
Saya akan sangat terkejut jika itu penting apa yang Anda tentukan dalam konfigurasi (selama itu masih valid, tentu saja).
sumber