我正在尝试自动执行从一台主机到另一台主机的文件复制任务。首先,我从自己的机器创建一个私钥-公钥对(没有密码),然后使用密码将公钥上传到接收方主机 B。~/.ssh/authorized_keys
之后,我测试我是否可以通过 ssh 访问 B,并且它工作正常。然后,我将我的私钥复制到发送方主机 A。我尝试使用 scp 复制文件,但它要求我输入密码,尽管我确定我没有设置任何密码。我还尝试使用带有密码的密钥,但它没有接受。scp -i ~/.ssh/my_private_key test.png [email protected]:/root/test.png
当我直接在 A 中创建私钥-公钥时,它可以正常工作。这与将私钥从一个主机移动到另一个主机有关吗?有什么解决方法吗?(就我而言,我将使用来自最终用户的私钥,因此它们肯定不会在本地创建)。
答案1
您永远不需要复制私钥。
查看您引用的命令:
scp -i ~/.ssh/my_private_key test.png [email protected]:/root/test.png
要使它正常工作,您需要将对应的公钥my_private_key
放在authorized_keys
远程服务器上的文件中。由于您要发送给 root 用户,因此它应该位于用户 root 的authorized_keys
文件中。
您可能需要考虑安装和使用钥匙链软件包,它位于许多 Linux 发行版的存储库中。安装后,您创建一个~/.keychain
目录,只有在启动后第一次登录时才会提示您输入密码。您可以注销并再次登录,并且不会出现提示,因为解密的密钥存储在内存中。
如果您希望 cron 作业无密码复制文件,他们可以 source ~/.keychain${HOSTNAME}-sh
。
或者,您可以使用ssh-agent
,但每次登录时都需要重新输入密码。