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