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

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

두 개의 원격 노드가 있고 한 노드에서 다른 노드로 파일을 보내려고 합니다.

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.10port 가 사용되기 때문에 이는 맞습니다 .222222

222210.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.)./fileuser

그러나 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실제 명령에서 호스트 이름/사용자/포트를 지정할 필요가 없습니다.

관련 정보