SSH 세션을 사용하여 mysql을 원격 서버로 내보내기

SSH 세션을 사용하여 mysql을 원격 서버로 내보내기

저는 다양한 지역의 많은 서버에서 실행될 유틸리티 셸 스크립트를 생성해야 하는 상황에 직면했습니다. 목적은 로컬 mysql 데이터베이스를 덤프하여 다른 서버에 복사하고 mysql을 원격 서버의 데이터베이스로 내보내는 것입니다.

스크립트는 이 목적을 위해 사용자의 입력을 읽습니다.

문제는 다음보다 많이 열지 말아야 한다는 것입니다.하나동일한 서버에 대한 SSH 연결, 즉 스크립트는 SSH 비밀번호를 여러 번 요청해서는 안 되며, 제가 생각한 솔루션은 결국 적어도 두 번은 요청하게 될 것입니다.

또한 몇 가지 제한 사항이 있습니다. SSH를 변경할 수 없습니다.컨트롤 마스터그리고 서버는 가질 수 없습니다SSH패스설치하다. 또한 일부 서버는 우리 자신의 것이 아니며 내 스크립트가 외부 서버에서 추가 변경 없이 독립형 방법이어야 한다는 요구 사항 때문에 모든 서버에 대해 키를 추가할 수 없습니다.

내가 따른 단계는 다음과 같습니다.

  1. mysqldump를 사용하여 데이터베이스를 내보냅니다.
  2. 그럼 내가SCP.sql 파일을 대상 컴퓨터로 전송합니다.
  3. 나는 mysql 가져오기 루틴을 사용하여 새 .sh 파일을 생성합니다.
  4. 그런 다음 .sh 파일을 전달하고 실행하는 대상 서버에 대한 새 SSH 연결을 엽니다.
  5. SQL 파일과 임시 sh 파일을 정리했습니다.

단 한 번의 세션을 사용하여 이 모든 작업을 수행할 수 있는 이 루틴을 수행하는 더 좋은 방법을 아는 사람이 있습니까?

답변1

제한 사항은 사용자 경험에 더 중점을 두는 것 같기 때문에(비밀번호를 계속해서 입력할 필요가 없음) 여기서 가장 좋은 방법은 대상 파일( .pub폴더의 파일)에 공개 키를 입력하는 것입니다.~/.ssh~/.ssh/authorized_keys

여기의 폴더는 ~소스 및 대상 컴퓨터에 있는 해당 사용자의 홈페이지를 나타냅니다.

에서 승인된 경우 userA@machine1에만 userB@machine2SSH 연결을 열 때 비밀번호가 필요하지 않습니다. 권한 부여는 전적으로 비대칭 암호화를 통해 수행되므로(승인된 사용자만 자신의 개인 키를 보유해야 함) 비밀번호가 필요하지 않습니다.userA@machine1userB@machine2

이렇게 하면 scpssh명령은 여전히 ​​2개의 연결이 되지만(동시에 연결되지 않고 항상 한 번에 하나씩 연결됩니다!) 둘 다 완전히 비밀번호가 없습니다.

서버에 액세스할 수 없는 경우 해당 관리자에게 공개 키 파일을 추가하도록 요청해야 합니다. 관련된 모든 시스템에는 단일 공개 키 파일만 필요합니다.

나는 실제로 거의 똑같은 일( ssh덤프를 트리거한 다음 scpMySQL 데이터베이스를 사용하여 복사하는 것)을 수행하는 cronjob을 직접 실행합니다. 흥미로운 우연의 일치입니다. ;)

관련 정보