单线sftp从terminal

在一天中几次,我可能正在运行一个testing,我需要查看远程服务器上的日志文件。 我已经习惯了使用我的terminal进入远程服务器,并将所需的日志文件下拉到我的本地机器上的/tmp

我正在通过使用man sftp来查看选项,试图找出一种方法来基本上在一行中运行以下命令,以便我不必键入命令,按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 

我正在使用Mac OS X 10.8中的内置Terminal 。 谢谢。

更新九月2017 – tl;博士

从远程FTP服务器下载单个文件到您的机器:

 sftp username@hostname:remoteFileName localFileName 

从您的机器上传一个文件到远程ftp服务器:

 sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}' 

原始答案:

好吧,所以我觉得有点愚蠢。 但我知道了。 我几乎把它放在顶部:

 sftp user@host remoteFile localFile 

terminal中显示的唯一文档是这样的:

 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命令中将文件从本地计算机送到远程服务器,下面的user @Thariama公布了解决scheme来完成此操作。 帽子给他们提供额外的代码。

 sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}' 

要上传单个文件,您需要创build一个bash脚本。 如果您安装了sshpass类似于以下内容的应该可以在OS X上运行。

用法:

 sftpx <password> <user@hostname> <localfile> <remotefile> 

把这个脚本放在你的path的某个地方,并把它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支持batch file。

从手册页:

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