文章内容

2023/11/16 1:07:17,作 者: 黄兵

scp 使用密钥复制文件

最近需要使用 scp 在两台 Ubuntu 服务器之间复制文件,A 服务器是源服务器,B 服务器是目标服务器,可以通过 A 服务器密钥的方式登录 B 服务器,下面是操作步骤:

执行如下命令:

scp -i /path/to/private-key /var/CDN/* username@目标服务器IP:/home/ubuntu/

替换以下部分:

/path/to/private-key:你的私钥文件的路径。

username:目标服务器上的用户名。

目标服务器IP:目标服务器的IP地址。

这个命令将 /var/CDN 目录下的所有文件复制到目标服务器的 /home/ubuntu/ 目录中。

确保你有读取 /var/CDN 目录的权限和在目标服务器上写入 /home/ubuntu/ 目录的权限。

注意:如果目标服务器上的目标目录不存在,scp 会自动创建它。


如果我们在执行上面的命令时候,出现如下错误:

Load key "/root/1.pem": bad permissions

出现这个错误表明私钥文件的权限设置有问题。为了确保安全性,ssh 要求私钥文件的权限不能太宽松。

我们可以使用以下命令更改私钥文件的权限:

chmod 400 /root/1.pem

这会将私钥文件的权限设置为只有所有者(即我们当前用户)具有读权限,而其他人没有任何权限。然后再尝试使用 scp 命令。

更新完权限后,我们再次使用如上命令复制文件。


如果出现如下错误:

ubuntu@192.168.1.1: Permission denied (publickey).

这个错误表明在连接目标服务器时,服务器拒绝了你的公钥,可能是由于以下几个原因:

  1. 公钥未添加到目标服务器: 确保你的公钥已经被添加到目标服务器上的 ~/.ssh/authorized_keys 文件中。你可以手动将公钥内容添加到目标服务器上,或者使用 ssh-copy-id 命令:

ssh-copy-id -i /path/to/public-key username@目标服务器IP
  1. 这将把你的公钥添加到目标服务器上,确保你能够通过密钥进行身份验证。

  2. 目标服务器上的权限设置: 确保目标服务器上的 ~/.ssh 目录和 ~/.ssh/authorized_keys 文件的权限设置正确。这两者的权限应该是:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

SSH 服务配置: 确保目标服务器上的 SSH 服务配置允许使用密钥进行身份验证。检查目标服务器上的 /etc/ssh/sshd_config 文件,确保以下行没有被注释掉:

PubkeyAuthentication yes

并确保 SSH 服务被重新加载:

sudo service ssh restart

如果我们需要将目录中的所有文件和文件夹都复制过去,需要增加 -r 参数,以递归方式复制整个目录及其内容。这样,scp 将能够复制目录中的所有文件和子目录。

例如,如果我们需要复制 /var/CDN 目录到目标服务器的 /home/ubuntu/ 目录,我们执行的 scp 命令应该类似于:

scp -i /path/to/private-key -r /var/CDN/* username@目标服务器IP:/home/ubuntu/

请注意,-r 参数指示 scp 递归地处理目录。如果你忘记了 -r 参数,并且尝试复制目录,scp 可能会报告错误或者只复制目录本身而不是其中的内容。


其它相关推荐:

1、PuTTY key format too new

2、Warning: the ECDSA host key for '[]:22' differs from the key for the IP address

3、SCP key 相关操作

4、Ubuntu The following packages have been kept back

5、putty如何使用ssh key登录服务器

分享到:

发表评论

评论列表