홈페이지 » 어떻게 » 셸 스크립트를 사용하여 원격 서버의 동일한 하위 디렉터리에 파일 업로드

    셸 스크립트를 사용하여 원격 서버의 동일한 하위 디렉터리에 파일 업로드

    웹 개발자를위한 매우 일반적인 작업은 개발 상자의 하위 디렉토리에서 원격 서버의 동일한 하위 디렉토리로 단일 파일을 업로드하는 것입니다. 불행하게도, 이것은 항상 두 서버의 디렉토리를 전환하는 성가신 수작업 프로세스로 끝나며 많은 시간을 낭비합니다.

    그래서 필자는 보안 파일 복사를 위해 scp를 사용하여 쉘 스크립트를 작성하여 이것을 자동화했습니다. (중요한 사이드 노트 : ftp는 끔찍하게 안전하지 않고 대신 WinSCP를 사용하십시오)

    해결해야 할 주요 문제는 내 개발 컴퓨터에 WordPress를 설치할 때 내 서버에 설치하는 것과 다른 기본 디렉토리가 있다는 것입니다. 내 개발 컴퓨터에서는 / var / www이고, 내 서버에는 / var / www / howtogeek / docs /와 같은 것이 더 있습니다. 나는 스크립트의 시작 부분에서 변수들을 다음과 같이 옮기기로 결정했다.

    [email protected]
    RDIR = / var / www / howtogeek / docs
    LDIR = "\ / var \ / www"

    스크립트의 로컬 디렉토리 (LDIR)에는 각 경로 앞 /에 \가 있습니다. 이것은 스크립트의 뒷부분에서 sed 명령으로 이것을 전달하기 때문에이 값들을 벗어나야합니다. 이 주변에는 다른 방법이있을 것이라고 확신하지만, 그 사실을 모르고 있습니다..

    다음으로 자동화 된 ssh 로그인을 설정합니다. 이렇게하려면 먼저 다음과 같이 ssh keygen 유틸리티를 실행해야합니다.

    ssh-keygen -t rsa

    그런 다음 ~ / .ssh / id_rsa.pub 파일을 원격 서버의 ~ / .ssh / authorized_keys 파일에 복사해야합니다. ~ / .ssh 디렉토리가 원격 서버에 이미 생성되어 있으면 (확인하고 싶을 수도 있음)이 명령을 실행하여 키를 복사 할 수 있습니다.

    cat ~ / .ssh / id_rsa.pub | ssh user @ hostname 'cat >> .ssh / authorized_keys'

    이제 우리는 자동 ssh 로그인을 얻었습니다. 그러면 암호없이 scp 유틸리티를 사용할 수 있습니다. 이제 스크립트에서 사용할 scp 명령을 살펴 보겠습니다.

    scp $ 1 $ SSHSERVER : $ RDIR'pwd | sed "s / $ LDIR //" '/'echo $ 1 | sed 's /.*\/// "

    $ 1은 업로드하려는 파일 이름에 대한 스크립트에 전달할 매개 변수입니다. $ SSHSERVER와 $ RDIR은 user @ hostname과 앞의 원격 경로를 설정하기 위해 스크립트의 시작 부분에 설정할 변수입니다.

    pwd | sed로 시작하는 첫 번째 블록은 현재 디렉토리 경로를 사용하고 원격 서버와 일치하지 않는 경로의 이전 부분을 제거하지만 나머지 경로는 남겨 둡니다. 예를 들어, 명령을 실행할 때 / var / www / wp-content /에 있다면 sed 블록은 LDIR 변수를 기반으로 / var / www를 제거하지만 / wp-content / 부분은 그대로 둡니다.

    두 번째 블록은 스크립트에 전달 된 파일 이름 앞의 전체 경로를 제거하여 파일 이름을 얻습니다..

    예를 들어, 스크립트의 이름을 up.sh로 지정하고 파일의 로컬 / var / www / wp-content / plugins / 디렉토리에서 실행 한 경우 :

    up.sh myplugin.php

    이것은 쉘에 의해 다음과 같이 확장되었을 것입니다 :

    scp myplugin.php [email protected] : /var/www/howtogeek/docs/wp-content/plugins/myplugin.php

    기사를 기반으로 자신 만의 스크립트 파일을 만드는 대신 다운로드 할 수 있도록 제공했습니다. 그런 식으로 특수 문자가 작동하지 않는 문제는 없을 것입니다. 예, 스크립트를 사용하여 직접 업로드했습니다.

    geek-uploader.sh를 다운로드하십시오.

    그냥 당신의 경로 어딘가에 넣어, 당신이 원하는대로 그것을 이름. 나는 "up"으로 mine의 이름을 변경 했으므로 업로드하기 위해 "up filename.txt"를 입력하면됩니다. 또한 스크립트를 열고 사용자 환경에 맞게 스크립트 시작 부분의 변수를 변경해야합니다..

    이 스크립트는 * nix 셸과 scp 유틸리티가있는 모든 항목에서 작동해야합니다. 우분투를 사용하고 있지만, 솔라리스, OS X 또는 Cygwin이 설치된 Windows에서도 작동해야합니다..