확립된 프록시 스트림을 통한 phpseclib 3 SFTP
phpseclib 3의 공개 스트림 생성자를 사용하여 이미 확립된 HTTP 또는 SOCKS 터널을 통해 SFTP를 시작합니다.
phpseclib 3는 SSH/SFTP 생성자가 보통 호스트 이름을 받는 위치에서 열린 스트림 리소스를 받아들입니다. 이것이 이미 프록시를 통해 전달되는 연결을 위한 공개 인계 지점입니다.
먼저 커넥터가 실제 SFTP 서버와 포트로 HTTP CONNECT 또는 SOCKS 터널을 설정합니다. 그런 다음 설정된 스트림을 SFTP에 전달합니다.
use phpseclib3\Net\SFTP;
$sftp = new SFTP($tunnel);
$actualHostKey = $sftp->getServerPublicHostKey();
if ($actualHostKey === false
|| !hash_equals($expectedHostKey, $actualHostKey)) {
throw new RuntimeException('Unexpected SFTP server key');
}
if (!$sftp->login($sftpUser, $sftpCredential)) {
throw new RuntimeException('SFTP login failed');
}
$tunnel는 이미 연결된 스트림이며 프록시 URL이 아닙니다. $expectedHostKey는 서버의 신뢰할 수 있는 공개 키 문자열로, 애플리케이션의 프로비저닝 과정을 통해 얻으며 phpseclib이 반환하는 형식입니다. 로그인 자격 증명은 지원되는 비밀번호이거나 애플리케이션이 선택한 로드된 키 객체일 수 있습니다.
커넥터가 반환하는 항목 정의
스트림은 이미 SFTP 서버로 이어져야 합니다. HTTP CONNECT의 경우 프록시가 목적지를 수락했고 프록시 응답 헤더가 모두 소비되었음을 의미합니다. SOCKS의 경우 해당 협상이 성공적으로 완료되어야 합니다. 그 경계를 넘어 이미 읽은 모든 SSH 바이트는 SSH 구현에서 사용할 수 있어야 합니다.
그 시점에서 phpseclib는 SSH 교환을 수행하고 동일한 스트림에서 SFTP를 시작합니다. 애플리케이션은 평소의 SFTP 작업을 사용할 수 있습니다. 생성자 인터페이스를 사용하면 내부 소켓 필드를 교체하는 애플리케이션 하위 클래스가 필요하지 않습니다.