Назад | Перейти на главную страницу

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

Очень вопрос для новичков!

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

В одном сеансе ssh терминал позволяет мне выполнять автозаполнение. На другом сеансе - нет - я бы так хотел.

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

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

Спасибо!

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

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

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

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

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

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

Скопировано с мой собственный ответ на 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

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

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

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

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

|1|BWO5qDxk/cFH0wa05JLdHn+j6xQ=|rXQvIxh5cDD3C4

затем активируется хеширование.