ssh를 통해 배치 모드로 명령을 실행하는 방법은 무엇입니까?


9

ssh를 통해 배치 모드에서 명령을 어떻게 실행할 수 있습니까? 즉, ssh명령과 동등한 것은 sftp -b <filename> <hostname>무엇입니까?

연결하는 일련의 호스트에서 실행하려는 일련의 명령이 ssh있습니다. 이상 sftp, 나는 명령을 파일에 저장하고 filename호스트에 연결하고 앞에서 언급 한 명령을 사용하여 명령을 실행합니다.

그와 같은 것이 가능 ssh합니까?


나는 질문을 겪었다. 그러나 여전히 배치 모드에서 명령을 실행하는 방법을 알 수 없었습니다.
Srikanth

그리고 어떤 사람은 #batchmode 태그를 생성 하고이 질문에 태그를 달 수 있습니까?
Srikanth

답변:


9

내가 틀렸다면 정정하십시오. 그러나 스크립트가 로컬 인 원격 서버에서 일반 쉘 명령을 실행하려고하는 것 같습니다.

#!/bin/sh
trap "rm -f /tmp/sendonssh.$$.*" 0 1 2 3 15
# commands to run on the remote server
cat <<'EOF' >> /tmp/sendonssh.$$.sh
mkdir -p /tmp/foobar.$$
mv $HOME/xyzzy /tmp/foobar.$$
chmod 640 $HOME/xyzzy
EOF
# call for each argument
for userhost in "$@"; do
    errorout=`ssh -aTxo BatchMode=yes $userhost /bin/sh -s < /tmp/sendonssh.$$.sh 2>&1`
    rc=$?
    if [ $rc -ne 0 ]; then
        echo "Error: $userhost: $errorout"
        exit $rc
    fi
done

쉘 대신 Python을 사용하여 테스트 환경에서 일부 '원격 실행'앱 으로이 작업을 수행합니다 ssh $userhost python < $pythonscriptfilename.


답변 해주셔서 감사합니다. 그런 것 같습니다. 나는 그것을 조금 조정하고 지금 시도하고 있습니다.
Srikanth

7

SSH는 다음과 같습니다 sftp -b <filename> <hostname>.

ssh -o BatchMode=yes <hostname> sh -s < "<filename>"


3

간단하게 유지하고 다른 컴퓨터에서 "일괄 처리"파일을 실행하는 방법은 무엇입니까?

  1. SCP 배치 파일 user @ pc
  2. ssh user @ pc 배치 파일
  3. ssh user @ pc rm 배치 파일

그리고 배치 파일은 일반적인 쉘 스크립트이므로 구문이 잘 알려져 있습니다.


0

man expect? : \

그러나 완벽한 방법은 아닙니다.


안녕하세요 johnny8888, 저는 Solaris 서버에 있으며 수동으로 입력 할 항목이 없습니다. 답을 자세히 설명해 주시겠습니까?
Srikanth


@Srikanth : expect터미널에서 실행될 것으로 예상되는 프로그램과 상호 작용하도록 설계되었습니다. 이것은 ssh를 통한 명령 실행 문제와 관련이 없습니다.
Gilles 'SO- 악마 중지'


0

ssh 강제 명령을 사용할 수 있습니다.

이들은 특정 키와 관련이 있습니다. 해당 키로 인증이 완료되면 해당 명령이 실행되고 연결이 종료됩니다. 이 방법의 한 가지 장점은 보안을 강화하는 것입니다.이 경우 키를 사용하여 로그인 쉘에 접근 할 수 없기 때문입니다.


0

Arcege스크립트에 대한 또 다른 옵션 은 Bash 함수입니다.

sshbatch() {
  # Expect at least 2 parameters, if less are provided print help
  if [[ ${#@} -lt 2 ]]; then
    printf 'Usage: sshbatch [user@]host... input_file\n'
  else
    while read -r -u "$fd" host; do
      # Check if the last parameter is a readable file, else print error and exit
      [[ -r ${@:(-1)} ]] || { printf "The file ${@:(-1)} is not readable!\n"; break; }
      # Run remote bash from the file given in the last parameter
      ssh -o BatchMode=yes "$host" bash -s < "${@:(-1)}"
      # Read host list from 1st to next to last parameters
    done {fd}< <(printf '%s\n' "${@:1:${#@}-1}")
  fi
}

ssh의 -T옵션은 모든 경우에 작동 하지 않으므로 사용 하지 않습니다.

이 스크립트는 위치 매개 변수 배열에서 매개 변수 확장을 사용합니다 $@.

  • "${@:(-1)}" 마지막 매개 변수로 확장됩니다 (문자 그대로 처음부터 끝까지)
  • "${#@}" 위치 매개 변수의 수로 확장
  • "${@:1:${#@}-1}" 모든 매개 변수의 목록을 첫 번째에서 다음으로 마지막으로 확장합니다 (문자 그대로의 매개 변수 수는 1보다 작음).

나는 그런 변수 확장에별로 좋지 않습니다. 무슨 일이 일어나고 있는지 조금 더 추가 할 수 있습니까? 건배.
Guy

@Guy, 여기 당신은 - 내가 코드를 주석 및 매개 변수 확장에 대한 몇 가지 설명 추가
gadamiak
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.