저는 세 개의 Linux 서버를 가지고 있습니다:
1. 데이터베이스 서버 10.10.10.10
2. 애플리케이션 서버 10.10.10.52
3. 백업 서버 10.10.10.55
데이터베이스와 애플리케이션 서버 사이에는 직접 연결이 있고 애플리케이션과 백업 서버 사이에는 직접 연결이 있지만 데이터베이스와 백업 서버 사이에는 연결이 없습니다.
데이터베이스 서버에 파일이 있는데 백업 서버에 복사하고 싶은데 어떻게 해야 할지 모르겠습니다.
누구든지 아이디어가 있으면 나와 공유해 주세요.
미리 감사드립니다.
답변1
다음과 같이 (1)만 (2)에 액세스할 수 있으므로 SSH를 사용하여 호스트2(2)에 로그인하여 호스트1(1)에서 호스트(3)까지 터널을 설정해야 합니다.
host1$ ssh -L 9999:host3:22 user@host2
그러면 호스트 3, localhost의 SSH 포트(22), 포트 9999/TCP에 대한 터널이 생성됩니다.
그런 다음 다른 창에서 다음과 같이 호스트 3에 있는 사용자와 함께 호스트 1에서 scp합니다.
host1$ scp -P 9999 file_to_copy user@localhost:/user/file_to_copy
이와 관련하여 파일 전송은 호스트 1에서 호스트 3으로 직접 수행되는 반면, 호스트 2는 단순히 SSH 터널을 통해 연결을 전달합니다. 첫 번째 SSH에서 로그아웃하면 터널이 닫힙니다.
답변2
가정: HostA의 scp /tmp/xxx HostB:/tmp/xxx 및 HostB의 scp /tmp/xxx HostC:/tmp/xxx
어떤 경우에는 전통적으로 ssh/scp 터널을 사용하여 HostA에서 HostC로 복사합니다. 네트워크도 터널링이 비활성화되어 있다고 가정합니다("직접 연결"에 대해서도 질문했다고 가정).
다음과 같은 스크립트를 작성할 수 있습니다. HostB에서 실행하세요.
#!/usr/bin/bash -e
# assumes you have PKI setup so you only have to enter your pass-phrase at most once
file=$1
scp Hosta:$file $file
scp $file HostC:$file
rm $file
생각 후 : HostB에서
scp HostA:$file HostC:$file
답변3
에 대한 대안Rui F Ribeiro가 제안한 솔루션ProxyCommand
SSH 구성 파일(일반적으로 ~/.ssh/config
)에 설정됩니다.
host <remote>
ProxyCommand ssh <gateway_user>@<gateway> nc <host> 22
User <host_user>
그런 다음 간단히 다음을 사용할 수 있습니다.
scp /local/path/to/file <remote>:/remote/path/to/file
scp <remote>:/remote/path/to/file /local/path/to/file
SSH 구성을 설정한 후에는 원격 서버에 직접 연결하는 것처럼 원활하게 파일을 복사할 수 있습니다.