Итак, я искал простой способ обойти неизвестное взаимодействие с хостом при клонировании git-репо, как показано ниже:
brad@computer:~$ git clone git@bitbucket.org:viperks/viperks-api.git
Cloning into 'viperks-api'...
The authenticity of host 'bitbucket.org (104.192.143.3)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)?
Обратите внимание на отпечаток ключа RSA ...
Итак, это SSH, это будет работать для git over SSH и просто для SSH в целом ...
brad@computer:~$ nmap bitbucket.org --script ssh-hostkey
Starting Nmap 7.01 ( https://nmap.org ) at 2016-10-05 10:21 EDT
Nmap scan report for bitbucket.org (104.192.143.3)
Host is up (0.032s latency).
Other addresses for bitbucket.org (not scanned): 104.192.143.2 104.192.143.1 2401:1d80:1010::150
Not shown: 997 filtered ports
PORT STATE SERVICE
22/tcp open ssh
| ssh-hostkey:
| 1024 35:ee:d7:b8:ef:d7:79:e2:c6:43:9e:ab:40:6f:50:74 (DSA)
|_ 2048 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40 (RSA)
80/tcp open http
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 42.42 seconds
Сначала установите nmap на свой ежедневный драйвер. Nmap очень полезен для определенных вещей, таких как обнаружение открытых портов и это - ручная проверка отпечатков SSH. Но вернемся к тому, что мы делаем.
Хороший. Я либо скомпрометирован в нескольких местах и машинах, которые я проверил, либо более правдоподобным объяснением того, что все происходит так, как надо, является то, что происходит.
Этот «отпечаток пальца» - это просто строка, сокращенная с помощью одностороннего алгоритма для удобства человека, и существует риск того, что более одной строки будут преобразованы в один и тот же отпечаток пальца. Бывает, они называются столкновениями.
Независимо от этого, вернемся к исходной строке, которую мы можем увидеть в контексте ниже.
brad@computer:~$ ssh-keyscan bitbucket.org
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-128
no hostkey alg
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-129
bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-123
no hostkey alg
Итак, заблаговременно, у нас есть способ запросить форму идентификации у оригинального хоста.
На данный момент мы вручную так же уязвимы, как и автоматически: строки совпадают, у нас есть базовые данные, которые создают отпечаток, и мы можем запросить эти базовые данные (предотвращая столкновения) в будущем.
Теперь, чтобы использовать эту строку таким образом, чтобы не спрашивать о подлинности хостов ...
Файл known_hosts в этом случае не использует незашифрованные записи. Вы увидите хэшированные записи, когда увидите их, они выглядят как хэши со случайными символами вместо xyz.com или 123.45.67.89.
brad@computer:~$ ssh-keyscan -t rsa -H bitbucket.org
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-128
|1|yr6p7i8doyLhDtrrnWDk7m9QVXk=|LuKNg9gypeDhfRo/AvLTAlxnyQw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==
Первая строка комментария выводит из себя, но вы можете избавиться от нее простым перенаправлением через соглашение «>» или «>>».
Поскольку я сделал все возможное, чтобы получить незапятнанные данные, которые будут использоваться для идентификации "хоста" и доверия, я добавлю эту идентификацию в мой файл known_hosts в моем каталоге ~ / .ssh. Поскольку теперь он будет определен как известный хост, я не получу подсказку, упомянутую выше, когда вы были ребенком.
Спасибо, что остались со мной, вот и все. Я добавляю ключ bitbucket RSA, чтобы я мог взаимодействовать со своими репозиториями git неинтерактивным способом как часть рабочего процесса CI, но независимо от того, что вы делаете, что хотите.
#!/bin/bash
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.old && echo "|1|yr6p7i8doyLhDtrrnWDk7m9QVXk=|LuKNg9gypeDhfRo/AvLTAlxnyQw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==" >> ~/.ssh/known_hosts
Итак, вот как ты остаешься девственницей на сегодня. Вы можете сделать то же самое с GitHub, следуя аналогичным инструкциям в свое время.
Я видел так много сообщений о переполнении стека, в которых говорилось, что вы должны программно добавлять ключ вслепую без какой-либо проверки. Чем больше вы проверяете ключ на разных машинах в разных сетях, тем больше вы можете быть уверены, что хост - это тот, о котором он говорит, - и это лучшее, на что вы можете надеяться на этом уровне безопасности.
НЕПРАВИЛЬНО
ssh -oStrictHostKeyChecking = нет имени хоста [команда]
НЕПРАВИЛЬНО
ssh-keyscan -t rsa -H имя хоста >> ~ / .ssh / known_hosts
Не делайте ничего из вышеперечисленного, пожалуйста. Вам предоставляется возможность повысить ваши шансы избежать того, чтобы кто-то подслушивал ваши передачи данных через человека, находящегося в середине атаки - воспользуйтесь этой возможностью. Разница заключается в том, что вы в буквальном смысле проверяете, что у вас есть ключ RSA, принадлежащий добросовестному серверу, и теперь вы знаете, как получить эту информацию для сравнения, чтобы вы могли доверять соединению. Просто помните, что больше сравнений с разных компьютеров и сетей, как правило, увеличит вашу способность доверять соединению.