dd, netcat 및 ssh 터널로 디스크 복제를 설정하는 방법은 무엇입니까? ddLinux에서 ssh 암호화 채널을 통해

ddLinux에서 ssh 암호화 채널을 통해 호스트 A에서 B로 netcat을 사용하여 대량으로 (이미지를 사용하는 이미지 디스크 ) 복사하고 싶습니다 .

양쪽에 어떤 명령을 입력해야합니까?



답변

대상에서 sshd가 실행중인 소스에서 대상으로 복사 :

  • dd if=/dev/sda | gzip | ssh root@target 'gzip -d | dd of=/dev/sda'

대상이 sshd를 실행하지 않을 때 sshd_host를 통해 소스에서 대상으로 복사

  • 목표: nc -l -p 62222 | dd of=/dev/sda bs=$((16 * 1024 * 1024))
  • 출처: ssh -L 62222:target:62222 sshd_host &
  • 출처: dd if=/dev/sda | nc -w 3 localhost 62222

    ddif = 가 소스이고 of = 가 대상, bs = 가 블록 크기입니다. 블록 크기가 다르면 성능이 향상 될 수 있습니다. 16은 일반적으로 상당히 합리적인 출발점입니다. count = 를 사용 하여 복사 할 블록 수를 나타낼 수도 있습니다 .

    ncp 는 서비스에 사용할 포트를 나타냅니다. -l 은 서비스를 시작하는 데 사용됩니다. -w 는 종료하기 전에 pipline의 데이터를 기다리는 시간을 설정합니다.

    sshL 은 원격 호스트에서 터널을 설정합니다. 인수의 형식은 local_port:target_host:target_port입니다. 로컬 프로그램 (nc)은 local_port에 연결되며이 연결은 터널링되고 target_host의 target_port에 연결됩니다.

정의 된 옵션은이 옵션에 사용 된 옵션입니다. 자세한 내용은 매뉴얼 페이지를 참조하십시오.

몇 가지 참고 사항 :

  1. LAN 이외의 다른 곳 에서이 작업을 수행하는 경우 gzip 또는 compress로 데이터 스트림을 압축하는 것이 좋습니다. Bzip2도 작동하지만 CPU 시간이 조금 더 걸립니다. 첫 번째는 그 사용법의 예입니다.
  2. 소스 파티션이 마운트되지 않았거나 읽기 전용으로 마운트 된 경우 더 좋습니다. 그렇지 않으면 대상 이미지를 fsck해야합니다.
  3. 시스템 중 하나에 netcat이 있지만 ssh가 아닌 한 netcat은 실제로 필요하지 않습니다. 이 경우는 다음과 같습니다.

source machine dd -> nc -> ssh -> ssh tunnel -> sshd server -> nc on target -> dd

  1. dd는 소스와 대상의 크기가 같은 경우 가장 잘 작동합니다. 그렇지 않으면 목표는 2보다 커야합니다.
  2. ext2 / 3 또는 xfs를 사용하는 경우 덤프 (또는 xfsdump) 및 복원이 더 나은 옵션 일 수 있습니다. 부트 섹터는 처리하지 않지만 대상과 소스의 크기가 다른 경우 작동합니다.

답변

ssh없이 netcat을 사용하려면. 이것이 가장 빠른 방법이고 안전한 방법은 아니라고 가정합니다. 다음과 같이 전체 디스크를 복사하고 복원 할 수 있습니다.
IP 192.168.0.1의 컴퓨터 A

cat /dev/hdb | nc -p 9000

컴퓨터 B에서

nc -l 192.168.0.1 9000 > /dev/hdb

man nc에 따르면 -l 옵션은 다음과 같습니다.

  -l nc가 원격 호스트에 대한 연결을 시작하지 않고 들어오는 연결을 수신하도록 지정하는 데 사용됩니다. 이 옵션을 -p, -s 또는 -z 옵션과 함께 사용 하면 오류가 발생 합니다.


답변

netcat은 필요하지 않습니다.

src 컴퓨터에서 다음을 실행하십시오.

dd if=/dev/sdX bs=1M | ssh root@dstMachine " dd of=/dev/sdY bs=1M"

sdX 및 sdY의 파티션이 마운트되지 않았다고 가정합니다. knoppix 또는 기타 유사한 라이브 배포판으로 두 상자를 모두 부팅 할 수 있습니다 .

DD – 데이터 걸리는 경우 – [제공되지 않은 경우 표준 입력에서 소요]로 데이터를 송신 [제공되지 않는 경우 – 데이터는 표준 출력으로 전송된다]. bs -block size …는 속도를 높여줍니다.

ssh-원격 상자에서 따옴표로 제공된 명령을 실행합니다. ssh의 stdin으로 펌핑 된 모든 데이터는 원격 시스템으로 터널링되고 그곳에서 실행 된 명령에 stdin으로 porovided됩니다.


답변

호스트 A는 이미지를 저장하는 호스트이고 호스트 B는 이미지를 저장하는 호스트입니다.

root@A# dd if=/dev/sda | ssh root@B "dd of=/some/file"

디스크로 복원하면이 두 개만 교체됩니다.


답변

netcat을 사용한 기본 사본 이 여기에 설명되어 있습니다 .

여기에 SSH를 포함 시켜야 할 경우 , 포트 포워딩 을 사용할 수 있습니다 .

-R [bind_address:]port:host:hostport

그러나 전체적으로, 당신은 (netcat없이) 먼저 SSH 전송을 수행 할 수 있습니다.


답변

파일 시스템이 모두 마운트 해제되어 있으면 dd가 잘 작동합니다.

(from server1) dd if=/dev/sda bs=32k | ssh <server2> dd of=/dev/sda bs=32k

미리 호스트 키 인증을 설정해야합니다. 그렇지 않으면 암호 프롬프트로 인해 복사가 실패합니다.

탑재 된 볼륨에서이 작업을 수행하면 결과가 좋지 않습니다.


답변

또는 clonezilla를 사용하여 sshfs를 통해 원격 스토리지를 “마운트”할 수 있습니다.