openssh#006#scp免密拷贝数据

我们通常使用scp在服务器之间的copy数据,但需要每次输入账户密码才能完成copy。

比如我们欲将test.cpp文件从192.168.9.130拷贝到192.168.128服务器,一般执行流程如下图所示:

有时我们需要在脚本中自动将某些数据传输到另外一台机器上,每次输入密码则不那么方便,所以我们需要实现scp服务器间免密拷贝数据。

实现scp服务器间的密码拷贝数据,其方法一般有如下两步:

第一步,在本机生成SSH公私钥;

第二步,将本机生成的公钥拷贝到目标机器上,然后将公钥内容加入对应账号的 /home/{user}/.ssh/authorized_keys 文件内;

第一步,在本机生成SSH公私钥

在本机上,我们使用如下命令来生成公私钥对:

1
ssh-keygen -t rsa

此处我们生成公私钥时选择了rsa算法,其算法选项可以为:dsa,ecdsa,ecdsa-sk,ed25519,ed25519-sk,rsa。

该命令执行过程,如下图所示:

从上图可见,在命令执行过程中,我们没有配置公私钥的存储目录和文件名称,使用了ssh-keygen的默认选项。
该命令在当前用户 .ssh 目录下生成了 id_rsa(私钥文件) 和 id_rsa.pub(公钥文件)。

第二步,将本机生成的公钥拷贝到目标机器上,然后将公钥内容加入对应账号的 /home/{user}/.ssh/authorized_keys 文件内

实现该操作有如下两种方法。

第一种方法,我们使用ssh-copy-id命令,同时实现 将id_rsa.pub(公钥文件)拷贝到目标机公钥放入authorized_keys文件内 两项操作。

1
ssh-copy-id -i ~/.ssh/id_rsa.pub mancode@192.168.9.128

该命令的执行过程,如下图所示:

命令执行完毕后,我们可以到目标机器上验证下公钥是否已正确加入到 authorized_keys 文件内,验证方法如下图所示:

第二种方法,我们首先使用scp命令将id_rsa.pub(公钥文件)拷贝到目标机,然后再收到将id_rsa.pub放入authorized_keys文件内。

首先,在本机上使用scp拷贝id_ras.pub公钥文件,如下图所示:

1
scp ~/.ssh/id_rsa.pub mancode@192.168.9.128:/home/mancode/.ssh

然后,我们在目标机上操作,使用如下命令将公钥文件放入authorized_keys文件内,如下图所示:

1
2
3
echo "" | cat - id_rsa.pub >> authorized_keys 
# 或者
echo "" >> authorized_keys && cat id_rsa.pub >> authorized_keys

测试scp服务器间免密拷贝数据

完成上述两步后,我们测试下scp的密码拷贝数据,如下图所示:

由上图可见,当我们再次使用scp拷贝数据时,并没有要求输入密码,而是直接提示拷贝数据成功,可见经过上述两步后,我们已实现了scp服务器间的免密拷贝。