목표는 IP,매개변수,매개변수 형식의 CSV를 기반으로 신뢰할 수 없는(무선) 연결을 사용하는 많은 장치의 일부 매개변수를 기반으로 변경하는 것입니다.
파일을 업로드한 다음 로컬 복사본과 비교하여 파일 내용을 확인한 다음 bash, ssh, cat 및 diff만 사용하여 원격 측에서 다른 명령을 실행하는 bash 스크립트를 만들고 싶습니다. 원격 Linux 서버(Busybox)에는 기본 도구만 사용할 수 있고 수천 개가 있으므로 확장이 중요합니다. 저는 이 모든 작업을 단일 SSH 세션에서 수행하고 싶습니다. 여기서 인증은 단 한 번만 수행하면 됩니다. 지금은 안전이 문제가 아닌 척합니다. RSA 공개 키 배포를 모든 항목으로 확장하는 방법을 조사 중이지만 지금은 비밀번호 인증을 사용하여 작동하고 싶습니다. 이것을 안전 관행에 대한 농담으로 바꾸지 마십시오. 어쩌면 위의 목표를 달성하는 더 쉬운 방법이 있을 수도 있습니다. 그렇다면 공유해주세요. 감사해요.
따라서 단계는 다음과 같습니다.
- 원격 박스에 로그인하세요.
- 로컬 파일을 원격 상자의 특정 디렉터리에 복사합니다.
- diff 또는 일부 유형의 파일 복사 오류 검사를 실행하십시오.
- 오류가 있으면 스크립트를 중지하고, 그렇지 않으면 계속합니다.
- 원격 상자에서 다른 명령을 실행하십시오.
- 명령 결과를 로컬 파일로 출력합니다.
- 세션을 닫습니다.
- 헹구고 반복하십시오.
아래는 일종의 의사 코드입니다. 하지만 그것은 내가 무엇을 하려는지에 대한 아이디어를 제공합니다. diff는 로컬 파일 목록을 작성하는 출력을 볼 수 없으므로 파일이 다르다고 생각합니다.
IFS=\,
while read IP PARAM1 PARAM2; do
cat /home/user/uploadscript.sh | sshpass -p $password ssh -v -o StrictHostKeyChecking=no -l uname 192.168.x.x 'cat > /tmp/script.sh && cat | diff -sb - /tmp/script.sh && IP="IP" && P1="$PARAM1" && P2="$PARAM2" && ./script.sh'
done < list_of_ipaddresses.txt >> log.txt
답변1
어쩌면 다음과 같은 것일 수도 있습니다.
{
sha1sum /dev/fd/3 3< file-to-transfer &&
cat file-to-transfer
} | ssh host '
read sum &&
cat > transferred-file &&
echo "$sum" | sha1sum --quiet -c 3< transferred-file || exit
cmd-that-expect-a-properly-transmitted-file'
(대상 사용자의 로그인 쉘이 host
Bourne과 유사하다고 가정)
이는 ssh
전송의 무결성을 보장하지만 체크섬 확인은 중단된 전송과 대상의 잠재적인 결함이 있는 저장 장치를 계속해서 포함합니다(데이터가 캐시될 수 있음). 후자가 아닌 경우 치수를 확인하는 것으로 충분합니다.
답변2
필요한 유일한 명령은 scp
다른 명령과 마찬가지로 scp
성공의 경우 상태 코드 0이 반환되고 오류의 경우 0이 아닌 값이 반환됩니다. 0이 반환 되면 scp
파일 업로드가 성공한 것입니다.
if scp …; then
echo >&2 "The file was uploaded successfully."
else
echo >&2 "There was an error uploading the file."
fi
답변3
이 경우, 제가 정확하게 기억한다면 위의 ControlMaster 사용에 대한 설명에 답이 있습니다. @Jakuje 감사합니다!