SSH를 사용하여 인증서 전달을 통해 터널을 통해 파일 복사

SSH를 사용하여 인증서 전달을 통해 터널을 통해 파일 복사

mymachine공용 IP가 있는 서버를 통해 개인 NAT 네트워크의 서버 에서 파일을 복사하는 방법을 찾아야 합니다 . NAT 뒤에 있는 시스템에는 인증서만 있으므로 인증서를 통해 전달해야 합니다.priv-serverpub-serverpriv-serveruser@mymachinemymachinepub-serverpriv-server

따라서 단 하나의 명령으로 SSH를 통해 로그인하려면 다음을 사용합니다.

$ ssh -tA user@pub-server 'ssh user@priv-server'

——매우 잘 작동합니다. 인증서는 via에서 전달되며 mymachine모든 것이 잘 설정되었습니다.priv-serverpub-server

이제 저는 일반적으로 scp모든 파일 전송 요구에 이것을 사용하지만 모든 터널 정보를 scp.

답변1

cat대신 파일을 로컬로 복사하고 원격 cat > filename명령 으로 파이핑하는 하위 수준 형식을 사용하세요 priv-server.

$ cat file1.txt | ssh -A user@pub-server 'ssh user@priv-server "cat > file1.txt"'

또는 압축:

$ gzip -c file1.txt | ssh -A user@pub-server 'ssh user@priv-server "gunzip -c > file1.txt"'

발췌 man ssh:

-A는 인증 프록시 연결 전달을 활성화합니다. 이는 구성 파일에서 호스트별로 지정할 수도 있습니다.

-t는 의사 tty 할당을 강제합니다. 이는 원격 컴퓨터에서 임의의 화면 기반 프로그램을 실행하는 데 사용할 수 있으며, 이는 예를 들어 메뉴 서비스를 구현할 때 유용합니다. 여러 -t 옵션은 ssh에 로컬 tty가 없더라도 tty 할당을 강제합니다.


처음에는 답을 몰랐는데, 잠을 잘 자고 이 질문을 쓴 후에 원래 시도했던 명령에 문제가 있다는 것을 발견하고 수정했더니 작동했습니다. 하지만 이것이 유용한 것 같아서 답변을 공유하기로 결정했습니다.

답변2

네이티브를 사용하면 쉽습니다.sshfs이것은 최근에 추가되었습니다.

설치하다sudo apt-get install sshfs

sshfs -ttA user@pub-server ssh user@priv-server

이것은 마법을 발휘할 것입니다.

자세한 내용은 여기를 참조하세요리눅스 매거진

답변3

복잡한 SSH 전달 체인을 처리하는 방법을 궁금해하는 대신 문제를 분리하세요.

  1. 각 호스트에 투명하게 액세스하도록 시스템을 구성하십시오. 이는 귀하의 작업에서 단 한 번만 수행됩니다.~/.ssh/config문서.

    SSH 가르치기한 머신을 다른 머신의 프록시로 사용, 을 선언합니다 ProxyCommand.

    Host priv-server
    User user
    ProxyCommand ssh -W %h:%p -t user@pub-server
    

    반품연결 공유 활성화. 이를 통해 여러 클라이언트 인스턴스가 동일한 채널을 사용할 수 있으므로 연결 설정 시간이 절약됩니다. 맨 위에 .ssh/config(모든 줄 앞 Host) 추가

    ControlMaster auto
    ControlPath ~/.ssh/control:%h:%p:%r
    
  2. 가능하다면 인증이 완전히 투명하도록 키 인증과 프록시 전달을 설정하세요. 그렇지 않은 경우 일부 호스트에서는 대화형으로 인증해야 하며 세션당 한 번만 인증하거나 네트워크 장애가 발생한 후에만 인증하면 됩니다. 기본 연결을 엽니다.

    ssh -Nf priv-server
    
  3. 일반 통화 ssh(또는 scp, sftp, sshfsrsync).

관련 정보