선택한 파일 및 다운로드 디렉터리에 대한 SCP 명령에는 각각의 새 파일 또는 디렉터리에 대한 비밀번호가 필요합니다.

선택한 파일 및 다운로드 디렉터리에 대한 SCP 명령에는 각각의 새 파일 또는 디렉터리에 대한 비밀번호가 필요합니다.

내 Fedora 20 시스템에서는 정기적으로 scp를 사용하는데 이런 현상이 발생한 것은 이번이 두 번째입니다. 이 명령을 실행할 때:

scp -r -P PORT user@host:/home/user/something/{file1,folder1,folder2,folder3,folder4} folder/folder2/

전송하는 모든 파일/디렉토리에 대한 비밀번호를 묻습니다.

user@host's password: "password here"

질문:

여기서 무슨 일이 일어나고 있는 걸까요?

이게 정상인가요? 이 행동을 매우 이상한 행동으로 간주할 수 있습니까?

답변1

로컬 셸(아마도 bash)이 확장 중입니다.

user@host:/home/user/something/{file1,folder1,folder2,folder3,folder4}

입력하다:

user@host:/home/user/something/file1 user@host:/home/user/something/folder1 user@host:/home/user/something/folder2 user@host:/home/user/something/folder3 user@host:/home/user/something/folder4

대신 다음과 같이 할 수 있습니다.

scp -r -P PORT user@host:"/home/user/something/file1 /home/user/something/folder1 /home/user/something/folder2 /home/user/something/folder3 /home/user/something/folder4" folder/folder2/

또는 원격 사용자의 로그인 셸이 bash라는 것을 알고 있는 경우 중괄호 확장을 사용할 수도 있습니다.

scp -r -P PORT user@host:"/home/user/something/{file1,folder1,folder2,folder3,folder4}" folder/folder2/

원격 쉘이 문자열을 로컬 쉘 대신 인수로 분할하도록 합니다.

답변2

예, 이는 정상입니다. 무슨 일이 일어나고 있는지 쉘이 명령을 실행하기 전에 중괄호를 확장하므로 실제로 실행 중인 것은 다음과 같습니다.

scp -r -P PORT user@host:/home/user/something/file1 \ 
               user@host:/home/user/something/folder1 \ 
               user@host:/home/user/something/folder3 \ 
               user@host:/home/user/something/folder4 folder/folder2

기본적으로 scp여러 개의 연결 요청이 나타나므로 각 요청마다 새로운 연결이 열립니다. 일방 통행가장 간단한 방법(@geirha가 제안한 인용문을 사용하는 것이 일회성 작업의 경우 더 간단합니다.) 이 문제에 대한 해결책은 비밀번호 없는 ssh/를 설정하는 것입니다 scp.

$ ssh-keygen 
$ ssh-copy-id -p PORT user@host

ssh이 두 명령을 한 번 실행하고 필요에 따라 프롬프트에 응답하면 비밀번호를 사용 하거나 사용하지 않고 scp향후 모든 SSH 연결을 설정할 수 있습니다 . 이게 나야)실제로는 더 안전하다그리고 ii)많은더욱 편리한.

답변3

scp그리 똑똑하지는 않습니다. 동일한 원격 호스트의 파일에 대해 여러 명령줄 인수가 주어지면 각 인수에 대해 새 연결이 열립니다.

rsync대신에 scp(무엇보다도) 더 똑똑한 를 사용할 수 있습니다 .

rsync -r -e 'ssh -P PORT' user@host:/home/user/something/{file1,folder1,folder2,folder3,folder4} folder/folder2/

또 다른 방법은scp여러 파일을 설명하는 매개변수 전달.

또 다른 접근 방식은 항상 인증할 필요가 없도록 시스템을 설정하는 것입니다. 즐겨,키 인증 설정, 이는 대부분의 시나리오에서 더 편리하고 안전합니다. 또는 또는 추가적으로,연결 공유 설정이므로 세션당 한 번만 인증하면 됩니다. 어쨌든, 매번 사용자 이름과 포트를 지정할 필요가 없도록 별칭을 설정하세요. 당신의 ~/.ssh/config:

ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r

Host nick
HostName real-host-name.example.com
User bob
Port 1234

실행 ssh -Nf nick하여 연결을 열면 모든 후속 연결이 nick기존 연결에 피기백됩니다. 이제 실행할 수 있습니다

scp -r nick:/home/user/something/{file1,folder1,folder2,folder3,folder4} folder/folder2/

관련 정보