通过SSH传输文件

我在命令行上SSHing到一个远程服务器,并试图用scp命令将一个目录复制到我的本地机器上。然而,远程服务器返回这个“usage”消息:

[Stewart:console/ebooks/discostat] jmm% scp -p ./styles/
usage: scp [-1246BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 [...] [[user@]host2:]file2
[Stewart:console/ebooks/discostat] jmm%

我希望能够双向传输文件。从我读到的,我认为上面的命令可以用于下载,而scp -p [localpath] [remotepath]用于上传?

744420 次浏览

不,无论你以哪种方式复制,你仍然需要scp [from] [to]

不同的是,你需要scp -p server:serverpath localpath

你需要在某个地方scp一些东西。你有scp ./styles/,所以你说的是安全复制./styles/,而不是复制到哪里。

一般来说,如果你想下载,它会这样:

# download: remote -> local
scp user@remote_host:remote_file local_file

其中local_file可能实际上是一个存放你要复制的文件的目录。上传则相反:

# upload: local -> remote
scp local_file user@remote_host:remote_file

如果你想复制整个目录,你需要-r。把scp想象成cp,除了你可以用user@remote_host:file指定一个文件,也可以只指定本地文件。

编辑:如注释中所述,如果本地和远程主机上的用户名相同,则在指定远程文件时可以省略用户。

如果拷贝到/从你的台式机,使用WinSCP,或者如果在Linux上,Nautilus通过连接到服务器选项支持SCP。

SCP只能将文件复制到运行sshd的机器上,因此需要在运行SCP的机器上运行远程机器上的客户端软件。

如果在命令行上复制,使用:

# copy from local machine to remote machine
scp localfile user@host:/path/to/whereyouwant/thefile

# copy from remote machine to local machine
scp user@host:/path/to/remotefile localfile

您需要同时指定源和目标,如果您想复制目录,则应该查看-r选项。

因此,递归复制/home/user/whatever从远程服务器到你的当前目录:

scp -pr user@remoteserver:whatever .