web-dev-qa-db-ja.com

ターミナルからの単一行sftp

1日中数回、リモートサーバー上のログファイルを調べる必要があるテストを実行している場合があります。ターミナルを使用してリモートサーバーにsftpし、目的のログファイルをローカルマシンの/tmpにプルダウンすることに慣れてきました。

私はコマンドを入力し、Enterを押し、コマンドを入力する必要がないように、基本的に次のコマンドを1行で実行する方法を見つけようとして_man sftpを使用してオプションを探していました入力など.

(私が今していること)

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

Mac OS X 10.8の組み込みTerminalを使用しています。ありがとう。

66
Kyle

2017年9月に更新-tl; dr

ダウンロード単一のファイルをリモートFTPサーバーからマシンに:

sftp {user}@{Host}:{remoteFileName} {localFileName}

Uploadマシンから単一のファイルをリモート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月更新

誰もがこれを逆にするコマンドを探している場合と、Pushローカルコンピューターからリモートサーバーに1行でファイルをプッシュするsftpコマンド、ユーザー以下の@Thariamaは、それを達成するためのソリューションを投稿しました。余分なコードについては、彼らに帽子のヒント。

sftp {user}@{Host}:{remote_dir} <<< $'put {local_file_path}'
156
Kyle

単一のファイルをアップロードするには、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
6
sstur

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*).
3