mymachine
공용 IP가 있는 서버를 통해 개인 NAT 네트워크의 서버 에서 파일을 복사하는 방법을 찾아야 합니다 . NAT 뒤에 있는 시스템에는 인증서만 있으므로 인증서를 통해 전달해야 합니다.priv-server
pub-server
priv-server
user@mymachine
mymachine
pub-server
priv-server
따라서 단 하나의 명령으로 SSH를 통해 로그인하려면 다음을 사용합니다.
$ ssh -tA user@pub-server 'ssh user@priv-server'
——매우 잘 작동합니다. 인증서는 via에서 전달되며 mymachine
모든 것이 잘 설정되었습니다.priv-server
pub-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 전달 체인을 처리하는 방법을 궁금해하는 대신 문제를 분리하세요.
각 호스트에 투명하게 액세스하도록 시스템을 구성하십시오. 이는 귀하의 작업에서 단 한 번만 수행됩니다.
~/.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
가능하다면 인증이 완전히 투명하도록 키 인증과 프록시 전달을 설정하세요. 그렇지 않은 경우 일부 호스트에서는 대화형으로 인증해야 하며 세션당 한 번만 인증하거나 네트워크 장애가 발생한 후에만 인증하면 됩니다. 기본 연결을 엽니다.
ssh -Nf priv-server
일반 통화
ssh
(또는scp
,sftp
,sshfs
등rsync
).