선택한 파일 및 다운로드 디렉토리가있는 SCP 명령은 각각의 새 파일 또는 디렉토리에 대한 비밀번호를 묻습니다.


9

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"

질문:

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

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

답변:


13

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

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


5

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

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) 훨씬 더 편리합니다.


+1, 좋은 방법 (물론 ssh-keygen & ssh-copy-id는 한 번만 작성해야합니다). 나는 ... 더 안전하다고 말하고 싶지만 단지 당신이 할 경우 반드시 민간 부분은 항상 쉬운 일이 아닙니다 해당 사용자 ...을 제외하고 누구나 "도달"입니다.
Olivier Dulac

@OlivierDulac 무슨 뜻인가요? 는 id.rsa600기본적으로 권한을하고 ssh그렇지 않은 경우도 작동하지 않습니다. 이것은 누구에게나 안전하지만 암호 root가 아닌 것은 안전하다는 것을 의미 root합니다.
terdon

암호를 사용하지 않는 액세스를 설정하는 사람들이 개인 키가 안전한 환경에 있고 읽을 수 없거나 공유하지 않는 등의 사실을 고려할 수 있도록이 주석을 추가하려고했습니다. (사람에 액세스 할 공유 /시키는 개인 키가 가질 수있는 모든 의미를 알 수 없습니다 요청으로 즉, 그것은이 밖으로을 가리 키도록 부드러운 방법)
올리비에 Dulac

@OlivierDulac 아, 충분합니다. 나는 1) 사용할 때 자동으로 발생 ssh-keygen하고 2) ssh / scp가 파일을 읽을 수 있는지 불평하고 암호를 요구하기 때문에 언급 할 가치가 있다고 생각하지 않았습니다 . 어쨌든 적어도 리눅스에서는.
terdon

4

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/
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.