문제

나의 문제는 다음과 같습니다:나는 스크립트를 작성하고 그 목적을 실행하는 특정 스크립트를 다른 서버에서 병렬로 작동합니다.I.e., 나는 로그인하시려면 원격으로 서버가 암호를 입력(이것은 양도할 수 있지 않기 때문에 상사),시작하는 스크립트,연결을 닫을하는 동안 스크립트가 아직도 실행,에 연결 다음 서버 및 하며 다시 다시합니다.어떻게 해야 하나요?

도움이 되었습니까?

해결책

가정 bash 대상인 쉘의 모든에서 원격 컴퓨터,당신이 할 수 있는 한계:

ssh user@host /path/to/script '&>/dev/null' '</dev/null' '&' disown

을 위한 여러 기계할 수도 있는 이 스크립트와 같은:

hosts='user1@host1 user2@host2'

for host in $hosts
do
  ssh $host /path/to/script '&>/dev/null' '</dev/null' '&' disown
done

이해 당신에 입력하여 암호를 암호화합니다.

또는 사용할 수 있는지에 대해 동일한 암호를 여러 컴퓨터,나는 추천에서 보기 ClusterSSH.이할 수 있습으로 로그인하시고 명령을 입력하여 전송되는 그들 모두 하나의 창에서 개별적으로 각 xterm 창입니다.이 저장 당신이 입력하는 동일한 암호를 반복적으로.로그인 한 후에 당신을 명령을 실행할 수 있습으로 위(이 없 ssh user@host 부)및 종료됩니다.

업데이트

의 몇 가지 여분의 생각이 여기에.첫째 그것은 그렇지 않는 좋은 생각을 버리고 스크립트 출력이 완전히 때문에,당신이 결코 무슨 일이 있었는지 알고 뭔가 잘못되었을 경우.할 수 있습니다 그냥 넣어에 파일을 보고서에 의해 나중에 교체 '&>/dev/null''&>filename'.다른 것을 원격 컴퓨터를 이메일로 보내(제공하는 제대로 설정하여 이렇게):

host=user@host
ssh $host \(/path/to/script '2>&1' \| mail -s "$host output" me@me.com\) \
  '&>/dev/null' '</dev/null' '&' disown

두 번째 경우 스크립트는 로컬 호스트로 복사할 수 있습니다 그리고 그것을 실행에서 하나의 명령입니다.가정 쉘 스크립트를하지 않을 경우,대체 sh 올바른 해석)

</path/to/script ssh user@host \
  cat \>script \; sh ./script '&>/dev/null' '</dev/null' '&' disown

다른 팁

로그인 한 후 화면 유틸리티를 사용하여 새 터미널 세션을 시작할 수 있으며 나중에 예제 :

[user@local]$ ssh machine
[user@machine]$ screen -S my_session
# you are now switched to new terminal session named "my_session"
# now you can start long operation, that you want to keep in background
[user@machine]$ yes
# press "Ctrl-a d" to detach, you will go back to original session
[detached from 11271.my_session]
# now you can leave ssh (your session with "yes" running will be kept in background)
# to list existing screen sessions run:
[user@machine]$ screen -list
There is a screen on:
11271.my_session    (Detached)
1 Socket in /var/run/screen/S-user.
# to re-attach use -r
[user@machine]$ screen -r my_session
# you will be back to session with "yes" still running (press Ctrl-C to stop it)
.

화면 작동 방식을 이해하면 스크립팅을 시도 할 수 있습니다.이것은 my_command를 실행하는 분리 된 상태에서 화면 세션을 시작하는 방법입니다.

$ screen -d -m my_command
.

expect는 이것을 쉽게 자동화 할 수 있습니다 :

#!/usr/bin/expect -f

set hosts {your list of hosts goes here ...}
foreach host $hosts {
    spawn ssh -t user@$host screen ./script.sh
    expect "assword:"
    send -- "secret\r"
    sleep 1
    send -- "d"
    expect eof
}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top