ssh를 통해 배치 모드에서 명령을 어떻게 실행할 수 있습니까? 즉, ssh
명령과 동등한 것은 sftp -b <filename> <hostname>
무엇입니까?
연결하는 일련의 호스트에서 실행하려는 일련의 명령이 ssh
있습니다. 이상 sftp
, 나는 명령을 파일에 저장하고 filename
호스트에 연결하고 앞에서 언급 한 명령을 사용하여 명령을 실행합니다.
그와 같은 것이 가능 ssh
합니까?
ssh를 통해 배치 모드에서 명령을 어떻게 실행할 수 있습니까? 즉, ssh
명령과 동등한 것은 sftp -b <filename> <hostname>
무엇입니까?
연결하는 일련의 호스트에서 실행하려는 일련의 명령이 ssh
있습니다. 이상 sftp
, 나는 명령을 파일에 저장하고 filename
호스트에 연결하고 앞에서 언급 한 명령을 사용하여 명령을 실행합니다.
그와 같은 것이 가능 ssh
합니까?
답변:
내가 틀렸다면 정정하십시오. 그러나 스크립트가 로컬 인 원격 서버에서 일반 쉘 명령을 실행하려고하는 것 같습니다.
#!/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
.
man expect
? : \
그러나 완벽한 방법은 아닙니다.
expect
터미널에서 실행될 것으로 예상되는 프로그램과 상호 작용하도록 설계되었습니다. 이것은 ssh를 통한 명령 실행 문제와 관련이 없습니다.
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보다 작음).