Mengapa beberapa sesi ssh menawarkan pelengkapan otomatis dan beberapa lainnya tidak?

10

Pertanyaan yang sangat pemula!

Saya sedang mengerjakan dua server yang berbeda, keduanya merupakan bagian dari cluster AWS Amazon yang sama. Mereka tidak dijalankan oleh saya.

Pada satu sesi ssh, terminal memungkinkan saya melengkapi otomatis. Di sesi lain, tidak - saya berharap begitu.

Mengapa ini - apakah ini opsi yang ditetapkan oleh administrator server?

Dan bisakah saya melakukan sesuatu tentang hal itu?

Terima kasih!


sumber

Jawaban:

15

Ini sebenarnya bukan pertanyaan pemrograman, tapi itu ada hubungannya dengan shell Anda. Anda dapat mencoba memulai bashshell (dengan mengetik bashpada prompt) dan melihat apakah Anda dapat melengkapi otomatis.

Jika berhasil, Anda dapat menggunakan which bashuntuk memverifikasi lokasi itu dan kemudian chsh -s /bin/bashmengatur shell Anda secara permanen.

Daftar kerang yang tersedia juga dapat ditemukan di /etc/shells.

Brad Mace
sumber
Saya tidak dapat mengganti shell saya karena suatu alasan. Apakah ada cara untuk melakukannya sebagai root? You may not change the shell for 'counterstrike'.
Tomáš Zato - Kembalikan Monica
3

Ini adalah kombinasi dari shell yang digunakan dalam sesi ssh Anda dan juga konfigurasinya.

Meskipun shell Anda mendukung pelengkapan otomatis, shell mungkin tidak dikonfigurasikan untuknya. Jika Anda menggunakan bash shell, Anda dapat mengedit file .bashrc lokal Anda untuk yang berikut untuk menyediakan pelengkapan otomatis.

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi
daemonofchaos
sumber
1
Paket penyelesaian bash hanya diperlukan untuk penyelesaian lebih lanjut dari hal-hal seperti opsi baris perintah, nama server, direktori repositori VCS, .... Penyempurnaan perintah, direktori, nama file, variabel, dan nama pengguna berfungsi tanpa itu.
ak2
2

Disalin dari jawaban saya sendiri di unix.SE :

Tampaknya secara khusus di Ubuntu entri di ~/.ssh/known_hostshash , jadi penyelesaian SSH tidak dapat membacanya. Ini adalah fitur, bukan bug. Bahkan dengan menambahkan HashKnownHosts noke ~/.ssh/configdan /etc/ssh/ssh_configsaya 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:

_ssh() 
{
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts=$(grep '^Host' ~/.ssh/config | awk '{print $2}')

    COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
    return 0
}
complete -F _ssh ssh

Masukkan script itu /etc/bash_completion.d/sshdan kemudian sumber dengan perintah berikut:

$ . /etc/bash_completion.d/ssh

Saya menemukan panduan ini sangat berharga dan saya tidak akan dapat menulis tanpa ini. Terima kasih Steve Kemp untuk menulis panduan hebat itu!

dotancohen
sumber
1

IIRC itu juga bisa menjadi masalah yang ssh hash nama host di ~ / .ssh / known_hosts

kebanyakan instalasi saya tahu menggunakan ~ / .ssh / known_hosts sebagai sumber untuk daftar host yang tersedia untuk penyelesaian, tetapi beberapa sistem juga mulai mengatur "HashKnownHosts ya", yang melarang menggunakan known_hosts sebagai sumber ....

jika baris host yang dikenal mulai dengan sesuatu seperti

|1|BWO5qDxk/cFH0wa05JLdHn+j6xQ=|rXQvIxh5cDD3C4

kemudian hashing diaktifkan.

Marcel G
sumber