파일을 다른 노드로 보내려는 원격 노드가 두 개 있습니다.
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
에 연결),하지만 보유한 호스트 수에 따라 불편할 수 있습니다.