중복 가능성:
설정된 SSH 채널 사용
이것은 내 동기화 스크립트입니다.
ssh [email protected] /etc/init.d/some_service stop
scp [email protected]:/var/some_service/events ./events
scp ./new_data [email protected]:/var/some_service/new_data
ssh [email protected] /etc/init.d/some_service start
보시다시피 서비스를 중지하고 scp를 사용하여 일부 복사를 수행한 다음 서비스를 다시 시작합니다.
문제는 4개의 "유사한" SSH 연결을 연속적으로 "소비"한다는 것입니다.
하나의 물리적 SSH 연결을 사용하여 모든 작업을 수행할 수 있는 방법이 있습니까?
답변1
SSH 연결 공유 사용을 고려할 수 있습니다.
Host *.some-domain
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
대상에 한 번만 연결하고 SSH 프로세스를 백그라운드에 두기만 하면 됩니다. 그런 다음 다른 명령을 실행하고 마지막으로 첫 번째 프로세스를 종료합니다.
또는 SSH 연결에서 여러 작업을 캡슐화해 볼 수도 있습니다.
예를 들어 다음과 같은 디렉터리가 있다고 가정해 보겠습니다.
mycommands
|
+- run
+- new_data
그런 다음 이 데이터를 tar로 패키징하여 스크립트로 보낼 수 있습니다.
tar cf - -C mycommands . | ssh localhost 'D=`mktemp -d`; tar xf - -C $D; $D/run'
이제 run
스크립트는 모든 입력 데이터에 액세스할 수 있습니다(여기에는 new_data
예제의 데이터만 있습니다). 귀하의 예를 고수하기 위해 run
스크립트는 다음과 같습니다.
#!/bin/sh
BASE=`dirname $0`
/etc/init.d/some_service stop
cat /var/some_service/events
mv $BASE/new_data /var/some_service/new_data
/etc/init.d/some_service start
rm -rf $BASE
이제 파일을 저장하면 됩니다 events
.
tar cf - -C mycommands . | ssh localhost 'D=`mktemp -d`; tar xf - -C $D; $D/run' >./events
보다 일반적으로는 run
스크립트가 tar를 생성한 다음 ssh
tar를 파이프하여 로컬에서 압축을 풀도록 할 수 있습니다.
답변2
이 논리를 대상 서버에서 실행되는 스크립트로 옮긴 다음 단일 SSH 명령을 사용하여 실행할 수 있습니다. 아마도 이것은 이상적이지 않을 것입니다. 그렇지 않으면 그렇게했을 것입니다 :)
SSH 마스터 연결을 사용하면 새 SSH 연결을 여는 비용을 줄일 수 있습니다. 이는 첫 번째 SSH 명령이 평소와 같이 새로운 연결을 열 것임을 의미합니다. 동일한 서버에 대한 후속 연결에서는 이 기존 연결을 재사용하여 세 개의 추가 연결을 만드는 오버헤드를 절약합니다.
설정에 대한 좋은 가이드는 다음과 같습니다.http://www.linuxjournal.com/content/speed-multiple-ssh-connections-same-server
답변3
이는 로컬 서버가 원격 서버를 신뢰하여 비밀번호 없이 명령을 실행한다고 가정합니다. 그렇지 않으면 헤드리스 연결을 실행하고 입력을 제공할 수 없기 때문에 작동하지 않습니다.
ssh remoteserver "/etc/init.d/some_service stop; scp /var/some_service/events localhost:${PWD}/events; scp localserver:${PWD}/new_data /var/some_service/new_data; /etc/init.d/some_service start"
위의 모든 코드는 터미널에서 하나의 연속된 줄에 있어야 합니다. 또는 스크립트 내에서 실행하는 경우 이 모두는 줄 바꿈으로 구분되지 않고 하나의 명령이어야 합니다.
원격 서버에서 로컬 서버까지 신뢰할 수 있는 키 쌍이 있는 경우 이것이 작동하지 않는 이유가 없습니다.