Я могу обойти это ограничение с помощью одной небольшой проблемы / побочного эффекта.
Устанавливая параметры UserKnownHostsFile=/dev/null
и StrictHostKeyChecking=no
, вы можете обмануть SSH, фактически не сохраняя или не требуя проверкиключ хоста.
Установка StrictHostKeyChecking
в no разрешает соединение с сервером без предварительного знания или проверки его ключа;и использование /dev/null
для UserKnownHostsFile
просто читает и записывает ничего, поэтому никакие значения никогда не читаются из сохраненных.
Предостережение заключалось в том, что SSH все еще пытается создать каталог .ssh
и терпит неудачу, но ошибкавыводит предупреждение и будет продолжено соединение.Предупреждение будет включено в ваш вывод (если вы не должны были подавлять предупреждения).
Вот пример.Примечание. В этом примере я не настроил никакой аутентификации, поэтому он попытается использовать аутентификацию пароля и потерпит неудачу, но, поскольку вы используете идентификацию, у вас должно получиться отличное соединение.
<?php
$ssh_command = "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "
."-p 2223 user@host.localdomain";
exec("$ssh_command ls 2>&1", $out);
var_dump($out);
// output when called from browser running as daemon(1)
array(5) {
[0]=>
string(44) "Could not create directory '/usr/sbin/.ssh'."
[1]=>
string(110) "Warning: Permanently added '[host.localdomain]:2223,[192.168.88.20]:2223' (RSA) to the list of known hosts."
[2]=>
string(36) "Permission denied, please try again."
[3]=>
string(36) "Permission denied, please try again."
[4]=>
string(82) "Received disconnect from 192.168.88.20: 2: Too many authentication failures for user"
}
Вашскорее всего, выходные данные будут включать только первое предупреждение о невозможности создания каталога .ssh
, за которым следует предупреждение о постоянном добавлении хоста в список известных хостов (/dev/null
), за которым следует вывод вашей команды;поэтому вам нужно проверить, было ли первой строкой это предупреждение, и переместить его из массива $out
.
Еще одно примечание: это открывает возможность атак «человек посередине» илиВзлом DNS / IP, чтобы вы попытались подключиться к мошенническому серверу.
См. Эту статью на Защита ключа хоста SSH от Symantec.