文章内容
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).
这个错误表明在连接目标服务器时,服务器拒绝了你的公钥,可能是由于以下几个原因:
公钥未添加到目标服务器: 确保你的公钥已经被添加到目标服务器上的
~/.ssh/authorized_keys
文件中。你可以手动将公钥内容添加到目标服务器上,或者使用ssh-copy-id
命令:
ssh-copy-id -i /path/to/public-key username@目标服务器IP
这将把你的公钥添加到目标服务器上,确保你能够通过密钥进行身份验证。
目标服务器上的权限设置: 确保目标服务器上的
~/.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
可能会报告错误或者只复制目录本身而不是其中的内容。
其它相关推荐:
2、Warning: the ECDSA host key for '[]:22' differs from the key for the IP address
评论列表