Как я могу заставить SSH дать ключ RSA вместо ECDSA?


16

При первом обращении к серверу, как я могу заставить SSH дать мне ключ RSA и автоматически сохранить его, если пользователь одобрит?

В настоящее время он предлагает мне ключ ECDSA. Поскольку я уже знаю ключ RSA, я бы предпочел, чтобы ключ RSA был представлен на этом этапе.

Я пытался:

ssh -o RSAAuthentication=yes user@server

К сожалению, это дает мне ключ ECDSA и Are you sure you want to continue connecting (yes/no)?сообщение.


У меня похожая ситуация. Сервер A. Клиент B. На B: SSH А будет первым запросит ключ. На Cleint C: ssh A сначала спросит вас о passwrd, после неудачной попытки для клиента C использовать ключ ECDSA, я увидел это в журнале A. Если я предварительно загрузил ключ rsa на C, то ssh A соединится счастливо , Как предотвратить C от использования ECDSA ключа в качестве первой попытки?
Кемин Чжоу

Ответы:


14

Удаляя алгоритмы ECDSA из HostKeyAlgorithmsпеременной конфигурации.

ssh -o HostKeyAlgorithms=ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-rsa,ssh-dss user@server

Я просто удалил все алгоритмы ECDSA из списка по умолчанию .

Можно, конечно, положить , что в вашем .ssh/configдля этой машины:

Host: server
    HostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-rsa,ssh-dss

Для OpenSSL, 1) нет двоеточия после хозяина, и 2) список по умолчанию , кажется, изменилось с тех пор вы отправили это. Попробуй HostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-rsaвместо.
cowlinator

6

Не использовать RSA, так как ECDSA является новым значением по умолчанию.

На сервере это сделать: ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub и записать это число.

На клиенте вы можете SSH к хосту, и если и когда вы видите тот же номер, вы можете ответить на приглашение Are you sure you want to continue connecting (yes/no)?утвердительно. Затем ключ ECDSA будет записан на клиенте для дальнейшего использования.


3
да, но как насчет того, если у меня есть старое приложение, которому нужен RSA для поддержания совместимости, пока не будет бизнес-решения для обновления до ecdsa?
энтузиастик

@RobertSiemer только оригинальный плакат с вопросом может изменить принятый ответ. Я не могу этого сделать.
энтузиастик

1
H2ONaCl: пожалуйста, измените принятый ответ. Этот не делает то, что вы просили. @enthusiasticgeek извините, путаница.
Роберт Симер

Дефолт (обращение к авторитету) и новый (апелляция к новизне) не обязательно означает лучше. RSA по-прежнему считается сильным ... просто увеличьте бит до 4096, если вы хотите больше силы (2048 может скоро устареть). И если вы хотите хороший алгоритм ЕС, используйте ed25519. ECDSA - отстой, потому что он использует слабые кривые NIST, которые, возможно, даже задворки; это было хорошо известной проблемой некоторое время. Таким образом, для устаревшей поддержки включите RSA, а для идеального алгоритма используйте ed25519 ... всегда отключайте DSA, который давно устарел (основной причиной является ключ с фиксированным размером 1024 бит), а также отключите ECDSA. Попробуйте ssh-аудит для большего.
Питер

5

Да, хорошо, скоро переключитесь на ECDSA, но пока попробуйте это:

ssh -o HostKeyAlgorithms=ssh-rsa -o FingerprintHash=md5 user@example.com

Это дает «Плохая опция конфигурации: fingerprinthash» в моей системе (OpenSSH_6.6.1p1).
Сорен Бьорнстад

1
@SorenBjornstad, FingerprintHashопция не нужна, просто оставьте всю эту часть выключенной.
Лукас

2

Я только добавил эту строку

HostKeyAlgorithms ssh-rsa

в

/etc/ssh/sshd_conf

и это работает нормально в этой версии.

OpenSSH_7.7p2 ubuntu-4ubuntu2.2

1

Просто чтобы улучшить ответ перекати, который имеет неработающую ссылку в нем для нахождения старого списка алгоритмов.

Первое решение в списке алгоритмов. Чтобы найти старый список, используйте ssh -vv:

ssh -vv somehost

И обратите внимание на 2 строки, как «алгоритмы основного хоста: ...», где впервые появляется как предложение сервера, а второй является клиентом. Или, чтобы выбрать эти две строки автоматически, попробуйте это (и для выхода нажмите Ctrl + D):

ssh -vv somehost 2>&1 | grep "host key algorithms:"

Теперь отфильтруйте его ... вы должны удалить все dss / dsa, так как они давно устарели, и вы также хотели удалить ecdsa (как я), например, если у вас было:

ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

Вы должны закончить с:

ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

Теперь отредактируйте ваш конфиг. Для вашего собственного конфига:

vim ~/.ssh/config

Для общесистемной конфигурации:

sudo vim /etc/ssh/ssh_config

Добавьте новую строку, либо глобально:

HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

или для определенного хоста (не идеально для конфигурации сервера):

Host somehost
    HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

Вместо списка я вошел, вставьте список , полученный из ssh -vvвывода, не incluing «алгоритмов ключа хоста:» части.


0

некоторые моменты сбивают с толку: возможно ли удалить ключевые алгоритмы из существующих значений по умолчанию? Ключами наивысшего уровня являются новые ключи RSA-sha2 / 256/512 и ed25519 для лучшей защиты с использованием ssh-keygen -t ras -a -b 4096 -a 113 к общ. Поддержка Наследство по-видимому, чтение SSH новость, что ssh1 будет полностью ушел - его 45bit и 96 бит макс - ключи DSA также изношены также устранен. Его исправлено на максимальном 128/1024 битах. (Возм NSA сделал это и хромой / оправдание, как отлаживать код оставил не- сильно сомневаюсь, что назвав его heartbleed), так что все дороговизна платить безопасные структуры ключевых RSA должны быть переработаны для поддержки и поддерживать высокие стандарты в будущем. набор какие ключи вы хотите использовать, как описано в / и т.д. / SSH / sshd_config попытаться сделать 2 ключа AUTH 3 ключ тоже работает именно: sshd_config «AuthenticationMethods ОткрытыйКлюч, ОткрытыйКлюч, ОткрытыйКлюч» - убедитесь, что SSH -Q Kex списки совпадают серверы А и В или настольные компьютеры, как пример ПОСС сделать диф на их выходе - и убедитесь, что одни и те же алгоритмы ключевых exhng совпадают. Ключи ecdsa, более новые в производстве, также являются слабыми, чтобы их не использовать. или получить - keyexchange отказался частичный доступ к безопасной Сообщ. Много хорошего infoz просто терпеливый, чтобы искать его.


2
Не могли бы вы попытаться разрушить эту стену текста, чтобы за ней было легче следить? Пожалуйста, используйте руководство по форматированию и отформатируйте код и содержимое текстового файла в качестве кода, и если это прояснит ситуацию, поместите их в свои строки. Я бы с удовольствием отредактировал бы ваш ответ сам, если бы мог следовать ему, но я не могу.
Занна

-5

Или, если вы настаиваете на том , подход ключа RSA, вы можете ввести ssh-keygen -t rsaна сервере , который вы собираетесь SSH в.

Это должно сгенерировать открытый и закрытый ключи RSA в «~ / .ssh / id_rsa». Теперь все, что вам нужно сделать, это скопировать открытый ключ $HOME/.ssh/authorized_keysна всех тех машинах, с которых вы собираетесь использовать ssh, на машину, на которой вы сгенерировали ключи RSA.

А потом сядь и расслабься!


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