Автоматическое принятие отпечатка RSA-ключа из командной строки

Вопрос или проблема

Я попробовал yes | ssh [email protected], чтобы попробовать принять отпечаток RSA-ключа, но все равно получаю запрос, уверен ли я, что хочу подключиться. Есть ли способ сделать это автоматически?

Добавьте это в ваш файл запуска bash или аналогичный:

 #
 #  ssh + scp без сохранения или запроса ключей.
 #
 function sshtmp
 {
     ssh -o "ConnectTimeout 3" \
         -o "StrictHostKeyChecking no" \
         -o "UserKnownHostsFile /dev/null" \
              "$@"
 }
 function scptmp
 {
     exec scp -o "ConnectTimeout 3" \
         -o "StrictHostKeyChecking no" \
         -o "UserKnownHostsFile /dev/null" \
         "$@"
 }

Затем используйте sshtmp или scptmp вместо ssh и scp.

ПРИМЕЧАНИЕ Если вы пойдете по этому пути, вы не будете уведомлены о том, что ключ хоста изменился, и потеряете безопасность.

OpenSSH 7.6 ввел новую настройку StrictHostKeyChecking=accept-new именно для этой цели:

ssh(1): расширить опцию StrictHostKeyChecking двумя новыми
   настройками. Первая "accept-new" будет автоматически принимать
   ранее невидимые ключи, но будет отказывать в соединениях для 
   измененных или недействительных ключей хоста. Это более безопасный 
   поднабор текущего поведения StrictHostKeyChecking=no. Вторая настройка "n" является синонимом 
   текущего поведения StrictHostKeyChecking=no: принимаем новые 
   ключи хостов и продолжаем соединение для хостов с некорректными 
   ключами хостов. В будущих выпусках изменится значение 
   StrictHostKeyChecking=no на поведение "accept-new".

(Замечания о выпуске OpenSSH 7.6)

Использование SSH программно с известными ключами хоста

Если вы хотите использовать SSH программно И избежать атаки “Человек посередине”, то я предложу вам получить известный отпечаток с помощью команды ssh-keyscan. Пример:

$ ssh-keyscan -t rsa,dsa github.com 2>/dev/null
github.com ssh-dss AAAAB3NzaC1kc3MAAACBANGFW2P9xlGU3zWrymJgI/lKo//ZW2WfVtmbsUZJ5uyKArtlQOT2+WRhcg4979aFxgKdcsqAYW3/LS1T2km3jYW/vr4Uzn+dXWODVk5VlUiZ1HFOHf6s6ITcZvjvdbp6ZbpM+DuJT7Bw+h5Fx8Qt8I16oCZYmAPJRtu46o9C2zk1AAAAFQC4gdFGcSbp5Gr0Wd5Ay/jtcldMewAAAIATTgn4sY4Nem/FQE+XJlyUQptPWMem5fwOcWtSXiTKaaN0lkk2p2snz+EJvAGXGq9dTSWHyLJSM2W6ZdQDqWJ1k+cL8CARAqL+UMwF84CR0m3hj+wtVGD/J4G5kW2DBAf4/bqzP4469lT+dF2FRQ2L9JKXrCWcnhMtJUvua8dvnwAAAIB6C4nQfAA7x8oLta6tT+oCk2WQcydNsyugE8vLrHlogoWEicla6cWPk7oXSspbzUcfkjN3Qa6e74PhRkc7JdSdAlFzU3m7LMkXo1MHgkqNX8glxWNVqBSc0YRdbFdTkL0C6gtpklilhvuHQCdbgB3LBAikcRkDp+FCVkUgPC/7Rw==
github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==

Затем вы можете создать скрипт, чтобы сохранить это во временный файл и использовать опцию UserKnownHostsFile.
Пример ниже – это скрипт, который можно назвать ssh_github:

#!/bin/bash

HOSTKEY='github.com ssh-dss AAAAB3NzaC1kc3MAAACBANGFW2P9xlGU3zWrymJgI/lKo//ZW2WfVtmbsUZJ5uyKArtlQOT2+WRhcg4979aFxgKdcsqAYW3/LS1T2km3jYW/vr4Uzn+dXWODVk5VlUiZ1HFOHf6s6ITcZvjvdbp6ZbpM+DuJT7Bw+                      h5Fx8Qt8I16oCZYmAPJRtu46o9C2zk1AAAAFQC4gdFGcSbp5Gr0Wd5Ay/jtcldMewAAAIATTgn4sY4Nem/FQE+XJlyUQptPWMem5fwOcWtSXiTKaaN0lkk2p2snz+EJvAGXGq9dTSWHyLJSM2W6ZdQDqWJ1k+cL8CARAqL+UMwF84CR0m3hj+wtVGD/J4G5kW2DBAf4/bqzP4469lT+dF2FRQ2L9JKXrCWcnhMtJUvua8dvnwAAAIB6C4nQfAA7x8oLta6tT+oCk2WQcydNsyugE8vLrHlogoWEicla6cWPk7oXSspbzUcfkjN3Qa6e74PhRkc7JdSdAlFzU3m7LMkXo1MHgkqNX8glxWNVqBSc0YRdbFdTkL0C6gtpklilhvuHQCdbgB3LBAikcRkDp+FCVkUgPC/7Rw==
github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+                                                                                                                                      PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+    2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ=='

TEMPFILE=$(mktemp)
echo "$HOSTKEY" > $TEMPFILE

ssh -o "UserKnownHostsFile $TEMPFILE" $@

rm $TEMPFILE

С этим вы можете просто запустить ssh_github вместо ssh, и он подключится, даже если нет файла known_hosts, где вы положили скрипт.

Я просто использую:

ssh -o StrictHostKeyChecking=no user@host

Это также можно использовать с pssh:

