1:

1:

원격 컴퓨터에 아무것도 설치할 필요 없이 하나의 중앙 컴퓨터에서 여러 원격 컴퓨터로 구성을 푸시하는 방법을 찾고 있습니다.

목표는 cfengine에이전트가 설정되지 않은 일련의 시스템에서 와 같은 도구를 사용하여 찾을 수 있는 작업을 수행하는 것입니다. 이는 실제로 cfagent기존 원격 시스템 세트에 설정하는 좋은 기술일 수 있습니다 .

답변1

스크립트를 전달하고 스크립트를 파이프하고 셸을 실행하여 일시적으로 실행되도록 할 수 있습니다.

예를 들어

echo "ls -l; echo 'Hello World'" | ssh me@myserver /bin/bash

당연히 해당 "ls -l; echo 'Hello World'"부분은 로컬 시스템의 파일에 저장된 bash 스크립트로 대체될 수 있습니다.

예를 들어

cat script.sh | ssh me@myserver /bin/bash

건배!

답변2

이를 수행하는 방법에는 여러 가지가 있습니다.

1:

ssh user@remote_server 'bash -s' < localfile

2:

cat localfile  | ssh user@remote_server

삼:

ssh user@remote_server "$(< localfile)"

3번은 제가 선호하는 방법입니다. 예를 들어 대화형 명령을 허용합니다.sudo -S service nginx restart

(#1과 #2는 를 사용할 때 비밀번호 질문에 대한 입력으로 스크립트의 나머지 부분을 사용합니다 sudo -S.)

답변3

이 목적으로 Python의 Fabric을 권장합니다.

#!/usr/bin/python
# ~/fabfile.py

from fabric_api import *

env.hosts = ['host1', 'host2']
def deploy_script():
    put('your_script.sh', 'your_script.sh', mode=0755)
    sudo('./your_script.sh')

# from shell
$ fab deploy_script

시작하려면 위의 내용을 사용할 수 있어야 합니다. Fabric의 우수한 제품에 문의하세요.선적 서류 비치나머지는 하려고요. 부록으로, 복사가 필요 없이 Fabric 내에서 스크립트를 완전히 작성하는 것이 가능합니다. 그러나 모든 시스템에서 스크립트를 변경하려면 로컬 복사본을 편집하고 재배포하기만 하면 됩니다. 또한 API의 기본 사용법보다 약간 더 많은 기능을 사용하면 현재 실행 중인 호스트 및/또는 기타 변수를 기반으로 스크립트를 수정할 수 있습니다. 그것은 일종의 Pythonic Expect입니다.

답변4

설명된 대로이 답변당신이 사용할 수있는heredoc:

ssh user@host <<'ENDSSH'
#commands to run on remote host
ENDSSH

heredoc은 텍스트만 보낼 뿐 실제로 응답을 기다리지는 않기 때문에 주의해야 합니다. 이는 명령이 실행될 때까지 기다리지 않음을 의미합니다.

관련 정보