어떻게 하면 많은 결과를 얻을 수 있나요?
scp ~/here/is/one me@remote:~/where/it/goes
scp ~/yet/another me@remote:~/the/second/place
scp ~/the/number/three/one me@remote:~/foo/bar/qux
원격 사용자의 비밀번호는 한 번만 입력하면 되나요?
답변1
OpenSSH를 사용하면 처음 실행하는 "주 모드"를 사용할 수 있으며 ssh
연결을 설정하고 인증한 다음 연결을 활성 상태로 유지하고 추가 지침을 기다리는 동안 백그라운드에 배치됩니다. 이 배경 연결은UNIX 소켓 이름 지정이는 ssh
의도적으로 자체 상황별 프로세스에 의해 생성됩니다. 따라서 scp
최종적으로 명시적으로 닫을 때까지 자체적으로 새 연결을 설정하는 대신 이러한 백그라운드 연결을 사용하도록 명령에 지시합니다.
bgconn
예를 들어, 다음 예에서는 현재 디렉터리에 있는 임의로 이름이 지정된 파일의 UNIX 소켓을 통해 백그라운드 연결이 사용됩니다 .
ssh -fMNS bgconn -o ControlPersist=yes me@remote
scp -o ControlPath=bgconn ~/here/is/one me@remote:~/where/it/goes
scp -o ControlPath=bgconn ~/yet/another me@remote:~/the/second/place
scp -o ControlPath=bgconn ~/the/number/three/one me@remote:~/foo/bar/qux
ssh -S bgconn -O exit -
첫 번째는 ssh
연결을 설정하는 반면, 마지막은 단순히 첫 번째에 연결을 종료하고 종료하도록 지시하며, 이 경우 bgconn
소켓 파일도 삭제됩니다. 그 사이의 명령은 이름이 지정된 UNIX 소켓(따라서 설정된 연결)에 해당 파일을 복사하는 데 사용되도록 지시합니다. 위의 예에서와 같이 이름이 지정된 소켓을 사용하도록 지시한 경우 동일한 백그라운드 연결을 사용하여 원하는 만큼 많은 명령을 scp
실행할 수 있습니다 .ssh
sftp
ssh
특히 첫 번째 옵션에서 사용된 옵션은 다음과 같습니다.
-f
인증 성공 후ssh
백그라운드 로 전환-M
마스터 모드 활성화-N
원격 명령을 요청하지 마십시오. 그렇지 않으면 기본 동작(이 경우 의미 없음) 원격 쉘로 실행됩니다.-S
파일 시스템에 생성될 UNIX 소켓 이름의 경로-o ControlPersist=yes
명시적으로 닫힐 때까지 백그라운드ssh
프로세스가 지속되도록 합니다. 그렇지 않으면 첫 번째 작업이 끝날 때 자체적으로 종료됩니다.
OpenSSH "기본 모드" 작동 방식:
SSH 프로토콜 자체는 여러소위 "채널"SSH 연결을 공유합니다. 이러한 각 채널은 터미널 세션, 원격 명령, 포트 전달 등과 같이 SSH에서 지원하는 서비스 중 하나를 나타냅니다. 이는 기본적으로 포트 전달을 요청할 수 있는 기반입니다.~와 함께일반적인 터미널 세션.
OpenSSH의 클라이언트 명령은 ssh
위에서 설명한 대로 "메인 모드"를 통해 연결 공유 기능을 외부 애플리케이션으로 정중하게 내보냅니다. 보다공식적인 설명은 여기에 있습니다.
답변2
SSH 제품군에서는 비밀번호를 여러 번 입력하지 않으려면 SSH 키를 사용해야 합니다.
이는 다른 호스트에 의해 생성되고 ssh-keygen
다른 호스트로 전송될 수 있습니다 ssh-copy-id
(공개 키만 전송됨).
키가 암호화되지 않은 경우 비밀번호를 묻지 않습니다.
파일의 비공개 상태(공격...)를 신뢰하지 않는 경우 키를 암호화할 수 있습니다 ssh-keygen -p
.
암호화 키를 사용할 때 비밀번호를 묻는 메시지가 표시되지만 활성화할 수 있습니다 eval $(ssh-agent)
. 에이전트는 사용자가 입력하는 대로 키를 메모리에 저장할 수 있습니다 ssh-add
. 그런 다음 비밀번호는 한 번만 요청되며 ssh-add
해당 키는 ssh/scp에 사용할 수 있습니다.
더 이상 프록시가 필요하지 않으면 ssh-agent -k
.