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

그래서 필자는 저 자신을 위해 쉘 스크립트를 작성하여 보안 파일 복사를 위해 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 [email protected] ‘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를 다운로드하십시오.

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

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

탑 팁 :
댓글 :