![원격 컴퓨터에서 로컬 스크립트를 실행하는 방법(다른 로컬 스크립트 실행)](https://linux55.com/image/223898/%EC%9B%90%EA%B2%A9%20%EC%BB%B4%ED%93%A8%ED%84%B0%EC%97%90%EC%84%9C%20%EB%A1%9C%EC%BB%AC%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95(%EB%8B%A4%EB%A5%B8%20%EB%A1%9C%EC%BB%AC%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20%EC%8B%A4%ED%96%89).png)
아래와 같은 스크립트를 작성했습니다.
main.sh
ls
./os.sh
os.sh
cat /etc/os-release
실행은 다음과 같습니다
ssh user@serverA "bash -s" < ./main.sh "hi" "bye"
그러나 이것은 의 명령에 대해서만 작동하며 main.sh
원격 시스템에서 찾으려는 명령을 실행할 수 없습니다 os.sh
. os.sh
하지만 이러한 유형의 스크립트는 어떻게 작동합니까?
답변1
스크립트 및 모든 필수 종속성이 포함된 전체 디렉터리를 임시 디렉터리로 전송할 수 있습니다.
user
on의 로그인 쉘이 host
POSIX와 유사하고 및 mktemp
명령이 있다고 가정하면 다음과 같을 수 있습니다.tar
gunzip
tar cf - . | gzip -1 | ssh user@host '
set -o errexit
tmpdir=$(mktemp -d)
trap '\''rm -rf -- "$tmpdir"'\'' EXIT TERM HUP ALRM
cd -P -- "$tmpdir"
gunzip | tar xf -
./main.sh'
답변2
os.sh
Linux에는 두 컴퓨터 간에 스크립트 파일을 공유하는 기본 제공 방법이 없습니다.
따라서 원격 컴퓨터에서 스크립트를 호출하려는 목적을 달성하려면 os.sh
컴퓨터에 스크립트를 배치해야 합니다. 일시적으로 하는 방법도 있고, "영구적으로" 하는 방법도 있습니다. 옵션에 대한 간략한 조사:
- 로컬 시스템과 관심 있는 원격 시스템 간에 공유되는 파일 시스템이 있는 경우
os.sh
해당 파일 시스템에 복사하고 거기에서 호출하세요. - 포함된 패키지를 생성하여
os.sh
로컬 패키지 저장소에 추가하고 패키지 관리 명령을 사용하여 패키지를 호출하려는 모든 컴퓨터에 패키지를 설치합니다. - Puppet, Chef, Saltstack 등과 같은 구성 관리 시스템을 사용하여
os.sh
관심 있는 컴퓨터에 파일을 설치하세요. 스크립트는 패키지(이전 옵션과 마찬가지로)로 설치하거나 개별적으로 설치할 수 있습니다. - 스크립트를
os.sh
원격 시스템에 복사scp
하고 실행이 완료된 후 삭제하는 데 사용됩니다. - Ansible을 사용하여
os.sh
스크립트를 원격 시스템에 자동으로 복사하고 호출한 다음 삭제합니다.
처음 세 가지 옵션은 "영구" 옵션입니다. 즉, ssh 세션 동안뿐만 아니라 원격 서버에서 스크립트를 항상 사용할 수 있음을 의미합니다. 마지막 두 개는 "일시적"이므로 스크립트를 호출할 수 있을 만큼만 서버에 스크립트를 남겨둡니다.
영구 기술은 해당 기술이 의존하는 인프라 리소스를 생성하기 위해 상당한 추가 작업이 필요합니다. 그러나 서버가 많은 회사에서 근무하는 경우 이러한 리소스 중 하나 이상이 이미 마련되어 있을 수 있습니다.
임시 기술은 보다 자립적이며 인프라를 구축하기 위해 추가 작업이 필요하지 않습니다. 명명된 소프트웨어 제품군은 Ansible
스크립트 파일을 원격 호스트에 복사하고 호출한 후 삭제하는 작업의 일부를 자동화할 수 있습니다. Ansible은 기본적으로 SSH를 통해 작동하며 필요한 경우 자동으로 sudo를 사용하여 원격 시스템에서 루트 권한을 얻을 수도 있습니다.
한 서버에서 한 달에 한 번만 이 작업을 수행하려면 scp/delete를 직접 수행하는 것이 아마도 원하는 것일 것입니다. 이런 종류의 작업을 자주 또는 많은 원격 시스템에서 수행하는 경우 로컬 시스템에 Ansible을 설치하고 원격 서버에서 스크립트를 복사/호출/삭제하는 데 필요한 매우 간단한 명령을 배우는 것이 좋습니다.