Как заставить клиента SSH использовать только аутентификацию пароля?

375

Если я использую аутентификацию pubkey, например, из Ubuntu 11.04, как я могу настроить ssh-клиент на использование только аутентификации по паролю для сервера? (просто необходимо из-за тестирования паролей на сервере, где я по умолчанию вхожу с ключом)

Я нашел путь:

mv ~/.ssh/id_rsa ~/.ssh/id_rsa.backup
mv ~/.ssh/id_rsa.pub ~/.ssh/id_rsa.pub.backup

и теперь мне предлагают пароль, но есть ли какие-либо официальные способы?

LanceBaynes
источник

Ответы:

579

Я тоже недавно нуждался в этом, и придумал это:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no example.com

Вы должны убедиться, что клиент не настроен на запрет аутентификации по паролю.

scoopr
источник
4
Мне нужно было заставить запрос пароля появляться в среде, где Kerberos использовался для автоматической аутентификации, и аналогичная команда работала для меня в этой конкретной ситуации: ssh -o GSSAPIAuthentication=no example.com
IllvilJa
21
Приятно. Только -o PubkeyAuthentication=noбыло достаточно в моем случае.
MIVK
10
Чтобы подключиться к ноутбуку OSX моего друга, мне пришлось использовать: -o PreferredAuthentications=keyboard-interactive -o PubkeyAuthentication=no вместо этого
guido
4
Это не работает для меня. Он продолжает говорить: « Отказано в доступе» (publickey). и никогда не предлагает запрос пароля.
reinierpost
7
@reinierpost, вероятно, потому что хост ssh отключен PasswordAuthentication. Фактически, я здесь, потому что я хотел проверить, что отключение аутентификации пароля работало правильно на моем хосте.
RubberDuck
169

Я обнаружил ярлык для этой цели:

ssh user:@example.com

Обратите внимание на двоеточие ( :) и пустой пароль после него.

Халил Озгюр
источник
2
Документации пока нет. На самом деле, я просмотрел исходный код OpenSSH безрезультатно (этап его разбора довольно загадочный, и сейчас утро :)). Моя первоначальная мотивация: многие клиенты запрашивают пароль, если вы вводите пустой пароль, например,mysql -u user -p
Halil Özgür
43
Кажется, это больше не работает, по крайней мере, в моем случае. sshклиент слепо пытался использовать несвязанные приватные ключи для аутентификации на вновь установленном сервере и продолжал отклоняться из-за максимального количества попыток, которые не были получены, даже не запрашивая пароль. Для принудительной аутентификации по паролю для этого первого соединения мне пришлось использовать -o PreferredAuthentications=passwordсинтаксис, уловка двоеточия не имела заметного эффекта. Таким образом, хотя этот трюк может стоить попробовать, не следует полагаться на него как на последовательное поведение.
WhiteWinterWolf
2
@ HalilÖzgür: Печальные новости, было намного легче запомнить и напечатать;)!
WhiteWinterWolf
3
@Qualcuno, как сказал WhiteWinterWolf, на некоторых платформах больше не работает, к сожалению.
Халил Озгюр
2
Убедитесь, что у вас нет PasswordAuthentication no в вашем файле ssh_config!
Брайам
32

Как и метод, опубликованный scoopr, вы можете установить параметры для каждого хоста в файле конфигурации клиента ssh.

В вашем .sshкаталоге создайте файл с именем config(если он еще не существует) и установите для него права доступа 600, затем вы можете создать разделы, которые начинаются с

host <some hostname or pattern>

а затем установить для каждого хоста опции, например,

host bob.specific.foo
user fred

host *.home.example
user billy
port 9191

чтобы вы могли иметь

host server.to.test
PubkeyAuthentication=no

в этом файле, а затем просто

ssh server.to.test

и вариант будет поднят.

EightBitTony
источник
Спасибо за этот ответ. Я создал запись в моем ~/.ssh/configи добавилPubkeyAuthentication no
Крейг Лондон
2
Не работает для меня
reinierpost
11

Недавно я нуждался в этом, но ни один из вышеперечисленных параметров не работал, ssh -vпоказал, что параметры командной строки, передаваемые через -oпереключатель, были переопределены значениями, указанными в моем ~/.ssh/configфайле.

Что сработало, так это:

ssh -F /dev/null <username>@<host>

Со sshстраницы руководства :

 -F configfile
     Specifies an alternative per-user configuration file.  If a
     configuration file is given on the command line, the system-wide
     configuration file (/etc/ssh/ssh_config) will be ignored. The default 
     for the per-user configuration file is ~/.ssh/config.

Кредиты на этот ответ: Как я могу заставить ssh игнорировать .ssh / config?

adeelx
источник
1
это не отвечает на вопрос. Вы всегда можете хранить ключи в агенте, и ваш подход не помешает клиенту использовать их.
Jakuje
Хм, как можно исправить эту проблему так же, как я упомянул в своем ответе?
adeelx
2
Также, если у вас есть ключи в стандартном расположении (как в вопросе), они будут использоваться независимо от того, присутствует ли конфиг или нет. Я бы пошел с одним из методов, упомянутых в первых ответах.
Jakuje
Не совсем верно, я только что проверил это на моем Lubuntu 14.04 и, хотя у меня есть ключи в стандартном расположении ~/.ssh/config, ключи не используются, если я укажу -F /dev/null. ssh -vВыходные данные помогают в этом случае, они ясно показывают, что, поскольку в моей конфигурации ssh для меня есть универсальная запись *, она выбирает использовать открытый ключ, а не уважает параметры, передаваемые через -oкоммутатор, как в предыдущих ответах.
adeelx
1
Стандартное расположение ~/.ssh/id_rsaуказано на странице руководства. Эти пути жестко прописаны в клиенте. Просто убедитесь, что вы указали правильного пользователя при тестировании.
Jakuje
4

Я попробовал несколько из этих ответов, но ssh -vпродолжал показывать, что мои открытые ключи извлекаются из моего домашнего каталога. Тем не менее, указание поддельного идентификационного файла помогло мне:

ssh -i /dev/null host

Я должен сделать это постоянно (работать вокруг разбитого сервера SSH в качестве APC стойку PDU - остаться далеко от этих вещей , если вы заботитесь о безопасности - так что я в конечном итоге положить опцию в мой конфигурационный файл:

Host apc1 apc2
KexAlgorithms +diffie-hellman-group1-sha1
IdentityFile /dev/null
miken32
источник
2

Ответы @scoopr и @Halil Özgür не сработали для меня.

Это сработало для меня:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com

Источник: http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html

shrx
источник
13
Вопрос об аутентификации клиента по паролю. Этот ответ о проверке, соответствует ли ключ хоста сервера одному из известных хостов. По сути, он отвечает на другой вопрос
Anigel
2

А также будьте уверены, что BatchMode=yesв .ssh / config нет активных. В противном случае у вас нет шансов получить интерактивный запрос пароля.

Гуннар Тиедт
источник
0

Возможно, я единственный в мире с этой проблемой, но у меня работала sshдругая операционная система (choco ssh в Windows в оболочке cygwin) черезwhich ssh

Таким образом, решение было

 /usr/bin/ssh user@example.com

Обратите внимание на полный путь. Я сделал это после того, как я побежалcyg-get openssh

Джонатан
источник