원격 서버의 scp 포트를 지정하는 방법은 무엇입니까?

파일을 다른 노드로 보내려는 원격 노드가 두 개 있습니다.

scp remote1:~/testSCP [email protected]:~/ 

로컬 컴퓨터에 ~/ssh/config가 설정되어 있으므로 기본적으로 포트 2222를 사용하고 있습니다.

하지만 remote1 “의 기본 ssh 포트는 포트 2222 대신 ssh 구성에서 22로 설정되어 있습니다. ssh를 통한 외부 연결, 기본적으로 포트 22를 사용합니다.

작동하지 않는 다음을 시도했습니다.

scp -P 2222 remote1:~/testSCP [email protected]:~/ 

또한 다음을 시도했지만 작동하지 않았습니다.

scp remote1:~/testSCP -P 2222 [email protected]:~/ 

둘 다 다음 오류가 발생했습니다.

ssh: connect to host 10.0.1.10 port 22: Connection refused lost connection 

10.0.1.102222 포트가 아닌 2222 포트를 사용하기 때문에 사실입니다. div id = “0a48858961″>

.

iv id = “에 파일을 보내려고 할 때 2222 포트를 사용하도록 remote1을 지정하려면 어떻게해야합니까? da7b a97dd6 “>

(remote2) from remote1?

업데이트

시도한 후

 scp -3 remote1:~/testSCP [email protected]:~/ 

이상하게 행동합니다. 암호가 정확하더라도 다음과 같은 출력이 표시됩니다.

[email protected]"s password: [email protected]"s password: Permission denied, please try again. [email protected]"s password: Permission denied, please try again. [email protected]"s password: 

아직 키없는 인증을 활성화하지 않았습니다.

New Update

여러 가지 방법으로 시도한 후, 내 로컬 호스트에서 ssh를 통해 remote1에 로그인 한 다음 remote1에서 remote2로 scp하여 스크립트에서 수행 할 수있었습니다. 그러나 이것은 내 질문에 대답하지 않습니다. 내 로컬 컴퓨터에서 직접 수행 한 다음 두 인스턴스간에 파일을 전송하려고했는데, 두 인스턴스 “ssh 데몬이 ssh 연결에 대한 기본값과 다른 포트를 사용하는 경우 지원되지 않는다고 생각합니다.

코멘트

  • stackoverflow.com/questions/10341032/ … 도움이 될 수 있습니다
  • 내 질문에서 언급 한대로 시도해 보았습니다. 저에게는 작동하지 않는 것 같았습니다.
  • localhost가 포트 22를 수신하고 있지만 ssh 구성에서는 remote1에서 remote2까지 모두 지정되었습니다. 예, 저는 ~/.ssh/config를 의미했습니다. 원격 1 및 원격에서 ~ / .ssh / config의 기본 포트가 변경되지 않았으므로 기본 포트 22로 변경되었습니다. 편집 할 수 있지만 매번 모든 ssh 구성을 편집하는 대신 한 줄짜리를 사용하고 싶습니다.
  • 좋습니다. ' 질문을 편집하는 것이 좋습니다. 추가 할 수 있지만 ' 파일. 그런 다음 ssh 원격 호스트에 하나로 연결하고 거기에서 간단한 scp를 발행하거나 다음과 같이 한 줄로 수행 할 수 있습니다. ssh -t -p <remote1 port> user1@remote1 'scp -P <remote2 port> user2@remote2:/source/path /dest/path'. 또한 ' config 파일을 한 번에 편집 할 필요가 없습니다. 각 호스트에 대해 한 번만 (예 : 포트 설정 remote1에서 remote2에 연결),하지만 보유한 호스트 수에 따라 불편할 수 있습니다.
  • 예, 귀하의 질문에 대한 답변입니다. " 아니요 " 답변이며 다음과 같은 경우에도 답변입니다. 당신이 좋아하든 싫든.

답변

간단한 원격-원격 scp로는 그렇게 할 수 없습니다. [1].

대신에 첫 번째 원격 호스트로 ssh하고 거기에서 포트 인수를 사용하여 scp를 실행합니다.

ssh -p 2222 ruser1@rhost1 scp -P 2222 /rpath/1 ruser2@rhost2:/rpath/2 

scp에서 수행하는 작업을 정확히 수행하려면 ssh<에 -n -x -oClearAllForwardings=yes 옵션을 추가 할 수도 있습니다. / div>, 일반적으로 필요하지 않습니다.


[1] : 최신 버전의 scp는 URI 사양 (포트 포함)을 지원합니다. host:path 대신 -3 옵션 ( “로컬 호스트 통과”)을 사용하는 경우에만 해당됩니다.

따라서

scp -3 -P 2222 ruser1@rhost1:/rpath/1 scp://ruser2@rhost2:2222//rpath/2 

(host[:port]

는 경로의 일부가 아닙니다.-는 user“의 홈 디렉토리에있는 ./file를 참조합니다.

하지만 localhost를 통해 복사하는 것은 느리고 내 경험상 오류를 숨길 것입니다. 예를 들어 다음은 /foo/bar/baz 파일을 만들 수 없더라도 오류 메시지를 인쇄하지 않습니다.

scp -3 localhost:.bashrc localhost:/foo/bar/baz 

나는 이것에 대해 깊이 이해하지 못했습니다. 그냥 피했습니다;-)


누군가이 모든 것에 확신이 없다면 소스 코드 :

void toremote(char *targ, int argc, char **argv) { ... } else if (host) { /* standard remote to remote */ if (tport != -1 && tport != SSH_DEFAULT_PORT) { /* This would require the remote support URIs */ fatal("target port not supported with two " "remote hosts without the -3 option"); } 

tport 변수 만 설정되어 있습니다. scp:// uri를 파싱하여 7.6p1 (2017 년 10 월) 이전 버전에는 존재하지 않습니다.

댓글

  • 이 옵션이 -x -oClearAllForwardings=yes 답변에서 무엇을하는지 설명해 주시겠습니까? 대신 rsync를 사용하여 수행 할 수 있는지도 생각했습니다.
  • -x는 X11 전달 및 -oClear..는 모든 tcp 전달을 비활성화합니다 (이 중 하나가 ~/.ssh/config 또는 /etc/ssh/ssh_config를 통해 강제 된 경우)

li>

  • @RakibFiha rsync의 말 : " 소스와 대상이 모두 원격 일 수는 없습니다 ". 주변에 트릭이 있을지 모르지만 별도의 질문이되어야합니다.
  • 이제 자세한 설명을 통해 깨달았습니다. (y)
  • 답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다