Если авторизация по ключу не проходит, авторизоваться с другим пользователем
Хочу реализовать следующий алгоритм авторизации по SSH:
- Попробовать авторизацию по ключу с пользователем
username
. - Если не получилось, сразу начать авторизацию по паролю как
defaultuser
.
Такой алгоритм должен работать для всех хостов в некоторой подсети.
Можно ли реализовать это с помощью конфигурации SSH или отдельного инструмента? Если этот путь вообще не годится, неэффективен или небезопасен — расскажите, как правильно, такой ответ меня тоже устроит.
Немного о контексте. Есть подсеть, в которой я разворачиваю виртуальные машины. Только что созданные доступны по дефолтному пользователю и паролю. После этого я создаю на них своего пользователя с sudo-правами, добавляю публичный ключ. Хочу, чтобы авторизация всегда проходила с первой попытки.
Ничего не приходилось бы настраивать, если бы $(whoami)
и defaultuser
совпадали.







Ответы - Если авторизация по ключу не проходит, авторизоваться с другим пользователем / Если авторизация по ключу не проходит, авторизоваться с другим пользователем



07.06.2017 09:45:15
можно, например, такой shell-функцией-обёрткой воспользоваться (без первой и последней строки превращается в shell-скрипт):
sshwrapper() {
if [ $# -ne 1 ]
then
echo "ожидаю один аргумент"
return 1
fi
if ! ssh -o passwordauthentication=no $1
then
ssh -o passwordauthentication=yes defaultuser@$1
fi
}
это только концептуальная заготовка. реализована лишь проверка на количество аргументов. подразумевается, что аргумент всего один — имя машины, куда пытаемся подключиться.
делается две попытки подключения. первая — по имени текущего пользователя (или сконфигурированного через ~/.ssh/config
) и с запретом на аутентификацию по паролю. если попытка оказалась неудачной, делается вторая попытка, с пользователем defaultuser
и уже с явным разрешением на аутентификацию по паролю.
p.s. старался выдержать синтаксис posix-совместимым.

/usr/local/bin/
, чтобы перекрыть основной SSH. Выглядит хрупко.

/usr/bin/ssh
? кстати, в таком случае надо будет устраивать полноценный синтаксический разбор опций/параметров, чтобы найти первый параметр (с именем хоста) // «хрупко» — в каком именно месте?




--ask-pass
, чтобы он запросил ввод пароля. Наверное, так сделано, чтобы не вводить пароли «на ходу». Управляемых хостов может быть много, вводить пароль для каждого — нерационально. То есть предполагается, что мы уже перед запуском знаем, какой способ авторизации является верным.

