Linux 서버 한 대가 여러 서버에 파일 스크립트를 동시에 업로드합니다.

2823 단어
운영 과정에서 여러 서버에 파일을 업로드해야 하는데 FTP 등 소프트웨어를 사용하면 업로드 효율이 느리면rsync를 설정하면 당연히 실현할 수 있기 때문에 본고는 더욱 편리한 방법을 소개한다.
토폴로지 그림을 참고로 그렸습니다.
본고는 위의 그림에서 서버 0(서비스포트)이 서버 1 서버 2 서버 3(클라이언트)에게 동시에 파일을 전송하는 것을 실현하고자 한다.사전 설정 IP 주소:
  • server0:192.168.1.10
  • server1:192.168.1.11
  • server2:192.168.1.12
  • server3:192.168.1.13

  • 서버 간 키 생성

    # ssh-keygen // Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    e0:f6:59:eb:f7:a6:e3:2f:16:39:a2:14:61:31:4a:1f root@LinServ-1

    ssh-keygen은 RSA와 DSA 두 가지 키를 포함하여 인증 키를 생성, 관리, 변환하는 데 사용됩니다.키 유형은 -t 옵션으로 지정할 수 있습니다.지정되지 않으면 기본적으로 SSH-2용 RSA 키를 생성합니다.
    원격 서버로 키 파일 복사
    ssh-copy-id -i /root/.ssh/id_rsa 192.168.1.110
    The authenticity of host '192.168.1.11 (192.168.1.11)' can't be established.
    RSA key fingerprint is 6e:34:d4:8c:fb:72:72:3a:49:7a:14:23:20:59:ea:28.
    Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '192.168.1.11' (RSA) to the list of known hosts.
    [email protected]'s password: ( 192.168.1.11 root )Now try logging into the machine, with "ssh '192.168.2.11'", and check in:
    
      .ssh/authorized_keys
    
    to make sure we haven't added extra keys that you weren't expecting.ssh-copy-id -i /root/.ssh/id_rsa 192.168.1.12 ssh-copy-id -i /root/.ssh/id_rsa 192.168.1.13 

    ssh-copy-id 명령은 로컬 ssh 키 파일을 원격 호스트에 대응하는 계정에 설치할 수 있습니다.

    스크립트

    #!/bin/bashwhile getopts f: OPT;
    do
    	case $OPT in
    		f|+f)
    			files="$OPTARG $files"
    			;;
    		*)
    			echo "usage: `basename $0` [-f hostfile] <from> <to>"
    			exit 2
    	esac
    done
    shift `expr $OPTIND - 1`
    
    if [ "" = "$files" ];
    then
    	echo "usage: `basename $0` [-f hostfile] <from> <to>"
    	exit
    fi
    
    for file in $files
    do
    	if [ ! -f "$file" ];
    	then
    		echo "no hostlist file:$file"
    		exit
    fi
    hosts="$hosts `cat $file`"
    done
    
    for host in $hosts;
    do
    	echo "do $host"
    	scp $1 root@$host:$2
    done

    위의 스크립트 내용을 다음과 같이 저장합니다remotecopy.sh

    호스트 목록 파일 만들기

    vim hostlist192.168.1.11
    192.168.1.12
    192.168.1.13

    각 줄에 IP 주소를 하나씩 적어서 저장합니다.

    서버 192.168.1.0에서 스크립트 실행

    ./remotecopy.sh -f /usr/local/hostlist /usr/local/test /usr/local/
  • /usr/local/hostlist 호스트 목록 파일 경로
  • /usr/local/test 전송해야 할 파일
  • /usr/local/ 클라이언트의 위치로 전송합니다
  • 좋은 웹페이지 즐겨찾기