我有一台带有 SSH 的 Ubuntu 16.04 服务器,我已经配置了一个密钥对,因此我可以通过 SSH 连接到远程系统而无需密码,这可以正常工作。
我正在尝试从本地(系统 1)向远程(系统 2)进行 SCP,SCP 工作正常,但要求输入密码。我想使用密钥对进行非认证复制。
我已从网上查找了大量有关如何执行此操作的指南,但基本上可以归结为以下内容:
scp -i <path the PRIVATE key file> filetocopy [email protected]:~
我在互联网上找到的所有内容都表明这应该可行 - 但它一直要求输入远程(第二个)系统的密码,即使我知道密钥对可以正常工作,因为我可以将它用于 SSH。
令人恼火的是 - 如果以 root 身份运行,则与上述相同的命令将完美运行,无需密码请求 - 无论是通过“sudo”还是从提升的终端...
所以:
sudo scp -i <path the PRIVATE key file> filetocopy [email protected]:~
工作正常,但是:
scp -i <path the PRIVATE key file> filetocopy [email protected]:~
才不是。
根目录的 .ssh 文件夹中除了 known_hosts 文件之外没有其他文件(即没有密钥文件)
我应该怎么办?
答案1
看起来您已将root
密钥复制到远程服务器,但普通用户密钥并未正确复制。
ssh
并scp
应提供相同的反馈(登录到远程服务器与将文件复制到远程服务器的区别)
当密钥对根据需要复制到远程服务器时,命令scp
将是:
scp local-file-name user@remote-host:/full/path/remote-file-name
为了将用户密钥复制到远程服务器,你可以使用 ssh-复制-id
注意:您应该更换我的钥匙在下面的命令中,使用你的密钥文件的文件名
将密钥复制到服务器
创建 SSH 密钥后,可以使用 ssh-copy-id 命令将其安装为服务器上的授权密钥。密钥获得 SSH 授权后,无需密码即可访问服务器。
使用以下命令复制 SSH 密钥:
ssh-copy-id -i ~/.ssh/mykey user@host
这将登录到服务器主机,并将密钥复制到服务器,并通过将它们添加到 authorized_keys 文件中来配置它们以授予访问权限。复制可能会要求输入服务器的密码或其他身份验证。
仅将公钥复制到服务器。私钥绝不能复制到另一台机器。
测试新密钥
一旦密钥被复制,最好对其进行测试:
ssh -i ~/.ssh/mykey user@host
现在登录应该可以完成,无需输入密码。但请注意,该命令可能会要求输入您为密钥指定的密码。故障排除
答案2
您必须执行以下几件事才能通过 ssh 执行无需密码的 scp:
ssh-keygen
[Enter]
[Enter]
[Enter]
cd ~/.ssh
ssh-copy-id -i id_rsa.pub username@serverip/hostname
scp username@serverip:/file/to/copy /directory/to/save
这将起作用,如果您遇到任何错误,请更新。
答案3
我已将其整理好 - 我从两个系统中删除了所有密钥和密钥文件,并完成了设置新密钥文件的过程,并使用 ssh-copy-id 复制了文件。现在运行良好。
authorizes_keys 文件中肯定存在一些不为人知的损坏,可能会造成混乱。再次感谢。