Kyl*_*yle 68 unix terminal sftp scp
在一天中有几次,我可能正在运行测试,我需要查看远程服务器上的日志文件.我已经习惯使用我的终端sftp
进入远程服务器并将所需的日志文件下拉到/tmp
我的本地计算机上.
我正在查看今天的选项man sftp
,试图找出一种基本上在一行中运行以下命令的方法,这样我就不必输入命令,按回车键,输入命令按回车键等.
(我现在应该做什么)
sftp myuser@myserver
--mypassword at prompt
lcd /tmp
get /dir/dir/dir/dir/file
quit
Run Code Online (Sandbox Code Playgroud)
我在查看之前未使用过man sftp
的参考资料时发现了scp
.我觉得这可能是我正在寻找的,但我没有看到一种方法来指定我想要安全复制文件的位置.
有人可以为我提供/dir/file
从远程服务器获取并下载到的方法/tmp/file_plus-my-description
吗?
我希望能够运行类似于常规UNIX副本的sftp或scp命令,如:
scp myuser@myserver /dir/file /tmp/file_plus-my-description
Run Code Online (Sandbox Code Playgroud)
我正在使用Terminal
Mac OS X 10.8中的内置功能.谢谢.
Kyl*_*yle 163
2017年9月更新 - tl;博士
从远程ftp服务器将单个文件下载到您的计算机:
sftp {user}@{host}:{remoteFileName} {localFileName}
Run Code Online (Sandbox Code Playgroud)
将单个文件从您的计算机上传到远程ftp服务器:
sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}'
Run Code Online (Sandbox Code Playgroud)
原始答案:
好的,所以我觉得有点愚蠢.但我明白了.我几乎把它放在顶部:
sftp user@host remoteFile localFile
Run Code Online (Sandbox Code Playgroud)
终端中显示的唯一文档是:
sftp [user@]host[:file ...]
sftp [user@]host[:dir[/]]
Run Code Online (Sandbox Code Playgroud)
但是,我发现这个网站在概要中显示了以下内容:
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[/]]]
Run Code Online (Sandbox Code Playgroud)
所以简单的答案是你只需要:
在用户和主机后执行远程文件和本地文件名.非常简单!
单行,sftp复制远程文件:
sftp username@hostname:remoteFileName localFileName
sftp kyle@kylesserver:/tmp/myLogFile.log /tmp/fileNameToUseLocally.log
Run Code Online (Sandbox Code Playgroud)
2016年2月更新
如果有人正在寻找相反的命令,并在一个单行 命令中将文件从本地计算机推送到远程服务器,sftp
下面的用户@Thariama发布了解决方案来实现这一点.帽子给他们提示额外的代码.
sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}'
Run Code Online (Sandbox Code Playgroud)
c z*_*c z 14
OP提到了SCP,所以这就是。
正如其他人指出的那样,SFTP 很令人困惑,因为上传语法与下载语法完全不同。如果您使用相同的形式,它会更容易记住:
echo 'put LOCALPATH REMOTEPATH' | sftp USER@HOST
echo 'get REMOTEPATH LOCALPATH' | sftp USER@HOST
Run Code Online (Sandbox Code Playgroud)
事实上,这仍然是一团糟,这就是为什么人们仍然使用“过时”的命令,例如 SCP:
scp USER@HOST:REMOTEPATH LOCALPATH
scp LOCALPATH USER@HOST:REMOTEPATH
Run Code Online (Sandbox Code Playgroud)
SCP 是安全的,但已经过时了。它有一些永远无法修复的错误,即如果服务器.bash_profile
发出消息就会崩溃。然而,在可用性方面,开发人员领先了几年。
要上传单个文件,您需要创建一个bash脚本.如果已sshpass
安装,则类似以下内容应适用于OS X.
用法:
sftpx <password> <user@hostname> <localfile> <remotefile>
Run Code Online (Sandbox Code Playgroud)
将此脚本放在路径中的某个位置并调用它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
Run Code Online (Sandbox Code Playgroud)
OpenSSHscp
从 8.7 开始支持 SFTP 协议。
从OpenSSH 9.0scp
开始,默认使用 SFTP 。
在 8.7 到 8.9 中,必须通过-s
参数选择 SFTP。
下载:
scp -s user@host:/remote/source/path /local/target/path
Run Code Online (Sandbox Code Playgroud)
上传:
scp -s /local/source/path user@host:/remote/target/path
Run Code Online (Sandbox Code Playgroud)