Почему некоторые сессии ssh предлагают автозаполнение, а некоторые нет?


10

Очень новый вопрос!

Я использую два разных сервера, оба являются частью одного кластера Amazon AWS. Они не управляются мной.

На одном сеансе SSH терминал позволяет мне автозаполнение. На другой сессии это не так - хотелось бы, чтобы это было.

Почему это - это опция, установленная администратором сервера?

И могу ли я что-нибудь с этим сделать?

Спасибо!

Ответы:


15

Это на самом деле не вопрос программирования, но это связано с вашей оболочкой. Вы можете попробовать запустить bashоболочку (набрав bashв командной строке) и посмотреть, сможете ли вы выполнить автозаполнение.

Если это работает, вы можете использовать его which bashдля проверки его местоположения, а затем chsh -s /bin/bashдля постоянной настройки вашей оболочки.

Список доступных оболочек также можно найти в /etc/shells.


Я не могу изменить свою раковину по какой-то причине. Есть ли способ сделать это как root? You may not change the shell for 'counterstrike'.
Томаш Зато - Восстановить Монику

3

Это комбинация оболочки, которая используется в вашей сессии ssh, а также ее конфигурация.

Хотя ваша оболочка может поддерживать автозаполнение, она не может быть настроена для этого. Если вы используете оболочку bash, вы можете отредактировать локальный файл .bashrc для следующего, чтобы обеспечить автозаполнение.

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

1
Пакет завершения bash необходим только для более сложного завершения, таких как параметры командной строки, имена серверов, каталоги репозитория VCS, .... Завершение команд, каталогов, имен файлов, переменных и имен пользователей работает без него.
ak2

2

Скопировано из моего собственного ответа на unix.SE :

Кажется, что именно в Ubuntu записи в ~/.ssh/known_hostsхэше хэшируются , поэтому SSH-завершение не может их прочитать. Это особенность, а не ошибка. Даже добавив HashKnownHosts noк ~/.ssh/configи /etc/ssh/ssh_configя не смог предотвратить хозяина хэширования.

Тем не менее, хосты, которые меня интересуют, также находятся в ~/.ssh/config. Вот скрипт для Bash Completion, который читает записи из этого файла:

_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

Поместите этот скрипт, /etc/bash_completion.d/sshа затем отправьте его с помощью следующей команды:

$ . /etc/bash_completion.d/ssh

Я нашел это руководство бесценным, и я не смог бы написать это без него. Спасибо Стиву Кемпу за написание этого потрясающего руководства!


1

IIRC также может быть проблемой, что ssh хэширует имена хостов в ~ / .ssh / known_hosts

большинство установок, которые я знаю, используют ~ / .ssh / known_hosts в качестве источника для списка доступных хостов для завершения, но некоторые системы также начали устанавливать "HashKnownHosts yes", что запрещает использование known_hosts в качестве источника ....

если строки ваших известных хостов начинаются с чего-то вроде

|1|BWO5qDxk/cFH0wa05JLdHn+j6xQ=|rXQvIxh5cDD3C4

тогда активируется хеширование.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.