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


13

이것은 매우 기초적인 질문이며, bash를 처음 접했을 때 어떻게 해야하는지 알 수 없었습니다. 인터넷 검색은 불행히도 어디에도 가지 못했습니다.

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

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

UpdateJar.sh

#!/bin/bash

sftp -oPort=23 kalenpw@184.155.136.254:/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 연결을 설정 한 다음 아무것도하지 않는다는 것입니다. 연결에 수동으로 exit를 입력하면 put 명령을 실행하려고 시도하지만 sftp 세션이 닫히기 때문에 put : command not found라고 표시됩니다.

이 작업을 제대로 수행하려면 어떻게해야합니까?

감사


답변:


15

여기 문서에서 명령을 전달하도록 스크립트를 변경할 수 있습니다 (예 :

#!/bin/bash

sftp -oPort=23 kalenpw@184.155.136.254:/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) 이름이 라인의 시작 부분에 발견 될 때까지 (자체) 다음 줄을 전달하는 스크립트를 알려줍니다.


내가 필요한 것을 정확하게 했어요. 나는 여기 문서를 읽어야 할 것이다. 빠른 답변을 보내 주셔서 감사합니다. 8 분 후에 수락하겠습니다.
kalenpw

문제 없습니다 (중복 본을 찾았지만 "불분명 한"것으로 닫힌 것을 발견했습니다).
Thomas Dickey

서버가 쉘 스크립트의 주석을 질식시키지 않습니까?
alk

또한이 접근법은 쉘의 종류에 따라 다릅니다.
alk

@alk이 스크립트는 주석없이 작동합니다
kalenpw

5

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

scp -P 23 /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins

이렇게하면 구식 ftp 스타일 명령 인터페이스를 사용할 필요없이 로컬 컴퓨터의 파일이 원격 컴퓨터의 디렉토리에 복사됩니다.

ssh, scpsftp서비스는 그 중 하나 인 경우 일반적으로 사용할 수 있습니다; 동일한 데몬 프로그램이 모두 동시에 제공합니다. 원칙적으로 서버 관리자는 서버를 비활성화 할 수 있지만 실제로는 거의 없습니다.


미리 scp에 대해 알지 못했지만 매우 유용합니다. 그리고 당신은 옳았습니다 scp이미 내 컴퓨터에서 사용할 수 있습니다
kalenpw

4

-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 kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins 

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

보낸 사람 man sftp:

-b 배치 파일

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


2

다른 옵션은 curl 을 사용하는 것입니다 .

curl -u user -T file.tar sftp://example.com/home/user/
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.