SOCKS 프록시를 통한 Fabric 2+ SSH 연결
SSH 인증은 대상에 그대로 붙여 두고 SOCKS 지원 커넥터로 Fabric의 ProxyCommand 게이트웨이를 사용하세요.
Fabric의 원격 명령은 SSH를 통해 이동합니다. 그 SSH 연결을 SOCKS 서버로 통과시키려면 SOCKS를 말하고 대상의 바이트 스트림을 돌려주는 커넥터를 Fabric에 제공하세요.
Fabric 2에서 도입된 Connection API는 명령 문자열을 gateway로 받습니다. Fabric은 그 문자열을 ProxyCommand로 사용합니다. 프록시 옵션을 지원하는 기존 OpenBSD 호환 nc가 있다면 설정은 다음과 같을 수 있습니다.
from fabric import Connection
connection = Connection(
"app.example.net",
user="deploy",
gateway="nc -X 5 -x proxy.example.net:1080 %h %p",
)이 예제는 일반 SSH 포트인 22를 사용합니다. 커넥터의 -X 5는 SOCKS5를 선택하고, -x는 프록시 엔드포인트를 지정합니다. 호스트와 포트 자리 표시자가 SSH 대상을 제공합니다. 공용 SSH 대상의 경우 SOCKS5 프록시 목록의 인증 없는 엔드포인트가 해당 대상과 포트를 허용하면 프록시 주소를 채울 수 있습니다. 명령은 컴퓨터에 실제로 설치된 커넥터의 옵션에 맞춰 구성하세요. nc라는 프로그램이 모두 같은 인터페이스를 제공하지는 않습니다.
커넥터는 Fabric이 실행되는 곳에서 로컬로 실행됩니다. 애플리케이션 서버는 단지 SSH 대상이라는 이유만으로 그 도우미가 필요하지 않습니다. 스트림이 설정된 뒤에도 Fabric은 SSH 협상을 수행하고 deploy 계정을 app.example.net에서 인증합니다. SOCKS 서버가 요구하는 모든 인증은 커넥터에 속하며 커넥터가 지원해야 합니다.
Fabric은 SSH 구성에서 ProxyCommand를 읽을 수도 있습니다. 같은 경로를 여러 SSH 도구가 사용할 때 편리할 수 있습니다. 같은 대상에 대해 명령 스타일 게이트웨이와 별도의 점프 호스트 게이트웨이를 결합하지 말고, 연결에는 의도한 게이트웨이 정의 하나를 사용하세요.
중간자가 SSH 서버인 경우
Fabric의 Connection 객체를 gateway로 제공하면 의미가 다릅니다. Fabric은 그 SSH 게이트웨이에 연결하고 최종 호스트로 가는 채널을 요청합니다. SSH 점프 호스트에는 그 형식을 사용하세요. SOCKS 리스너는 SSH 서버가 아니므로 위의 명령 스타일 커넥터가 필요합니다.
이 전송 선택에는 분명한 한계도 있습니다. Fabric의 SSH 연결을 라우팅할 뿐입니다. 원격 호스트에서 실행되는 명령이 나중에 저장소나 패키지를 내려받으면, 그 프로그램 자체의 프록시 구성에 따라 해당 호스트에서 새 아웃바운드 연결이 만들어집니다.