로컬 컴퓨터에서 하나의 명령으로 프록시를 통한 SCP? proxy.machine 및 target.machine이 있습니다. local.machine은 target.machine과

local.machine, proxy.machine 및 target.machine이 있습니다. local.machine은 target.machine과 직접 접촉하지 않지만 proxy.machine을 거쳐야합니다.

target.machine에서 local.machine으로 파일을 scp하고 싶습니다. local.machine의 명령 하나만으로도 가능합니까?



답변

나는 이것이 늦은 대답이라는 것을 알고 있지만 방금 멋진 방법을 찾았습니다. 기본적으로 Holger Just의 답변이지만 저장된 구성 파일에 있습니다.

~/.ssh/configlocal.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를 사용하고 싶다면 노틸러스도 마찬가지입니다.


답변

하나의 명령으로 수행 할 수 있지만 프록시 시스템에 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 .

설명

pcredstcreds프록시를 대표하고 필요한 경우 (자격 증명을 대상 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 월 출시


답변

scp 대신 rsync를 사용하지 않아도 다음과 같은 단일 라이너를 사용할 수 있습니다.

rsync -v --rsh "ssh proxy.machine ssh" target.machine:/remote/file /local/dir/

(프록시 시스템에 비밀번호없이 액세스해야합니다.)


답변

$ ssh -f -N -L <localport>:<target.machine:port> user@proxy.machine
$ scp target-user@local.machine:/remote/file -P <localport> .

실제로 두 명령은 …


답변

하나의 라이너? 내 머리 꼭대기에서 벗어나지 마십시오. 먼저 프록시를 설정해야하며 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