scp命令使用密钥免密码传输文件


常规情况下使用scp命令,在输入了相关的命令之后,一般是需要输入密码进行传输的,但是大家都懂的,在定时任务的脚本里面的时候是不会有人帮你去定时输入密码的,因此只能寻找一种方案实现,寻来寻去,找到的是使用密钥的形式进行访问传送文件数据。

准备

  • 接收文件的服务器:192.168.1.1(假设,毕竟1.1一般都是网关)
  • 发送文件的服务器:192.168.1.2
    也就是说192.168.1.2通过scp命令把文件传递到192.168.1.1服务器上

192.168.1.2电脑上操作

  1. 生成公钥

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    # 执行如下命令,生成客户端公钥
    [root@xxxxxxxcentos ~]# ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):# 直接回车
    Enter passphrase (empty for no passphrase):# 直接回车
    Enter same passphrase again:# 直接回车
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:# 直接回车
    SHA256:xxxxxxxxx/xxxxxxxx root@Vxxxxxxxxx-xxxxx
    The keys randomart image is:
    +---[RSA 2048]----+
    | |
    | . o |
    |. xxxxxx |
    |.= B . |
    |BoX * . S |
    |oOssssss |
    |xxxxx=.. . |
    |B=+xxxxx .+. |
    |oxxxxxx .E |
    +----[SHA256]-----+
  2. 默认情况下会在/root/.ssh/下会生成几个文件,分别是

    1
    2
    3
    4
    -rw-r--r-- 1 root root  413 Apr  8 23:09 authorized_keys
    -rw------- 1 root root 1679 Apr 8 22:58 id_rsa
    -rw-r--r-- 1 root root 401 Apr 8 22:58 id_rsa.pub
    -rw-r--r-- 1 root root 177 Jul 23 2020 known_hosts
  3. 复制一份id_rsa.pub,并改名为authorized_keys

    1
    [root@xxxxxxxcentos ~]# cp id_rsa.pub authorized_keys

192.168.1.1电脑上操作

  1. 将电脑192.168.1.2上刚刚处理的authorized_keys文件上传到192.168.1.1服务器的/root/.ssh/文件夹下
  2. 这个时候从192.168.1.2上scp命令复制文件到192.168.1.1上的时候就不需要密码了
    1
    [root@xxxxxxxcentos ~]# scp xxxx.dmp root@192.168.1.1:/root/

注意事项

  • 如果不是root用户的时候,生成的id_rsa.pub文件会在/home/用户名/.ssh/文件夹下
  • 如果发送文件到远程服务器使用的用户不是root的时候,需要把authorized_keys放在对应的用户下的.ssh文件夹下