1、首先了解一下scp命令是什么以及用法?
scp命令是Secure Copy的缩写,是用于在不同主机之间进行文件传输的命令。cp是本机复制文件,scp就是基于ssh加密远程拷贝,它可以通过加密的方式安全地将文件从一个主机复制到另一个主机。scp命令在Linux和Unix系统中常用。
常用选项包括:
-r
:递归复制整个目录。-P
:指定端口号。-p
:保留原始文件的时间戳和权限信息。-i
:使用指定的身份验证文件。
示例用法:
1.1从本地复制文件到远程主机:
scp /data/localfile.text user@remotehost:/data/remotefile
- 2从远程主机复制文件到本地:
scp user@remotehost:remotefile.text /localfile/
- 3从本地复制整个目录到远程主机:
scp -r localdir user@remotehost:remotedir
2、解决远程传输时权限被拒绝
root@test:~# scp /data/test.txt root@12.11.13.34:/tmp/
Permission denied (publickey).
lost connection
使用scp命令如果有以上的提示,就是没有权限,需要开启权限;
解决方案:
2.1.配置sshd_config文件
登录远程服务器,将/etc/ssh/sshd_config文件中的PasswordAuthentication no 改为PasswordAuthentication yes
该完配置之后,用以下命令,重启一下sshd服务
root@GGGG:~# systemctl restart sshd
到这一步为止 ,两台服务器之间可以使用scp命令互相传文件了,但是还是需要输入root密码;
比如有时候不知道root的密码,例如是通过一些堡垒机跳板机之类的登录服务器的,这些时候就不知道root的密码;这个时候就通过设置公钥私钥实现免密传输。
3、通过设置公钥私钥实现免密传输
3.1生成公钥和私钥
执行以下命令,一直回车就行
root@GGG:~# ssh-keygen -t rsa
命令执行完毕后会在目录~/.ssh/产生两个文件,id_rsa,id_rsa.pub,这是生成一个RSA密钥对,并将私钥保存在 ~/.ssh/id_rsa
文件中,将公钥保存在 ~/.ssh/id_rsa.pub
文件中。
3.2拷贝公钥到远程服务器
拷贝本机服务器id_rsa.pub文件拷贝到B服务器的root用户目录下的.ssh目录下,并且改名为authorized_keys 。(若远程服务器已存在authorized_keys文件,只需要拷贝本地服务器id_rsa.pub文件内容到远程服务器authorized_keys文件中)