원격 서버에서 로컬 컴퓨터로 다운로드하기 위한 bash 스크립트를 개발하려고 합니다. 나는 rsync를 호출하고 매번 비밀번호를 직접 얻는 것을 피해야 합니다. 다음은 작동합니다:
sshpass -p "my remote pw" rsync -r -n -t -v --progress -s myid@remote:/remote_path /local_path
문제는 이것이 얼마나 안전하지 않은가입니다. 더 나은 방법이 있지만 구현하기에 충분히 간단합니까? 감사해요
답변1
적어도 다중 사용자 환경에서는 그다지 안전하지 않습니다. sshpass
문서 에 따르면 :
-p 옵션은 모든 sshpass 옵션 중에서 가장 안전하지 않은 옵션으로 간주되어야 합니다. 모든 시스템 사용자는 간단한 "ps" 명령을 사용하여 명령줄에서 비밀번호를 볼 수 있습니다.
둘째, 스크립트에 비밀번호를 일반 텍스트로 저장하는 문제가 있습니다. 이렇게 하려면 최소한 합리적인 권한(예: 700)을 설정해야 합니다.
가능하다면 키 기반 인증을 사용해야 합니다. 컴퓨터에 저장된 키 파일이 손상될 가능성을 줄이기 위해 여전히 예방 조치를 취해야 하지만, 비밀번호를 공개하기 위해 명령을 실행하는 문제를 제거하고 추가 보너스로 개인 키가 더 강력해질 가능성이 높습니다. 비밀번호보다 해독하기가 더 어렵습니다. 작업을 더 쉽게 하려면 다음 ~/.ssh/config
과 같이 항목을 생성할 수 있습니다.
Host mysite.com
HostName mysite.com
Port 22
User me
IdentityFile ~/.ssh/id_mysite.key
위 항목을 사용하면 명령을 다음과 같이 수정할 수 있습니다.
rsync -r -n -t -v --progress -s mysite.com:/remote_path /local_path
~/.ssh
필수는 아니지만 키가 떠 있을 수 있는 위치를 제한하고 .ssh
디렉터리는 일반적으로 기본적으로 더 엄격한 권한 설정을 갖기 때문에 모든 키를 유지하는 것을 선호합니다 . 또한 각 키 파일에 대한 권한을 600으로 설정했으므로 더 편리하고 ~/.ssh
나중에 잊어버릴 가능성을 줄이기 위해 이를 내부적으로 기본 파일 권한으로 설정하는 것을 고려할 수 있습니다 .chmod
마지막으로 보안을 강화하려면 개인 키를 비밀번호로 보호한 다음 seahorse
로그인할 때 잠금을 해제할 수 있습니다(비밀번호는 암호화되어 있으며 잠금을 해제하는 암호화 키는 로그인에 사용한 비밀번호라고 생각합니다). 이렇게 하면 비밀번호를 입력할 필요가 없습니다. 이와 같은 설정이 몇 가지 있지만 불행히도 어떻게 했는지 기억이 나지 않습니다. 아무튼 이건 좀 많을 수도 있겠네요.