하나의 작은 문제/부작용으로이 제한을 피할 수 있습니다.
옵션 UserKnownHostsFile=/dev/null
과 StrictHostKeyChecking=no
을 설정하면 실제로 호스트 키를 저장하거나 검증 할 필요가 없도록 SSH를 속일 수 있습니다.
으로 설정하면 StrictHostKeyChecking
을 no로 설정하면 키를 처음 알거나 확인하지 않고 서버에 연결할 수 있습니다. /dev/null
을 UserKnownHostsFile
으로 사용하면 아무 것도 읽지 않고 씁니다. 따라서 저장된 값은 읽히지 않습니다.
SSH가 여전히 .ssh
디렉토리를 만들려고 시도했지만 실패하면 경고 메시지가 표시되고 연결이 계속됩니다. 경고는 출력에 포함됩니다 (경고를 표시하지 않는 한).
다음은 예입니다. 참고 :이 예에서는 인증을 설정하지 않았으므로 비밀번호 인증을 사용하려고했지만 실패합니다. 그러나 ID를 사용하고 있으므로 정상적으로 연결해야합니다.
<?php
$ssh_command = "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "
."-p 2223 [email protected]";
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"
}
귀하의 출력은 출력 다음에 대해 영구적으로 알려진 호스트 (/dev/null
)의 목록에 호스트를 추가 경고 다음에 .ssh
디렉토리를 만들 수없는 경우에 대해 최초의 경고를, 가장 가능성이 포함됩니다 당신의 명령에서; 첫 번째 줄이이 경고인지 확인하고 $out
배열로 이동해야합니다.
또 다른 참고 사항 : 악의적 인 서버에 연결하려고 시도하는 사람 - 중간 공격 또는 DNS/IP 해킹의 가능성을 열어줍니다.
이 문서는 시만텍의 SSH Host Key Protection에 있습니다.
나는 당황합니다. 취향과는 다른 이유가 있습니까? 아파치 프로세스로부터 특정 요청을 받고 응답을 제공하는 다른 사용자 계정으로 실행되는 서비스 내에서 SSH를 분류하는 것은 실제로 가치가 있습니까? – minopret
PHP SSH2 라이브러리를 사용하고 싶지 않은 주된 이유는 PECL을 전혀 다루고 싶지 않았기 때문입니다. 받아 들여진 응답에있는 해결책은 좋은 생각이다, 나는 생각한다. – Rafe