[unix] 터미널에서 단일 라인 SFTP
하루에 여러 번 원격 서버의 로그 파일을 살펴 봐야하는 테스트를 실행할 수 있습니다. 터미널을 사용 sftp
하여 원격 서버에 접속하고 원하는 로그 파일 /tmp
을 내 로컬 컴퓨터 로 가져 오는 데 익숙해졌습니다 .
man sftp
다음 명령을 기본적으로 한 줄로 실행하는 방법을 알아 내기 위해 오늘 사용하는 옵션을 살펴보고 명령을 입력하고 Enter 키를 누르고 명령을 입력하고 Enter 키를 누르는 등의 작업을 수행 할 필요가 없습니다.
(내가 지금하는 일)
sftp myuser@myserver
--mypassword at prompt
lcd /tmp
get /dir/dir/dir/dir/file
quit
이전에 사용하지 않은 man sftp
참고 자료를 살펴보면서 발견했습니다 scp
. 내가 찾고있는 것일 수 있다고 생각하지만 안전하게 복사 된 파일을 어디로 보낼지 지정하는 방법을 찾지 못했습니다.
누군가 /dir/file
원격 서버에서 다운로드하여 다운로드 할 수있는 방법을 제공 할 수 /tmp/file_plus-my-description
있습니까?
다음과 같은 일반 UNIX 복사본과 유사한 sftp 또는 scp 명령을 실행할 수 있기를 바랐습니다.
scp myuser@myserver /dir/file /tmp/file_plus-my-description
Terminal
Mac OS X 10.8에 내장 된 것을 사용하고 있습니다. 감사.
답변
2017 년 9 월 업데이트-tl; dr
원격 ftp 서버에서 컴퓨터로 단일 파일을 다운로드 합니다.
sftp {user}@{host}:{remoteFileName} {localFileName}
컴퓨터에서 원격 FTP 서버로 단일 파일을 업로드 합니다.
sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}'
원래 답변 :
좋아, 그래서 좀 멍청 해. 그러나 나는 그것을 알아 냈다. 나는 거의 정상에 그것을 가지고 있었다 :
sftp user@host remoteFile localFile
터미널에 표시되는 유일한 문서는 다음과 같습니다.
sftp [user@]host[:file ...]
sftp [user@]host[:dir[/]]
그러나 시놉시스 아래에 다음을 보여주는 이 사이트 를 발견 했습니다 .
sftp [-vC1 ] [-b batchfile ] [-o ssh_option ] [-s subsystem | sftp_server ] [-B buffer_size ] [-F ssh_config ] [-P sftp_server path ] [-R num_requests ] [-S program ] host
sftp [[user@]host[:file [file]]]
sftp [[user@]host[:dir[/]]]
따라서 간단한 대답은 :
사용자와 호스트 다음에 원격 파일과 로컬 파일 이름을 수행하는 것입니다. 놀랍도록 간단합니다!
한 줄, sftp 복사 원격 파일 :
sftp username@hostname:remoteFileName localFileName
sftp kyle@kylesserver:/tmp/myLogFile.log /tmp/fileNameToUseLocally.log
2016 년 2 월 업데이트
누군가가이 명령을 반대로 수행하고 한 줄 명령으로 로컬 컴퓨터에서 원격 서버로 파일을 푸시 하는 명령을 찾고 sftp
있다면 아래의 @Thariama 사용자가이를 수행하기위한 솔루션을 게시했습니다. 추가 코드에 대한 모자 팁.
sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}'
답변
단일 파일을 업로드하려면 bash 스크립트를 생성해야합니다. sshpass
설치 한 경우 다음과 같은 것이 OS X에서 작동합니다 .
용법:
sftpx <password> <user@hostname> <localfile> <remotefile>
이 스크립트를 경로 어딘가에 놓고 호출하십시오 sftpx
.
#!/bin/bash
export RND=`cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32`
export TMPDIR=/tmp/$RND
export FILENAME=$(basename "$4")
export DSTDIR=$(dirname "$4")
mkdir $TMPDIR
cp "$3" $TMPDIR/$FILENAME
export SSHPASS=$1
sshpass -e sftp -oBatchMode=no -b - $2 << !
lcd $TMPDIR
cd $DSTDIR
put $FILENAME
bye
!
rm $TMPDIR/$FILENAME
rmdir $TMPDIR
답변
sftp는 배치 파일을 지원합니다.
man 페이지에서 :
-b batchfile
Batch mode reads a series of commands from an input batchfile instead of stdin.
Since it lacks user interaction it should be used in conjunction with non-interactive
authentication. A batchfile of `-' may be used to indicate standard input. sftp
will abort if any of the following commands fail: get, put, rename, ln, rm, mkdir,
chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink, and lmkdir. Termination
on error can be suppressed on a command by command basis by prefixing the command
with a `-' character (for example, -rm /tmp/blah*).
답변
또는 echo 'put {path to file}' | sftp {user}@{host}:{dir}
, unix와 powershell 모두에서 작동합니다.
답변
perl 및 system () 호출 내에서 사용할 때 아래와 같은 사소한 수정이 저에게 효과적이었습니다.
sftp {user}@{host} <<< $'put {local_file_path} {remote_file_path}'
답변
SCP 답변
OP가 SCP를 언급 했으므로 여기에 있습니다.
다른 사람들이 지적했듯이 SFTP는 업로드 구문이 다운로드 구문과 완전히 다르기 때문에 혼란 스럽습니다 . 같은 형식을 사용하면 기억하기 가 조금 더 쉬워집니다.
echo 'put LOCALPATH REMOTEPATH' | sftp USER@HOST
echo 'get REMOTEPATH LOCALPATH' | sftp USER@HOST
실제로 이것은 여전히 엉망이고 사람들이 여전히 SCP와 같은 “오래된”명령을 사용하는 이유입니다.
scp USER@HOST:REMOTEPATH LOCALPATH
scp LOCALPATH USER@HOST:REMOTEPATH
SCP는 안전하지만 구식입니다. 수정되지 않는 몇 가지 버그, 즉 서버 .bash_profile
가 메시지를 내 보내면 충돌이 발생합니다. 그러나 사용성 측면에서 개발자는 몇 년 앞서있었습니다.