한 서버에서 다른 서버로 데이터베이스를 복사하려고 합니다. 다음 명령을 사용해 보았지만 SSH 비밀번호 입력과 관련이 있습니다. 한 서버의 비밀번호를 입력하면 다른 서버에 대해 불만이 표시되고 그 반대의 경우도 마찬가지입니다.
ssh root@server1 mysqldump --databases db | ssh root@server2 mysql
덤프를 내 컴퓨터에 임시로 저장하여 전송을 완료했는데, 이를 작동시킬 수 있는 방법이 있는지 궁금했습니다.
답변1
비밀번호 프롬프트는 번거롭습니다. SSH를 더욱 유용하게 만드는 방법은 인증에 키를 사용하고 ssh-agent
세션당 한 번(선택적 제한 시간 포함) 키를 등록할 수 있는 키 에이전트( )를 실행하는 것입니다. 그런 다음 직접 실행할 수 있습니다.
ssh root@server1 mysqldump --databases db | ssh root@server2 mysql
server1에서 server2에 로그인할 수 있으면 두 서버 간에 데이터가 직접 전송되어야 합니다.
ssh root@server1 'mysqldump --databases db | ssh root@server2 mysql'
(또는 server2에서 server1에 로그인할 수 있는 경우 그 반대). 마찬가지로 인증을 위한 SSH 키가 있습니다. 로컬 컴퓨터에서 server1에 대한 액세스를 제공하는 SSH 개인 키와 server2에 대한 액세스를 제공하는 SSH 개인 키를 등록하십시오. 프록시 전달이 활성화되어 있는지 확인하십시오( AgentForwarding yes
) ~/.ssh/config
.
꼭 비밀번호를 입력해야 한다면 가장 좋은 방법은 먼저 연결을 설정한 다음 데이터를 전송하는 것입니다. 새로운 OpenSSH 버전을 사용하면 마스터 연결을 열고 이를 통해 슬레이브 연결을 라우팅할 수 있습니다. 슬레이브 연결에는 추가 인증이 필요하지 않습니다. 당신의 ~/.ssh/config
:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
두 서버에 대한 기본 연결을 시작합니다.
ssh -N -M root@server1 &
ssh -N -M root@server2 &
그런 다음 다음을 복사하세요.
ssh root@server1 mysqldump --databases db | ssh root@server2 mysql
그 후 더 이상 필요하지 않은 경우 기본 연결을 종료할 수 있습니다.
ssh -O exit root@server1
ssh -O exit root@server2
답변2
가장 효율적인 방법은 mysqldump
서버에서 파이프하는 것입니다. 이 명령 목록과 비슷합니다 ...
ssh root@server1 'mysqldump --databases db | ssh root@server2 mysql'
일부 구성 관련 이유로 인해 원격 시스템에서 파이프할 수 없는 경우 다음 명령 목록을 실행할 수 있습니다.
ssh root@server1 'mysqldump db' | ssh root@server2 'mysql db'
내가 만약강요된후자를 수행하려면 pair 를 고려하겠습니다 mysqldump
. 비록 이것이 첫 번째 선택이 되어서는 안 되지만 이것이 전송 시간을 절약해 준다고 믿습니다.
ssh root@server1 'mysqldump db | gzip -f' | ssh root@server2 'gzip -d | mysql db'
마지막 예는 100% 정확하지 않을 수도 있습니다. 단지 작동할 것이라고 가정했을 뿐입니다.
답변3
부득이하게 할 경우ㅏ도착하다두번째프록시와 유사한 시스템에는 마법의 총알이 없습니다. 컴퓨터나 중개 서버로 프록시를 사용해야 합니다.
이는 짜증스러울 수 있지만 ssh는 매우 유연하고 투명하게 만들 수 있습니다. nc
에이전트에 프로그램을 설치했다면, 에이전트에 추가할 수 있습니다 ~/.ssh/config
.ㅏ:
Host B
ProxyCommand ssh -q my_proxy nc -q0 B 22
그 후에는 다음을 수행할 수 있습니다.ㅏ, 클래식 ssh/scp 명령 활성화두번째소속사가 전혀 없는 것 같습니다.
따라서 이 구성을 사용하면 다음을 사용할 수 있습니다.sshfs.
sshfs B: /mnt/B_fs
sshfs를 사용하면 덤프 명령이 다음과 같이 나타날 수 있습니다.
mysqldump --databases db ... > /mnt/B_fs/db.dump
불행하게도 프록시의 대역폭 속도는 향상되지 않습니다. ssh로 할 수 있는 가장 좋은 일은 활성화 Compression
하고 throw하는 것 입니다 CompressionLevel
.
바라보다이 게시물SSH 멀티홉에 대한 자세한 지침.
답변4
핵심 솔루션이 최선의 선택이라고 말했습니다. 그러나 어떤 이유로든 이 작업을 수행할 수 없는 경우 명령줄을 다음과 같이 수정할 수 있습니다.
ssh root@server1 mysqldump --databases db | {sleep 5; ssh root@server2 mysql; }
두 번째 명령을 기다리게 합니다. 5
첫 번째 비밀번호를 입력하는 속도에 따라 조정하세요.
이는 단지 대체 솔루션일 뿐이며 핵심 솔루션이 훨씬 더 좋습니다.