Я использую phpseclib для подключения к только что созданному серверу. Он никогда не был связан с не будет отображаться в ~/.ssh/known_hosts
. Чтобы предотвратить тайм-аут сценария, я хотел бы обойти предупреждение:
The authenticity of host 'xxx.xxx.xxx.xxx' can't be established.
RSA key fingerprint is xxx.
Are you sure you want to continue connecting (yes/no)?
Я знаю, что флаг OpenSSH может быть отключен для отключения проверки подлинности:
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]
Это функция, которая пробилась в phpseclib?
phpseclib не может и не проверяет подлинность хостов.
Что делает phpseclib, это позволяет вам получить общедоступный ключ сервера с помощью $ssh->getServerPublicHostKey()
. Вы можете сделать это до входа на сервер, и вы можете сохранить ключ где-нибудь, будь то в БД или в файловой системе, и проверьте этот сохраненный ключ на будущих подключениях.
Я имею в виду, где бы phpseclib сохранить общедоступный ключ сервера сервера? Он не знает, есть ли у вас доступ к БД. Он не знает, доступна ли какая-либо из файловой системы. Я полагаю, что он мог бы использовать tempnam(), но, как вы сказали, что он делает при первоначальных соединениях? Предположим, что вы запускаете его через веб-браузер (а не CLI) и отображаете всплывающее окно js? И tempnam() не является постоянным. Предполагается ли вам повторно запрашивать вас каждый раз, когда /tmp удаляется файловой системой?