두 개의 원격 노드가 있고 한 노드에서 다른 노드로 파일을 보내려고 합니다.
scp remote1:~/testSCP [email protected]:~/
~/ssh/config
포트가 기본적으로 사용되도록 로컬 컴퓨터에 설정 했습니다 2222
.
22
그러나 ssh 구성에서는 remote1의 기본 ssh 포트가 port 대신 port로 설정됩니다 2222
. 따라서 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
port 대신 10.0.1.10
port 가 사용되기 때문에 이는 맞습니다 .2222
22
2222
10.0.1.10
(remote2) 에 파일을 보내려고 할 때 remote1이 사용하는 포트를 어떻게 지정합니까 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:
아직 키리스 인증을 활성화하지 않았습니다.
새로운 업데이트
다양한 방법을 시도한 후 스크립트의 localhost에서 Remote1로 SSH를 통해 연결한 다음 Remote1에서 Remote2로, 그런 다음 Remote1에서 Remote2로 SSH를 통해 연결할 수 있었습니다. 그러나 이것은 내 질문에 대답하지 않습니다. 내 로컬 컴퓨터에서 직접 이 작업을 수행한 다음 두 인스턴스 간에 파일을 전송할 계획입니다. 두 인스턴스의 ssh 데몬이 ssh 연결에 기본 포트가 아닌 다른 포트를 사용하는 경우 이는 지원되지 않는 것 같습니다.
답변1
간단한 원격-원격 scp[1]로는 이 작업을 수행할 수 없습니다.
대신 첫 번째 원격 호스트에 SSH를 통해 연결하고 거기에서 포트 매개변수를 사용하여 scp를 실행하세요.
ssh -p 2222 ruser1@rhost1 scp -P 2222 /rpath/1 ruser2@rhost2:/rpath/2
scp
현재 수행 중인 작업을 정확하게 수행하려는 경우 -n -x -oClearAllForwardings=yes
옵션을 추가 할 수도 있지만 ssh
일반적으로 필요하지는 않습니다.
[1]: 최신 버전은 scp
대신 uri 사양(포트 포함)을 지원 하지만 옵션("localhost를 통해")을 host:path
사용하는 경우에만 지원됩니다.-3
그래서 당신은 아마 사용할 수 있습니다
scp -3 -P 2222 ruser1@rhost1:/rpath/1 scp://ruser2@rhost2:2222//rpath/2
( /
다음은 host[:port]
경로의 일부가 아닙니다. 홈 디렉터리에서 참조됩니다 scp://user@host/file
.)./file
user
그러나 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
변수는 uri 구문 분석을 통해서만 설정되며 scp://
7.6p1(2017년 10월) 이전 버전에는 전혀 존재하지 않습니다.
답변2
효과적인 방법 중 하나는 별칭을 설정하는 것입니다.~/.ssh/config
예를 들어,
Host destination
Hostname 10.0.1.10
User remote2
Port 2222
이제 이를 "호스트 이름"으로 사용할 수 있으므로 destination
실제 명령에서 호스트 이름/사용자/포트를 지정할 필요가 없습니다.