설정된 HTTP CONNECT 터널을 Paramiko에 전달하기
SSH 호스트 키 검증을 유지하면서 승인된 HTTP CONNECT 경로로 Paramiko를 연결합니다.
HTTP CONNECT 도우미가 의도한 SSH 서버로 터널을 반환하면 해당 스트림을 Paramiko에 넘기십시오:
with paramiko.SSHClient() as client:
client.load_system_host_keys()
client.connect('ssh.example.com',
username='operator',
sock=tunnel,
banner_timeout=10,
auth_timeout=10)
# Use the verified SSH connection.예제 호스트를 바꾸고 배포의 올바른 known-hosts 데이터를 로드하십시오. tunnel은 이미 같은 서버로 이어져야 합니다. connect에 전달되는 호스트 이름은 SSH 호스트 키를 식별하며 프록시를 식별하지 않습니다.
sock 인터페이스는 열린 소켓 또는 소켓 유사 객체를 받습니다. 대신 HTTP를 협상하지는 않습니다. 반환하기 전에 커넥터는 다음을 해야 합니다:
- 프록시에 연결하고 대상에 대한 유효한 CONNECT 요청을 보냅니다.
- 지원되는 프록시 인증을 완료하고 성공적인 터널 상태를 검증합니다.
- 프록시 헤더 섹션 전체를 읽고, 부분 읽기를 처리하며 경계를 넘는 바이트를 보존합니다.
- 설정을 제한하고 거부된/오류 소켓을 정리 경로를 통해 닫습니다.
그 작업에는 유지 관리되는 커넥터를 사용하십시오. 수신 버퍼 하나에서 영어 성공 문구를 찾으면 분할된 상태 줄, 가변적인 이유 텍스트, 불완전한 헤더를 놓칩니다. 프록시 TCP 연결이 성공했다고 해서 수락된 SSH 터널은 아닙니다.
프록시는 요청된 SSH 포트를 허용해야 합니다. 웹 브라우징 권한은 포트 22에 대한 CONNECT 접근을 설정하지 않습니다. 407은 SSH 로그인 전에 발생하고, SSH 계정 실패는 터널 이후에 발생합니다. 이 두 계정은 분리하십시오.
완료되면 SSH 클라이언트와 커넥터가 소유한 리소스를 닫으십시오. 작업이 읽기를 중단한다고 해서 살아 있는 연결이 저절로 닫히지는 않습니다.