Автоматический прием отпечатка ключа 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".
Использование 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
Всегда принимайте ключ удаленного хоста, если он неизвестен