Очень вопрос для новичков!
Я подключаюсь к двум разным серверам, которые являются частью одного кластера 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
затем активируется хеширование.