저는 다양한 지역의 많은 서버에서 실행될 유틸리티 셸 스크립트를 생성해야 하는 상황에 직면했습니다. 목적은 로컬 mysql 데이터베이스를 덤프하여 다른 서버에 복사하고 mysql을 원격 서버의 데이터베이스로 내보내는 것입니다.
스크립트는 이 목적을 위해 사용자의 입력을 읽습니다.
문제는 다음보다 많이 열지 말아야 한다는 것입니다.하나동일한 서버에 대한 SSH 연결, 즉 스크립트는 SSH 비밀번호를 여러 번 요청해서는 안 되며, 제가 생각한 솔루션은 결국 적어도 두 번은 요청하게 될 것입니다.
또한 몇 가지 제한 사항이 있습니다. SSH를 변경할 수 없습니다.컨트롤 마스터그리고 서버는 가질 수 없습니다SSH패스설치하다. 또한 일부 서버는 우리 자신의 것이 아니며 내 스크립트가 외부 서버에서 추가 변경 없이 독립형 방법이어야 한다는 요구 사항 때문에 모든 서버에 대해 키를 추가할 수 없습니다.
내가 따른 단계는 다음과 같습니다.
- mysqldump를 사용하여 데이터베이스를 내보냅니다.
- 그럼 내가SCP.sql 파일을 대상 컴퓨터로 전송합니다.
- 나는 mysql 가져오기 루틴을 사용하여 새 .sh 파일을 생성합니다.
- 그런 다음 .sh 파일을 전달하고 실행하는 대상 서버에 대한 새 SSH 연결을 엽니다.
- SQL 파일과 임시 sh 파일을 정리했습니다.
단 한 번의 세션을 사용하여 이 모든 작업을 수행할 수 있는 이 루틴을 수행하는 더 좋은 방법을 아는 사람이 있습니까?
답변1
제한 사항은 사용자 경험에 더 중점을 두는 것 같기 때문에(비밀번호를 계속해서 입력할 필요가 없음) 여기서 가장 좋은 방법은 대상 파일( .pub
폴더의 파일)에 공개 키를 입력하는 것입니다.~/.ssh
~/.ssh/authorized_keys
여기의 폴더는 ~
소스 및 대상 컴퓨터에 있는 해당 사용자의 홈페이지를 나타냅니다.
에서 승인된 경우 userA@machine1
에만 userB@machine2
SSH 연결을 열 때 비밀번호가 필요하지 않습니다. 권한 부여는 전적으로 비대칭 암호화를 통해 수행되므로(승인된 사용자만 자신의 개인 키를 보유해야 함) 비밀번호가 필요하지 않습니다.userA@machine1
userB@machine2
이렇게 하면 scp
및 ssh
명령은 여전히 2개의 연결이 되지만(동시에 연결되지 않고 항상 한 번에 하나씩 연결됩니다!) 둘 다 완전히 비밀번호가 없습니다.
서버에 액세스할 수 없는 경우 해당 관리자에게 공개 키 파일을 추가하도록 요청해야 합니다. 관련된 모든 시스템에는 단일 공개 키 파일만 필요합니다.
나는 실제로 거의 똑같은 일( ssh
덤프를 트리거한 다음 scp
MySQL 데이터베이스를 사용하여 복사하는 것)을 수행하는 cronjob을 직접 실행합니다. 흥미로운 우연의 일치입니다. ;)