centos平台scp通过密钥远程复制文件(免密登录)

一,说明:两台机器的平台和ip

1,a服务器:

centos8:ip:121.122.123.47

版本

[root@yjweb ~]# cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core) 

 

2,    j服务器:

centos6:ip:121.122.7.134

版本:

[root@os3 ~]# cat /etc/redhat-release
CentOS release 6.10 (Final)

 

我们的目示是通过scp程序把a服务器上的文件复制到j服务器上

说明:ip地址仅供演示,非真实

说明:刘宏缔的架构森林是一个专注架构的博客,

网站:https://blog.imgtouch.com
本文: https://blog.imgtouch.com/index.php/2023/05/21/centos8linuxscp-tong-guo-mi-yao-yuan-cheng-fu-zhi-wen-jian-mian-mi-deng-lu/

         对应的源码可以访问这里获取: https://github.com/liuhongdi/

 说明:作者:刘宏缔 邮箱: 371125307@qq.com

 

二,在a服务器上生成密钥:

1,生成密钥

[root@yjweb ~]# ssh-keygen -t rsa

说明:中间一路回车即可,

不要设置密码

 

说明:-t参数可以指定四种算法类型 

[-t dsa | ecdsa | ed25519 | rsa]

我们选择 rsa

 

说明:查看参数可以使用通用的帮助命令:

[root@yjweb ~]# man ssh-keygen 

 

2,密钥生成后,可以从用户的home目录下.ssh目录看到

[root@yjweb ~]# ls .ssh/
authorized_keys  id_rsa  id_rsa.pub  known_hosts

 

三,从a服务器复制公钥到j服务器

1,用ssh-copy-id命令复制公钥到j服务器上

[root@yjweb ~]# ssh-copy-id -i .ssh/id_rsa.pub root@121.122.7.134
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub"
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@121.122.7.134's password:
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh 'root@121.122.7.134'"
and check to make sure that only the key(s) you wanted were added.

 

说明:ssh-copy-id属于这个rpm包,如发现不存在可以通过yum安装

[root@yjweb ~]# whereis ssh-copy-id
ssh-copy-id: /usr/bin/ssh-copy-id /usr/share/man/man1/ssh-copy-id.1.gz
[root@yjweb ~]# rpm -qf /usr/bin/ssh-copy-id
openssh-clients-8.0p1-4.el8_1.x86_64

 

2,登录到j服务器,查看authorized_keys

 

[root@os3 ~]# more .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDiZNKuLsJqi0M......

 

可以看到我们在a服务器的公钥已经成功添加到了j服务器的 authorized_keys文件上

 

四,从a服务器用scp复制一个文件到j服务器

      注意看是否会提示输入j服务器的密码

1,检查j服务器上的目标文件夹

[root@os3 test]# ll /data/dev/think_file/test/
total 0

 

2,在a服务器上执行scp命令

[root@yjweb orig]# scp -P 22 /data/web/think_file/cover/orig/1/10.gif root@121.122.7.134:/data/dev/think_file/test/

 

说明:

-P 22:   在此处指定目标服务器的端口
root 登录目标服务器用的账号
121.122.7.134 目标服务器用的ip
/data/dev/think_file/test/  在目标服务器上的路径

 

3,回到j服务器,再次检查测试用的目标文件夹

[root@os3 test]# ll /data/dev/think_file/test/
total 1300
-rw-r--r-- 1 root root 1330533 Mar 16 14:54 10.gif

 

五,如何在远程服务器上创建目录

[root@yjweb ~]# ssh -p 22 root@121.122.7.134 "mkdir -p /data/dev/think_file_test/cover/orig/1/"

说明: 

-p : 用来指定目标服务器的端口号

 

六,如何复制一整个目录到目标机器?

1,加参数 -r即可

[root@yjweb web]# scp -P 22 -r /data/web/think_file/cover/orig/1/ root@121.122.7.134:/data/dev/think_file/test/
7.gif                                                                        100%  548KB 489.4KB/s   00:01
9.gif                                                                        100%  542KB 700.2KB/s   00:00
11.png                                                                       100%  997KB   1.4MB/s   00:00
10.gif                                                                       100% 1299KB   1.3MB/s   00:00
8.gif                                                                        100%  440KB 448.9KB/s   00:00

 

2,一点值得说明的知识:

-r      Recursively copy entire directories.  Note that scp follows symbolic links encountered in the tree traversal.

-r 用来复制整个目录

 

需要注意的是scp会把符号链接下的文件也复制过来

如何避免这个问题?

可以先把包含符号链接的源目录打包成tar包,
远程复制tar包过来后再解开

 

posted @ 2020-03-17 10:12  刘宏缔的架构森林  阅读(2489)  评论(0编辑  收藏  举报