BASH 스크립트에 비밀번호를 추가하는 방법

BASH 스크립트에 비밀번호를 추가하는 방법

다음 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의 비밀번호를 허용합니다.

    즉. 프로그램은 의도적으로 입력 파일이 대화형 터미널인지 확인하고 중단할 수 있습니다.

관련 정보