내 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/