답변:
나는 이것이 늦은 대답이라는 것을 알고 있지만 방금 멋진 방법을 찾았습니다. 기본적으로 Holger Just의 답변이지만 저장된 구성 파일에 있습니다.
~/.ssh/config
local.machine 의 파일에 파일 을 넣어야합니다 (없는 경우 파일 작성).
Host target.machine
User targetuser
HostName target.machine
ProxyCommand ssh proxyuser@proxy.machine nc %h %p 2> /dev/null
파일을 저장 한 후 사용할 수 있습니다
ssh target.machine
당신이 연결하고 싶을 때마다. Scp는 ssh 구성 파일도 존중하므로 작동합니다. 그놈을 사용하고 GUI를 사용하고 싶다면 노틸러스도 마찬가지입니다.
Host proxy.machine
동일한 ~/.ssh/config
파일에 행을 표시하면 도움이 됩니다. 2) 이러한 명령을 중첩 할 수 있는지 여부를 언급합니다 (예 : 클라이언트가 프록시 호스트 1에 연결하여 프록시 호스트 2에 연결). ..target), 3) 무엇을 nc %h %p
의미
하나의 명령으로 수행 할 수 있지만 프록시 시스템에 netcat (nc)가 설치되어 있어야합니다.
ssh -o "ProxyCommand ssh poxyuser@proxy.machine nc -w 1 %h 22" targetuser@target.machine
[편집 : 기계의 순서를 섞었다 ...]
이제 어디서나 요구하지 않고 단일 라이너로이 작업을 수행 할 수 있습니다 nc
.
scp -o "ProxyCommand ssh pcreds@proxy.machine -W %h:%p" tcreds@target.machine:file .
설명
pcreds
및 tcreds
프록시를 대표하고 필요한 경우 (자격 증명을 대상 username
, username:password
등).
내장 된 netcat과 같은 기능 nc
으로 인해 중간 호스트에 대한 요구 사항이 제거 될 수 있습니다. 를 사용 ssh -W host:port
하여 지정된 호스트 및 포트에 터널을 설정하고 stdin / stdout에 연결 한 다음 scp
터널을 통해 실행합니다.
%h
및 %p
에는 ProxyCommand
사용자가 지정하는 대상 호스트 및 포트로 대체됩니다.
더 편리하게 ssh 구성에서 프록시를 구성 할 수 있습니다.
Host target.machine
ProxyCommand ssh pcreds@proxy.machine -W %h:%p
그리고 그때부터 그냥
scp tcreds@target.machine:file .
* OpenSSH 5.4 이후 -2010 년 3 월 출시
-p <portnum>
전과 -W
프록시 포트를 지정하거나 방법
하나의 라이너? 내 머리 꼭대기에서 벗어나지 마십시오. 먼저 프록시를 설정해야하며 scp 자체로는 프록시를 설정할 수 없습니다.
수동으로 할 때 터널에 대한 스크린 세션을 엽니 다.
screen -S tunnel
Screen은 터널을 백그라운드 쉘로 유지하는 데 사용됩니다. 백그라운드에서 터널을 열어두고 싶은 기술을 사용하십시오 (@weeheavy의 답변이 가장 간단합니다). 스크린 세션에서 터널을 시작합니다.
ssh -L 2222:target.machine:22 [user@]proxy.machine
기본적으로 "내 로컬 컴퓨터에서 포트 2222를 열고 localhost : 2222에 충돌하는 모든 연결은 proxy.machine을 통해 target.machine : 22로 프록시됩니다"라고 표시합니다.
ssh 연결과 터널이 설정되면 "Ca d"를 사용하여 화면 세션에서 분리하십시오. 해당 화면 세션으로 돌아가려면 다음을 입력하십시오.screen -raAd tunnel
원래 쉘로 돌아 오면 scp 명령은 다음과 같습니다.
scp -P 2222 localhost:your/file/on/target.machine local/path
localhost 포트 2222는 실제로 target.machine으로가는 터널이라는 것을 기억하십시오.
scp가 ssh처럼 "-o"옵션을 지원하는 것으로 보이지만 프록시 사용자 이름 / 암호를 전달하는 방법을 잘 모르겠습니다.
scp -o "ProxyCommand=nc -X connect -x proxyhost:proxyport %h %p" remote_user@remote_host:remote_path local_path
당신이 얻을 경우 nc: invalid option -- X
참조 https://stackoverflow.com/a/23616021/32453
어때요 :
scp -o "ProxyCommand ssh user@myproxyserver.com nc %h %p" your.filename username@yourdestination.yourdomain.com:/whatever_location
다음과 같은 것을 시도해 볼 수 있습니다.
ssh user@proxy.machine "ssh user@target.machine 'cat > file'" < file
그러나 proxy.machine이 암호를 요구 해야하는 경우 작동하지 않습니다 (SSH가 TTY에 있지 않으므로 askpass가 실패합니다).
파일이 두 개 이상인 경우 tar를 다음과 같이 사용할 수 있습니다 (추천하지 않은 경우 일반적으로 netcat을 사용합니다).
tar cf - file1 file2 folder1/ | ssh user@proxy.machine "ssh user@target.machine 'tar xvf -'"
또 단순한 솔루션은 전송하는 source_file를 으로부터 source_host A를 destination_host 비아 proxy_host :
proxy_server 에 로그인하십시오 .
ssh login@proxy_host
프록시 서버에서 source_file 을 source_host 에서 destination_host 로 전송하십시오 ( \
아래에 표시된 대로이를 한 줄로 생략 하거나 두 줄로 입력 할 수 있음 ).
scp login@source_host:/path_to_source_file \
login@destination_host:/path_to_destination_directory
source_host에서 proxy_host에 로그인 할 때 rsa_key를 사용해야합니다.
나는이 기사를 따르고 나에게 맞는 대답을 찾았다. (위의 답변이 저에게 효과적이지 않기 때문에).
scp
중간 호스트 (일명 점프 호스트)를 통해 파일을
만드는 방법 http://mperdikeas.github.io/networking.html.files/scp-a-file-through-jump-host.html
내 대답은 다음과 같습니다.
scp -oProxyCommand="ssh -W %h:%p {username}@{proxy_IP}" \
{source_file} {remote_username}@{remote_IP}:{remote_file_path}
예:
scp -oProxyCommand="ssh -W %h:%p ubuntu@10.60.10.145" \
archive.gz wise@35.xxx.xxx.xxx:/home/wise/archive.gz
이 답변이 도움이 되길 바랍니다.