smbclient를 사용하여 Virtualbox 게스트에서 스크립트의 호스트로 파일 전송

smbclient를 사용하여 Virtualbox 게스트에서 스크립트의 호스트로 파일 전송

CentOS 7 시스템에서 실행될 스크립트를 개발하려고 하는데 지금은 Virtualbox 인스턴스(또한 CentOS 7)에서 개발 중입니다. 스크립트는 여러 작업을 처리하지만 문제가 되는 부분은 수백 개의 대용량 파일을 Windows 시스템(현재 내 PC 또는 Virtualbox 호스트)으로 보내는 것입니다.

두 가지 질문:

A) 파일을 호스트로 보냅니다.

현재 시도는 다음과 같습니다.

find "${FILES_DIR}" -print0 | while read -d $'\0' file
do
  if [ ${file: -4} == ".zip" ]
  then
    smbclient //${WINDOWS_IP}/${WINDOWS_DIR} -U ${WINDOWS_USERNAME}%${WINDOWS_PASSWORD} -c "put ${file}"
  fi
done

여기서 WINDOWS_IP는 enp0s3.inet이고 WINDOWS_DIR은 호스트의 공유 폴더입니다. 문제는 연결 거부 오류가 계속 발생하고 여기서 어디로 가야할지 모른다는 것입니다.

B) 파일 전송이 성공했는지 확인

smbclient는 파일이 성공적으로 전송되었는지 확인하는 데 사용할 수 있는 항목을 반환합니까?

답변1

(B)의 경우 smbclient적어도 일부 오류에 대해 종료 코드를 반환합니다. $?셸에서 를 사용하여 마지막 명령의 종료 코드를 얻을 수 있습니다 . 종료 코드 0은 "정상"을 의미하고, 0이 아닌 경우 오류를 의미하며, 내가 제기한 오류의 경우 1이었습니다(그러나 다른 종료 코드도 가능하며 모든 오류가 종료 코드를 설정하는 것은 아닙니다).

(A)에 언급된 "연결 거부됨" 오류는 여러 가지 원인이 있을 수 있으며 Q&A를 통해 디버깅하기 어렵습니다. 어떤 상황에서 오류가 발생했거나 발생하지 않았는지, ping원격 컴퓨터가 작동했는지, 방화벽 설정이 확인되었는지 등 최소한 몇 가지 정보를 제공하십시오.

smbclient그런데 , 명령을 다음으로 파이프할 수도 있습니다.

echo "put ${file}" | smbclient "//${WINDOWS_IP}/${WINDOWS_DIR}" -U "${WINDOWS_USERNAME}%${WINDOWS_PASSWORD}"

매번 새로운 연결을 설정하는 것을 방지하므로 무작위로 실패하는 경우 대량의 파일을 전송하는 데 도움이 될 수도 있고 도움이 되지 않을 수도 있습니다.

모든 것을 올바르게 이스케이프 처리하는 것을 고려해 보십시오(따옴표를 추가했습니다). 사용 중인 실제 값을 알 수 없습니다. 잘못된 이스케이프 처리로 인해 호스트, 사용자 또는 비밀번호가 손상될 수 있으며 오류의 원인이 될 수 있습니다.

관련 정보