>

원격 박스에서 개발해야 할 것이 있습니다. 다행히도 셸 액세스 권한이 있지만 AllowTcpForwarding이 false로 설정된 게이트웨이를 거쳐야합니다.

문서에서 정점에 도달했으며 다음과 같이 말합니다.

AllowTcpForwarding Specifies whether TCP forwarding is permitted. The default is ''yes''. Note that disabling TCP forwarding does not improve security unless users are also denied shell access, as they can always install their own forwarders.

내 전달자를 설치 (또는 구축)하려면 어떻게해야합니까? 여기서 목표는 Pycharm을 사용하는 원격 통역사 를 통해 SSH를 통해 로컬 포트, ssh를 통해 공급되는 데이터, 게이트웨이를 통해 공급 된 코드 및 실제로 코드가 실제로 실행되는 개발 상자에 바인딩합니다. 나는 어떻게 든 작업을 수행하는 데 도움이되는 nc 또는 다른 유닉스 유틸리티를 활용할 수 있다고 생각합니다.

다음을 수행하여 원격 상자로 ssh 할 수 있다는 것을 알고 있습니다 :

ssh -t user1@gateway ssh user2@devbox

그러나 ppycharm에서는이 옵션을 사용할 수 없습니다. 다음과 같은 로컬 포트를 열 수 있어야합니다.

ssh -p 12345 localhost
(or variant)

나를 user2 @ devbox에 연결합니다. 포트 12345 를 사용하도록 원격 인터프리터를 구성 할 수 있습니다.   localhost 에서  원격 상자에 연결합니다.

  • 답변 # 1

    socat 를 실행할 수있는 한  로컬 및 gateway  (또는 심지어 bash  그리고 cat   gateway 에서 마지막 예를 참조하십시오!) pty를 8 비트로 깨끗하게사용할 수 없으며 ssh를 통해 터널을 설정할 수 있습니다. 다음은 이전을 개선 한 4 가지 예입니다.

    한 번만 작동하는 기본 예

    (포크가 있으면 터널 당 하나의 ssh 연결이 필요하지만 좋지 않습니다). : 를 탈출해야  socat이 exec 명령을 수락하도록 :

    term1 :

    $ socat tcp-listen:12345,reuseaddr exec:'ssh user1@gateway exec socat - tcp\:devbox\:22',nofork
    
    

    term2 :

    $ ssh -p 12345 user2@localhost
    
    

    term1 :

    user1@gateway's password:
    
    

    term2 :

    user2@localhost's password:
    
    
    첫 번째 주소와 두 번째 주소를 바꾸면 소켓을 즉시 사용할 수 있습니다

    socat  책임을 져야하므로 nofork 는 없습니다 :

    term1 :

       $ socat exec:'ssh user1@gateway exec socat - tcp\:devbox\:22' tcp-listen:12345,reuseaddr
        user1@gateway's password:
    
    

    term2 :

       $ ssh -p 12345 user2@localhost
        user2@localhost's password:
    
    
    ControlMaster 사용  ssh

    게이트웨이에 단일 ssh 연결 만 사용하는 동안 분기 할 수 있으므로 일반적인 포트 전달과 비슷한 동작이 발생합니다.

    term1 :

       $ ssh -N -o ControlMaster=yes -o ControlPath=~/mysshcontrolsocket user1@gateway
        user1@gateway's password:
    
    

    term2 :

       $ socat tcp-listen:12345,reuseaddr,fork exec:'ssh -o ControlPath=~/mysshcontrolsocket user1@gateway exec socat - tcp\:devbox\:22'
    
    

    term3 :

       $ ssh -p 12345 user2@localhost
        user2@localhost's password:
    
    
    bash 만 있음  그리고 cat   gateway 에서 사용 가능 bash 를 사용하여 내장 tcp 리디렉션 및 2 개의 반이중 cat  전이중 결과에 대한 명령은 원격 socat 가 필요하지 않습니다.  또는 netcat . 중첩 및 이스케이프 된 따옴표의 여러 레이어 처리는 약간 어색했으며 원격 bash 를 사용하여 더 잘 수행하거나 단순화 할 수 있습니다.  스크립트. 포크로 된 cat 를 갖도록주의를 기울여야합니다  출력 전용 :

    term1 (변경 사항 없음) :

    $ ssh -N -o ControlMaster=yes -o ControlPath=~/mysshcontrolsocket user1@gateway
    user1@gateway's password:
    
    

    term2 :

    $ socat tcp-listen:12345,reuseaddr,fork 'exec:ssh -T -o ControlPath=~/mysshcontrolsocket user1@gateway '\''exec bash -c \'\''"exec 2>/dev/null 8<>/dev/tcp/devbox/22; cat <&8 & cat >&8"\'\'\'
    
    

    term3 :

    $ ssh -p 12345 user2@localhost
    user2@localhost's password:
    
    

  • 답변 # 2

    SSH 터널링은 두 가지 방법으로 수행 할 수 있습니다. 라우터에 SSH로 연결하십시오. 라우터에서 devbox로 SSH. 그런 다음 devbox에서 SSH를 실행하여 포트 전달이 활성화 된 SSH 서버를 실행하는 컴퓨터에 대한 아웃 바운드 연결을 설정하고 원격 포트를 devbox로 다시 전달하십시오. 이 시점에서 다른 ssh 연결을 닫을 수 있습니다.

  • 답변 # 3

    다른 포트에서 실행되도록 외부 sshd를 설정하려고합니다.
    tcpforwarding이 허용되도록 설정을 편집하십시오.

    cp /etc/ssh/sshd{,-second}_config
    
    

    sshd-second_config 편집

    Port 22220
    cp /usr/lib/systemd/system/sshd.service  /etc/systemd/system/sshd-second.service
    
    

    다음과 같은 방법으로 /etc/systemd/system/sshd-second.service를 변경하십시오 :

    Description=OpenSSH server second instance daemon
    ExecStart=/usr/sbin/sshd -D -f /etc/ssh/sshd-second_config $OPTIONS
    
    

    릴리스에 따라 ExecStart 줄이 다를 수 있습니다.

    systemctl daemon-reload
    systemctl enable sshd-second.service --now
    
    

    자세한 내용은 여기를 참조하십시오.
    https://access.redhat.com/solutions/1166283

    이제 원하는 것을 전달할 수 있어야합니다.

  • 이전 osx - macOS에서"find… -delete"와 함께"상대 경로가 안전하지 않을 수 있습니다"오류
  • 다음 command line - stdin을 클립 보드에 보내려면 어떻게합니까?