각 끝에서 사용 가능한 대역폭과 CPU 리소스의 최대 처리량을 얻기 위해 동적 압축을 수행하도록 SSH 터널을 설정하고 싶습니다. gzip 압축은 내장되어 있고 플러그할 수 없기 때문에 -o ProxyCommand
외부 터널이 압축된 데이터를 콘텐츠로 보내고 내부 터널이 원격 호스트의 SSH 데몬에 연결되는 이중 SSH 터널 설정을 사용할 수 있다고 생각했습니다. 이것거의일하다. 이것은 내 명령입니다:
# dynamic compression parameters to zstd omitted for brevity
ssh -o ProxyCommand='zstd | ssh -p %p %h "unzstd | nc localhost %p | zstd" | unzstd' <hostname>
이 명령에 대해 내가 아는 것은 다음과 같습니다.
- 이 명령을 실행하면 터미널이 출력되지 않고 정지됩니다.
- [un]zstd를 제거하면 작동합니다. netcat을 프록시 명령으로 사용하는 것이 점프 호스트를 통해 연결하는 표준 방법이기 때문에 이는 놀라운 일이 아닙니다.
cat | zstd | cat
압축기는 데이터를 청크로 처리하기 때문에 명령 프롬프트에 데이터가 즉시 반환되지 않습니다. 압축된 데이터를 해제하기 전에 ctrl+da를 사용하여 EOF를 여러 번 보내야 합니다. 파이프 내부의 데이터 압축을 풀 수도 있으며 동일한 방식으로 작동합니다.- 전체 명령을 실행하는 동안 Ctrl+D를 누르면 아무 일도 일어나지 않습니다.
내가 여기서 무엇을 놓치고 있는 걸까요? 이 작업을 수행하는 방법이나 제가 간과하고 있는 다른 방법이 있습니까?