![BASH 스크립트에 비밀번호를 추가하는 방법](https://linux55.com/image/70293/BASH%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%20%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8%EB%A5%BC%20%EC%B6%94%EA%B0%80%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
다음 BASH 명령을 실행하는 스크립트를 만들고 싶습니다.
mysqldump -u [username] -p [db_name] > [path to backup file]
그러면 백업 파일이 생성됩니다. BASH에서 이 프로그램을 실행하면 계속하기 전에 비밀번호를 묻는 메시지가 나타납니다.
비밀번호 입력을 자동화하기 위해 BASH 스크립트에서 이 스크립트를 어떻게 만들 수 있습니까?
이 일이 안전하게 이루어질 수 있습니까?
답변1
여기서 가장 좋은 방법은 다음을 수행하는 것입니다.
mysqldump --defaults-extra-file=/path/to/auth.cnf ...
다음과 같이 보입니다 auth.cnf
:
[client]
user=the-user
password=the-password
그런 다음 스크립트를 실행하는 사람만 파일을 읽을 수 있는지 확인하십시오. 스크립트 자체는 누구나 읽을 수 있습니다.
답변2
시스템이 손상될 경우를 대비해 모든 파일에 일반 텍스트 비밀번호를 유지하는 것은 항상 나쁜 생각입니다. 때로는 피할 수 없는 경우도 있습니다. 이 작업을 "안전하게" 만들려면 이 활동을 매우 제한된 수의 사용자로 제한하고 이러한 민감한 옵션을 기본 파일에 유지해야 합니다.
문제를 구체적으로 해결하려면 mysql
매뉴얼 페이지에서 다음을 수행하십시오.
If you use the short option form (-p), you cannot have a space
between the option and the password. If you omit the password
value following the --password or -p option on the command line,
mysql prompts for one.
이 문제를 해결하려면 다음을 실행해야 합니다.
mysqldump -u [username] -p[password] [db_name] > [path to backup file]
또는
mysqldump -u [username] -password=[password] [db_name] > [path to backup file]
답변3
옵션이 제가 기억하는 것과 동일하다면 다음을 수행할 수 있어야 합니다.
mysqldump -opt [db_name] -u [사용자 이름] -p [비밀번호] > [백업 파일 경로]
-p와 실제 비밀번호 사이에 공백을 추가하지 마십시오.
답변4
Stephane의 답변은 mysql 사례에 대한 최선의 접근 방식입니다. 그리고 대부분의 경우 프로그램의 "자체" 방식을 사용하는 것이 가장 좋습니다.
그러나 질문의 Bash 부분에 대답하려면 다음을 수행하십시오.
mysqldump -u joe -p <<<"joe's pasword" > /path/to/backup/file
또는 (덜 안전함)
mysqldump -u joe -p </path/to/file/with/joes/password > /path/to/backup/file
이 방법은 단순히 문자열을 mysqldump 프로세스에 전달합니다. 다음과 같은 경우 작동합니다.
비밀번호만 물어보는데,
즉. 다른 프롬프트는 없습니다(대부분의 명령은 예측 가능합니다).
대화형이 아니더라도 STDIN의 비밀번호를 허용합니다.
즉. 프로그램은 의도적으로 입력 파일이 대화형 터미널인지 확인하고 중단할 수 있습니다.