rsync를 사용할 때 다른 ssh 포트를 지정할 수 있습니까?


366

다음 명령을 시도했습니다.

rsync -rvz --progress --remove-sent-files ./dir user@host:2222/path

SSH가 포트 2222에서 실행 중이지만 rsync는 여전히 포트 22를 사용하려고 시도하지만 경로를 찾지 못하는 것에 대해 불평합니다. 물론 존재하지 않습니다.

비표준 ssh 포트에서 원격 호스트로 재 동기화가 가능한지 알고 싶습니다.

답변:


136

rsync를 실행하는 호스트의 다른 옵션은 ssh 구성 파일에서 포트를 설정하십시오.

cat ~/.ssh/config
Host host
    Port 2222

그런 다음 ssh를 통한 rsync는 포트 2222와 통신합니다.

rsync -rvz --progress --remove-sent-files ./dir user@host:/path

21
이것이 가장 확실한 대답은 아니지만 여전히 좋은 대답입니다. 많은 생각과 타이핑을 줄일 수 있으므로 한두 번 이상 연결하는 모든 호스트에 SSH 구성을 사용하는 것이 좋습니다.
John Hunt

5
실제로, 공정하지만, 단점은 보이지 않는 것입니다. 즉, 잠시 후 ssh 구성 파일에있는 파일을 잊어 버려서 작동 방식을 이해하지 못하거나 동료 중 한 명이 명령을 복사 / 붙여 넣기하여 이유를 이해할 수없는 경우가 있습니다 계정에서 작동하지 않습니다. 그래도 개인적으로 항상 포트 번호를 입력하지 않아도됩니다.
Joao Costa

1
이것은 끔찍하다. 포트 NAT와 완전히 호환되지 않습니다. 당신은 유지 보수 문제가 동일한 IP 주소에 대해 여러 DNS 이름을 갖고 싶어하지 않는
meffect

1
@melfect 농담하니? 나는 rsync이상한 항구에 여러 번 가야하는 사람에게는 가장 위대한 것이라고 부르는 것만 큼 끔찍 하지는 않지만 매번 구문을 잊어 버릴 정도로 충분히 퍼져 있습니다.
Freedom_Ben

1
이렇게하면 쉽게 연결할 수 있지만 해커도 쉽게 사용할 수 있으며 auth.log는 다시 한 번 자동화 된 시도로 가득 차게됩니다. 따라서 포트를 변경하는 지점을 무효화합니다.
forthrin

625

명령 행은 다음과 같아야합니다.

rsync -rvz -e 'ssh -p 2222' --progress ./dir user@host:/path

이것은 잘 작동합니다-새로운 방화벽 규칙이 없어도 항상 사용합니다. SSH 명령 자체는 따옴표로 묶여 있습니다.


8
왜 그런지 궁금합니다 .ssh 바이너리에 대한 별칭을 효과적으로 생성하기 때문에 여전히 숨겨져 있습니다. (하지만 완벽하게 작동했습니다)
jsbueno

1
콜론 기호와 함께 작동user@host:/path
DmitrySandalov

23
명령의 핵심 부분은 -e 'ssh -p 2222'이므로 다른 rsync 매개 변수와 함께 사용할 수 있습니다.
Evan Donovan

2
참고가 SSH 키를 투기해야하는 경우는 -e '는 ssh -i의 mykey -p 2222'과 같은 것을 할 수있는
dranxo

9
왜 --sent-sent-files? 소스 데이터에 위험하다면, 더 잘 언급하십시오 ...
Tiw

14

특정 SSH 포트를 통해 파일을 보내야 할 경우 :

rsync -azP -e "ssh -p PORT_NUMBER" source destination

rsync -azP -e "ssh -p 2121" /path/to/files/source user@remoteip:/path/to/files/destination

3
그리고 이것이 기존 답변에 정확히 무엇이 추가됩니까?
Chris Maes

형식과 예제를보십시오. 나는 여기서 물건을 단순화했다.
Techie

4
두 가지 옵션 옵션을 제거했지만 본질적으로 귀하의 답변은 허용 된 옵션과 정확히 동일합니다.
Chris Maes

2
더 간단하고 형식화되었습니다. 새로운 학습자들이 이해하기 쉽습니다. 그건 그렇고 이유없이 다운 투표에 감사드립니다
Techie


2

약간의 주제는 아니지만 누군가를 도울 수 있습니다. 비밀번호와 포트를 전달해야하는 경우 sshpass패키지를 사용하는 것이 좋습니다 . 명령 행 명령은 다음과 같습니다. sshpass -p "password" rsync -avzh -e 'ssh -p PORT312' root@192.xx.xxx.xxx:/dir_on_host/


키보드 상호 작용이 데이터 스트림과 혼동되어 프로토콜이 손상 되었기 때문에 작동하지 않습니다.
Evi1M4chine

2

Mike Hike Hostetler 사이트 에서이 솔루션을 찾았 습니다.

# rsync -avz -e "ssh -p $portNumber" user@remoteip:/path/to/files/ /local/path/

3
그리고 이것이 기존 답변에 정확히 무엇이 추가됩니까?
Chris Maes

좋은 것은 완벽하게 작동합니다. 감사합니다 :)
Sammu Sundar 2018 년

2

올바른 구문은 Rsync에게 SSH를 사용하여 원격으로 보안 터널을 만든 다음 localhost를 통해 연결하는 사용자 정의 SSH 명령 (-p 2222 추가)을 사용하도록 지시하는 것입니다.

rsync -rvz --progress --remove-sent-files -e "ssh -p 2222"./dir user @ host / path

Rsync는 안전하지 않은 TCP 포트 873에서 데몬으로 실행됩니다.

Rsync man에서 :

푸시 : rsync [OPTION ...] SRC ... [USER @] HOST : DEST

사람들이 이것을 시도하도록 오도하는 것은 무엇입니까?

rsync -rvz --progress --remove-sent-files ./dir user @ host : 2222 / path

그러나 포트 2222의 Rsync 데몬에 연결하도록 지시합니다 .


다른 답변은 포트 873을 언급하지 않았다
kevinf

문제는 포트 2222를 통해 ssh로 실행하는 방법이었습니다. rsync가 필요한지 아닌지는 다른 이야기입니다.
Dan Steingart

@ DanSteingart 답변을 업데이트했습니다. 지금 더 도움이됩니까?
kevinf

-3

다른 포트에서 ssh를 통해 연결하기 위해 rsync를 얻을 수 없었지만 iptables를 통해 원하는 컴퓨터로 ssh 연결을 리디렉션 할 수있었습니다. 이것은 내가 찾고있는 해결책이 아니지만 내 문제를 해결했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.