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

Я пробовал yes | ssh root@10.x.x.x чтобы попытаться принять отпечаток ключа RSA, но мне все еще предлагается, если я уверен, что хочу подключиться. Есть ли способ сделать это автоматически?

9 ответов

Решение

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

 #
 #  ssh + scp without storing or prompting for keys.
 #
 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): expand the StrictHostKeyChecking option with two new
   settings. The first "accept-new" will automatically accept
   hitherto-unseen keys but will refuse connections for changed or
   invalid hostkeys. This is a safer subset of the current behaviour
   of StrictHostKeyChecking=no. The second setting "n", is a synonym
   for the current behaviour of StrictHostKeyChecking=no: accept new
   host keys, and continue connection for hosts with incorrect
   hostkeys. A future release will change the meaning of
   StrictHostKeyChecking=no to the behaviour of "accept-new".

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

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

Если вы хотите иметь возможность использовать программно и избегать атаки Man-In-The-Middle, то я предлагаю вам получить известный отпечаток пальца с помощью команды 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

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

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

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

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

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

Первый мой вариант использования - несколько серверов загружаются на один сервер «загрузки», заданный как имя хоста «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/config

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

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

Ты можешь использовать -y вариант: т.е. попробовать

ssh -y root@10.x.x.x

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

Другие вопросы по тегам