pssh -O StrictHostKeyChecking=no -h list.text -l user -A -i "cmd"

Используйте опцию StrictHostKeyChecking, например:

ssh -oStrictHostKeyChecking=accept-new $host 

Эту опцию также можно добавить в ~/.ssh/config:

Host *
    StrictHostKeyChecking accept-new

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

Это не является универсальным исключением. Если ключи хоста изменятся, вы все равно получите предупреждение. Если вам совершенно не важно, получить MITM, вы можете использовать это вместо:

ssh -oUserKnownHostsFile=/dev/null $h

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

Мои 5 копеек, потому что никто этого не упомянул:

Сначала мой случай использования – несколько серверов загружают на единый сервер “upload”, заданный как хостнейм “upload.domain.com”. Загрузка осуществляется с помощью rsync+ssh. Я хотел иметь возможность изменить “upload.domain.com” и чтобы все продолжало работать.

Я сделал конфигурационный файл в директории .ssh:

cat > .ssh/config <<[end]
StrictHostKeyChecking no
[end]

или

echo "StrictHostKeyChecking no" >> ~/.ssh/config

Вам не нужно удалять файл .ssh/known_hosts, он печатает сообщение, но все равно работает.


Обновление

Я не имею в виду, что это будет crontab или что-то автоматическое.

Я имею в виду, что вы должны создать файл .ssh/config и вставить в него эту строку. Самый простой способ – это команда, которую я показываю. Вы можете использовать любой другой метод, который вам удобен, например текстовые редакторы – vi, pico и т.д.

Используйте эту команду, чтобы добавить хост в ~/.ssh/known-hosts (и не добавлять дублирующиеся) как указано здесь

например, добавляя gitlab.com

ssh-keygen -F gitlab.com || ssh-keyscan gitlab.com >> ~/.ssh/known_hosts

вы должны добавить доверенный хост в файл: ~/.ssh/config

вы можете легко добиться этого, изменив значение TRUSTED_HOST для вашего имени хоста

export TRUSTED_HOST="github.com" && {cat | >> ~/.ssh/config } <<EOF
Host $TRUSTED_HOST
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
EOF

Вы можете использовать эту команду, но учитывайте проблему безопасности, связанную с автоматическим принятием ключей SSH:

timeout 1s ssh -o StrictHostKeyChecking=accept-new $host :

В dropbear ssh вы можете использовать опцию -y: т.е. попробуйте

ssh -y [email protected]

-y Всегда принимайте ключ удаленного хоста, если он неизвестен

Ответ или решение

Авто-принятие отпечатка ключа RSA через командную строку

Использование SSH для подключения к удаленным серверам вызывает необходимость подтвердить отпечаток ключа RSA. При первом подключении вы можете столкнуться с ожиданием подтверждения, что может быть неудобно в автоматизированных сценариях. В данном ответе мы разберем несколько методов автоматического принятия отпечатков ключей RSA через командную строку, а также учтем аспекты безопасности.

1. Использование параметра StrictHostKeyChecking

Одним из наиболее простых способов автоматического принятия ключей является использование параметра StrictHostKeyChecking. Этот параметр имеет несколько настроек:

  • no: Не проверять ключи заранее. Это означает, что вы никогда не получите уведомление о новых или измененных ключах и сможете подключиться без подтверждения.
  • accept-new: Принять новые ключи при первом подключении, но с предупреждением, если ключи изменились. Это более безопасный подход, так как вы будете уведомлены о изменении ключа.

Чтобы использовать эти настройки, выполните команду:

ssh -o "StrictHostKeyChecking=accept-new" user@host

Или, чтобы использовать StrictHostKeyChecking=no:

ssh -o "StrictHostKeyChecking=no" user@host

Применение в конфигурационном файле SSH

Также можно настроить эти опции по умолчанию для всех подключений, добавив их в файл ~/.ssh/config:

Host *
    StrictHostKeyChecking accept-new

2. Использование ssh-keyscan для проверки ключа

Если вы хотите принимать только известные ключи и избегать атаки "Человек посередине" (MITM), вы можете использовать команду ssh-keyscan для получения отпечатка ключа до подключения:

ssh-keyscan -t rsa,dsa target_host >> ~/.ssh/known_hosts

Это позволяет вам явно устанавливать доверенные ключи, которые вы можете использовать в дальнейшем.

3. Использование временной базы для ключа

Если вы хотите использовать ключи временно, вы можете создать скрипт, который будет принимать ключи и удалить временный файл:

#!/bin/bash

HOSTKEY='Ваш_ключ_хоста'
TEMPFILE=$(mktemp)

echo "$HOSTKEY" > $TEMPFILE

ssh -o "UserKnownHostsFile=$TEMPFILE" user@host

rm $TEMPFILE

Этот подход позволяет временно хранить ключи для одного подключения.

4. Альтернативные методы

Для удобства вы можете использовать команды, которые автоматически применяют параметр автоматического принятия ключей:

echo "StrictHostKeyChecking no" >> ~/.ssh/config

Это обеспечит автоматическое принятие всех ключей, но имейте в виду, что это создает угрозу безопасности, если хост изменится.

5. Заключение

Автоматическое принятие отпечатков ключей RSA при помощи SSH может существенно упростить автоматизацию и интеграцию, однако всегда следует проявлять осторожность. Настройки такие как StrictHostKeyChecking=no могут значительно увеличить риски безопасности. Важно осознавать последствия и стремиться к наиболее безопасным методам работы с удаленными системами.

Мы рекомендуем использовать комбинацию StrictHostKeyChecking=accept-new и предварительную проверку ключей через ssh-keyscan, чтобы сохранить безопасность без ущерба для удобства работы.

Оцените материал
Добавить комментарий

Капча загружается...