태그 보관물: scp

scp

선택한 파일 및 다운로드 디렉토리가있는 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"

질문:

여기서 무슨 일이 일어나고 있습니까?

이것이 정상입니까, 나는 이것이 매우 독특한 행동이라고 생각합니까?



답변

로컬 쉘 (아마 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/

원격 쉘이 로컬 쉘 대신 문자열을 인수로 분할하도록하십시오.


답변

예, 정상입니다. 결과는 명령을 실행하기 전에 쉘이 중괄호를 확장하여 실제로 실행중인 것은

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 연결에 대한 암호를 사용하지 않고. 이것은 i) 실제로 더 안전 하고 ii) 훨씬 더 편리합니다.


답변

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/


답변