服务器之间 scp 免密互传数据

通过设置私钥,可以实现在不同linux服务器之间,用 scp 免密传输文件和目录的目的。

scp 传输数据

Linux系统中的 cp 命令可以用于同一服务器上文件和目录的复制,而不同的服务器之间文件和目录的复制可以用 scp 来实现。

这里的服务器是指联网的,有独立 Linux 系统的计算机,可以是超级计算机,也可以是普通台式计算机。

scp 是 secure copy 的缩写,使用了 ssh 连接和加密方式,安全性很高。

用 scp 进行拷贝数据时,占用的资源比较少,不影响系统同时运行大内存的任务。

在不同的服务器之间,如果配置好私钥,可以使用 scp 来进行传输数据,而不需要再输入密码

本文介绍下这种借助私钥,用 scp 在不同服务器之间传输数据的方法。

首先检查服务器的 ssh 密钥文件,如果服务器上没有,运行“ssh-keygen -t rsa”命令,在“~/.ssh”目录下生成了 id_rsa 和 id_rsa.pub 两个密钥文件。

假设现在有两个服务器 A 和 B,IP 分别为123.123.123.1 和 123.123.123.2,端口分别为1001和1002。

要在 A 和 B 两个服务器之间免密码互传数据,需要在两个服务器上有彼此私钥 id_rsa 的备份。

将 A 服务器上的“~/.ssh/id_rsa”拷贝到 B 服务器上,可以重命名为“id_rsaA”。

同样的,将 B 服务器上的“~/.ssh/id_rsa”拷贝到 A 服务器上,重命名为“id_rsaB”。

另外需要注意,文件 id_rsaA 和 id_rsaB 的权限要足够小,可以用 chmod 500 命令来进行设置。

这样就可以在两个服务器之间互传数据了。如果已经登录到 A 服务器,要将 A 服务器上的 test.file 传输到 B 服务器的 “/home/usr” 路径下,可以用如下命令:

反过来也是可以适用的,调换一下文件的位置即可。如果已经登录了 A 服务器,将 B 服务器上的文件 “/home/usr/test.file” 复制到 A 服务器,可以用如下命令:

如果要拷贝目录,需要添加“-r”。

注意事项:

第一次运行 scp 时,~/.ssh/known_hosts 文件会记录登录用户和远程登录用户的ssh-rsa,但这里的 ssh-rsa 并不是 id_rsa,而相当于RSA key fingerprint,只在第一次登录时记录。但是在之后的运行中,如果私钥不对应,scp也无法顺利运行。

所以如果服务器进行了重装或者更换了 id_rsa,再次运行 scp 时,需要首先在~/.ssh/known_hosts 中删除以前远程登录的记录。

另外,还有个比较方便的小技巧,如果你有多个服务器,可以将多个服务器的密钥设置为相同,这样,在互传数据会方便一点。当然了,多个服务器公用一套密钥,安全性会降低,较适合局域网的用户。

scp主要参数:

-1: 强制scp命令使用协议ssh1

-2: 强制scp命令使用协议ssh2

-B: 使用批处理模式

-C: 允许压缩

-p:保留原文件的修改时间,访问时间和访问权限。

-q: 不显示传输进度条。

-r: 递归复制整个目录。

-v:详细方式显示输出。

-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。

-l limit:限定用户所能使用的带宽,以Kbit/s为单位。

-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,

-P port:注意是大写的P, port是指定数据传输用到的端口号

-S program:指定加密传输时所使用的程序

— End —

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180424G1P9H700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券