동적 로컬 포트 ​​전달을 사용하는 SSH

동적 로컬 포트 ​​전달을 사용하는 SSH

원격 포트 전달이 동적으로 포트를 할당할 수 있다는 것을 알고 있습니다.

ssh remote -R 0:10.19.24.19:5555

하지만 불행하게도 원격 서버는 iptables광범위한 포트를 차단합니다.

SSH가 로컬에서 포트를 동적으로 할당할 수 있는 방법이 있습니까? 그것은 마치

ssh remote -L 0:10.19.24.19:5555

그러나 위의 명령은 항상 오류를 발생시킵니다.

2023년 2월 3일 수정됨

상황은 이렇습니다. 여러 포트 전달을 관리할 수 있는 도구를 개발 중입니다. 불행하게도 보안상의 이유로 원격 서버에는 사용 가능한 포트 수가 적습니다. 서버 관리자는 제한 사항을 완화하는 것을 허용하지 않습니다. 따라서 전달을 위해 로컬 포트를 동적으로 할당할 수 있기를 바랍니다.

로컬 포워딩은 임의의 포트 할당을 지원하지 않기 때문에 쉘 함수를 사용하여 임의의 포트 번호를 생성하기로 결정했습니다. 그리고 ss전달이 성공했는지 테스트하는 데 사용됩니다.

_next_port() {
    local lower_port upper_port
    read lower_port upper_port </proc/sys/net/ipv4/ip_local_port_range
    while true; do
        local port=$(shuf -i $lower_port-$upper_port -n 1)
        if [[ $(ss -tulpH "sport == $port") == "" ]]; then
            echo $port
        fi
    done
}

사건이 끝났나요?

답변1

ssh포트포워딩 기능을 잘못 이해하신 것 같습니다 . 로컬/원격 포트는 SSH 채널을 통해 전송되며 방화벽 제어와는 거의 관련이 없습니다.

첫 번째 예를 사용하면 이 명령은 에 무작위로 할당된 수신 포트를 생성합니다 remoteHost. 프로세스가 remoteHost연결되면 트래픽이 라우팅됩니다.로컬 클라이언트에서 SSH를 통해 전송시스템의 포트 5555를 사용하려면 10.19.24.19:

   ssh -R 0:10.19.24.19:5555 remoteHost

직접 remoteHost네트워크 액세스는 필요하지 않습니다 10.19.24.19. 이것이 원격 전달 기능의 핵심입니다.

따라서 iptables이 포트를 통해 액세스를 제어할 수 있는 방법이 없으며 시스템 관리자가 부과한 제한(사용 가능한 열려 있는 포트 수에 대해 설명하는 제한)은 영향을 미치지 않습니다.

ssh무작위 포트 번호를 선택하는 것보다 원격 포트 번호를 정의하면 훨씬 쉬울 것이라고 생각합니다. 그러나 동적으로 정의하기로 결정한 경우 StackExchange에 대한 다른 답변(여기서는 내 답변)SSH 터널에 동적으로 할당된 포트 저장, 도움이 될 수 있습니다.

관련 정보