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/