【Linux 应用开发】2-Linux scp 命令远程传输文件

0. 背景

正点原子在 Linux C 教程中,提到scp命令,

图1 正点原子 Linux 文档

这是一种 Linux 系统之间的无线传输数据的一个方式。因此,可以用这个命令由 Unbuntu 主机交叉编译后,向开发板传输程序

(此外,也可用 ftp/nfs/tftp 等传输,野火教程用 nfs 进行数据传输,图片如下:

但个人感觉 scp 命令更加轻巧快捷、直接了当。)

 图2 野火 Linux 文档

现摘抄网络上搜集到的 scp 命令:

(背景介绍)

一般情况,本地网络跟远程网络进行数据交抱,或者数据迁移,常用的有三种方法:

一是 ftp,
二是 wget /fetch
三是 rsync 
大型数据迁移用rysync,其次用fetch/wget ,最次是ftp,最慢是ftp.

这几天,在忙数据迁移时,用到ssh的scp方法来迁移数据。速度与效果都很好。特别是现在许多服务器为了安全,都会改ssh默认的22端口,改成一个特殊的端口。所以。在scp或者sftp时,就要指定通过什么端口来迁移。

现在,特记下这个特殊端口来scp的命令。

Linux scp命令用于Linux之间复制文件和目录,具体如何使用这里好好介绍一下,从本地复制到远程、从远程复制到本地是两种使用方式。这里有具体举例:
View Code

 

1. Linux scp 命令基本格式

scp 可以在 2个 linux 主机间复制文件;

命令基本格式:

scp [可选参数] file_source file_target

最简单的应用如下(将 本地文件 复制到 远程)

scp [本地用户名 @IP 地址:]文件名1 远程用户名@IP 地址:文件名2

[ 本地用户名 @IP 地址 :] 可以不输入 ;可能需要输入远程用户名所对应的密码 .

可能有用的几个参数 :

-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .
-C 使能压缩选项 .
-P 选择端口 . 注意 -p 已经被 rcp 使用 .
-4 强行使用 IPV4 地址 .
-6 强行使用 IPV6 地址 .

======

1.1 将 本地文件 复制到 远程

======

* 命令格式:

scp local_file remote_username@remote_ip:remote_folder
//或者
scp local_file remote_username@remote_ip:remote_file
//或者
scp local_file remote_ip:remote_folder
//或者
scp local_file remote_ip:remote_file

第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;

第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;

* 例子:

scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music
scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music/001.mp3
scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music
scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music/001.mp3

* 复制目录:

* 命令格式:

scp -r local_folder remote_username@remote_ip:remote_folder
//或者
scp -r local_folder remote_ip:remote_folder

第1个指定了用户名,命令执行后需要再输入密码;

第2个没有指定用户名,命令执行后需要输入用户名和密码;

* 例子:

scp -r /home/space/music/ root@www.cumt.edu.cn:/home/root/others/

scp -r /home/space/music/ www.cumt.edu.cn:/home/root/others/

上面 命令 将 本地 music 目录 复制 到 远程 others 目录下,即复制后有 远程 有 ../others/music/ 目录

 

1.2 将 远程文件 复制到 本地

将 远程文件 复制到 本地,只要将上面的“本地文件 复制到 远程 的命令”的 后2个参数调换顺序即可;

例如:

scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/1.mp3

scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/

 

关于scp的安全方面

在此必须注意使用者的权限是否可读取远程上的档案(文件),若想知道更多关于 scp 的使用方法,可去看看 scp 的使用手册。
ssh-keygen 产生公开钥 (pulib key) 和私人钥 (private key),以保障 ssh 联机的安性, 当 ssh 连 shd 服务器,会交换公开钥上,系统会检查 /etc/ssh_know_hosts 内储存的 key,如果找到客户端就用这个 key 产生一个随机产生的session key 传给服务器,两端都用这个 key 来继续完成 ssh 剩下来的阶段。
它会产生 identity.pubidentity 两个文件,私人钥存放于identity,公开钥 存放于 identity.pub 中。


执行:
scp identity.pub k@linux1.ee.oit.edu.tw:.ssh/authorized_keys
可以使用 scp 将 identity.pub copy 到远程机器的家目录下.ssh下的authorized_keys。 .ssh/authorized_keys(这个 authorized_keys 档案相当于协议的 rhosts 档案), 之后使用者能够不用密码去登入。RSA的认证绝对是比 rhosts 认证更来的安全可靠。

 

3. scp 相关问题的解决

 host key for 192.168.******* has changed and you have requested strict checking.

解决方案:在终端上输入以下命令:

ssh-keygen -R "你的远程服务器ip地址"  

目的是清除你当前机器里关于你的远程服务器的缓存和公钥信息,注意是大写的字母“R”。

原因分析:是因为本地的SSH信息便失效了(比如云服务器重装了系统)使用SSH连接相同的ip地址时使用的是失效的协议信息,所以会报错,使用上述命令便可以清除known_hosts里旧缓存文件。

 

posted @ 2023-07-31 16:53  FBshark  阅读(432)  评论(0编辑  收藏  举报