스크립트를 통해 sftp 연결에서 명령 실행

스크립트를 통해 sftp 연결에서 명령 실행

이것은 매우 기본적인 질문입니다. 저는 bash를 처음 접했고 이를 수행하는 방법을 모릅니다. 불행하게도 인터넷 검색으로는 어디에서도 나를 찾을 수 없었습니다.

내 목표는 sftp를 사용하여 서버에 연결하고 파일을 업로드한 다음 연결을 끊는 것입니다.

다음 스크립트가 있습니다.

UpdateJar.sh

#!/bin/bash

sftp -oPort=23 [email protected]:/home/kalenpw/TestWorld/plugins
#Change directory on server
#cd /home/kalenpw/TestWorld/plugins

#Upload file
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar

exit

문제는 이 스크립트가 SFTP 연결을 설정한 다음 아무 작업도 수행하지 않는다는 것입니다. 연결에 수동으로 종료를 입력하면 put 명령을 실행하려고 시도하지만 sftp 세션이 닫히기 때문에 put: command not find라고만 표시됩니다.

어떻게 하면 제대로 작동하게 할 수 있나요?

감사해요

답변1

이 문서의 명령을 전달하도록 스크립트를 변경할 수 있습니다. 예를 들면 다음과 같습니다.

#!/bin/bash

sftp -oPort=23 [email protected]:/home/kalenpw/TestWorld/plugins <<EOF
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar   
exit
EOF

이것<<뒤에 이름( EOF)을 표시하면 해당 이름(단독)이 줄의 시작 부분에서 발견될 때까지 다음 줄을 전달하도록 스크립트에 지시합니다.

답변2

scp대신 을 사용하는 것이 더 좋을 수 있습니다 sftp. scp동작은 cp일반 명령과 매우 유사하지만 파일이 원격일 수 있습니다.

scp -P 23 /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar [email protected]:/home/kalenpw/TestWorld/plugins

이는 이전 FTP 스타일 명령 인터페이스를 사용하지 않고 로컬 시스템의 파일을 원격 시스템의 디렉토리로 복사합니다.

ssh, scp서비스가 sftp일반적으로 사용 가능합니다(이 중 하나라도 사용 가능한 경우). 동일한 데몬이 이러한 모든 기능을 동시에 제공합니다. 원칙적으로 서버 관리자는 이들 중 하나를 비활성화하도록 선택할 수 있지만 실제로는 그런 경우가 거의 없습니다.

답변3

-b옵션을 사용하여 sftp포함을 나타낼 수도 있습니다 sftp.

예를 들어 모든 명령을 파일에 넣을 수 있습니다 sftp_commands.txt.

cd /home/kalenpw/TestWorld/plugins
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar
exit

다음과 같이 실행합니다 sftp.

sftp -oPort=23 -b sftp_commands.txt [email protected]:/home/kalenpw/TestWorld/plugins 

또는 파일을 사용하지 않으려면 STDIN을 통해 명령을 전달할 수 있습니다.

에서 man sftp:

-b 배치 파일

배치 모드는 표준 입력 대신 입력 배치 파일에서 일련의 명령을 읽습니다. 사용자 상호작용이 부족하므로 비대화형 인증과 함께 사용해야 합니다. 배치 파일 "-"를 사용하여 표준 입력을 나타낼 수 있습니다. get, put, reget, rename, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, Symlink 및 lmkdir 명령 중 하나라도 실패하면 sftp는 중단됩니다. "-" 문자를 앞에 추가하여 명령별로 오류 종료를 억제할 수 있습니다(예: -rm /tmp/blah*).

답변4

또 다른 옵션은 다음을 사용하는 것입니다.곱슬:

curl -u user -T file.tar sftp://example.com/home/user/

관련 정보