在linux下一般用scp这个命令来通过ssh传输文件。

一、SCP进行文件复制
在没有FTP等文件传输工具的情况下,SCP是非常有价值的文件传输工具,可以轻松实现本地和远程服务器之间的文件交互。

1、从服务器上下载文件
scp username@servername:/path/filename

例如scp root@192.168.0.101:/var/www/test.txt  把192.168.0.101上的/var/www/test.txt 的文件下载到当前目录

2、上传本地文件到服务器
scp /path/filename username@servername:/path   

例如scp /var/www/test.php  root@192.168.0.101:/var/www/  把本机/var/www/目录下的test.php文件上传到192.168.0.101这台服务器上的/var/www/目录中

 

3、从服务器下载整个目录
scp -r username@servername:/var/www/local_dir/

例如:scp -r root@192.168.0.101:/var/www/test  /var/www/

4、上传目录到服务器
scp  -r local_dir username@servername:remote_dir
例如:scp -r test  root@192.168.0.101:/var/www/   把当前目录下的test目录上传到服务器的/var/www/ 目录

 

注:目标服务器要开启写入权限。

转载自:http://www.cnblogs.com/jiangyao/archive/2011/01/26/1945570.html

二、SSH管道进行文件传输

虽然SCP可以实现本地和远程服务器之间的文件传输,然而SCP不能跨越子目录,也不能保留文件的所有者和权限位。而SSH在没有登陆交互式会话时,是接收标准输入(STDIN)并将结果打印到标准输出(STDOUT),这就意味着可以通过SSH和管道命令来实现本地和远程服务器之间的数据交互和文件传输。

1、连接SSH时执行控制脚本

在某些情况下,并不需要远程登陆到服务器上,而仅仅是需要启动某个应用脚本,这时只需要在SSH连接中加入相应的命令操作

命令格式为:ssh user@server "cd /directory; mkdir new directory;....."

2、使用SSH上传文件到远程服务器

命令格式为:tar -cvzf - /directory | ssh user@server "cat > file.tar.gz"

或者直接解压:tar -cvf - /directory | ssh user@server "tar -xf -"

PS:在本命令中-是必不可少的,创建压缩包的-的作用是将tar打包后的内容直接显示在标准输出,而并不是将其写入到某个文件中;而解压缩包中“-”的作用是从标准输入中获取压缩包的内容,而不是从某个文件中进行读取。这是个人理解,并没有找到准确的说明,如有读者知道明确说法,烦请告知。

3、使用SSH将远程服务器上的文件拷贝到本地

命令格式为:ssh user@server "cat file.tar.gz" | tar -xf -

或者使用命令:ssh user@server "cd /directory && tar -cvf - /directory" > file.tar.gz

 

 

例如:我将本机的~/code4.03/kernel要传输到远程服务器的/media/新加卷 ,可以使用

tar -cvf - /home/username1/code-4.03/kernel/ | ssh username2@server "cd /media/新加卷 ;tar -xf -"

传送过去的路径为/media/新加卷/home/username1/code-4.03/kernel/

如果你不想解压路径中包含/home/可以修改命令如下:

tar -cvPf - /home/username1/code-4.03/kernel/ | ssh username2@server "cd /media/新加卷 ;tar -xf -"

 

转载自:http://hi.baidu.com/hengbo0926/item/085de68280ca4bdf5e0ec10b