파일을 다른 노드로 보내려는 원격 노드가 두 개 있습니다.
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.10가 2222 포트가 아닌 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 연결에 대한 기본값과 다른 포트를 사용하는 경우 지원되지 않는다고 생각합니다.
코멘트
답변
간단한 원격-원격 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>
~/.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에 연결),하지만 보유한 호스트 수에 따라 불편할 수 있습니다.