이것은 매우 기본적인 질문입니다. 저는 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/