咨询PowerShell下通过SSH复制id_rsa.pub公钥到服务器的方法及操作失败问题
咨询PowerShell下通过SSH复制id_rsa.pub公钥到服务器的方法及操作失败问题
Hey there! Let's break down how to copy your id_rsa.pub public key to a server via SSH in PowerShell, and figure out why it's failing even when you enter the right credentials.
一、标准操作步骤
方法1:使用ssh-copy-id(推荐,适用于Windows 10/11自带OpenSSH的情况)
- 首先确认你的公钥文件位置:默认在
C:\Users\<你的Windows用户名>\.ssh\id_rsa.pub,可以用这条命令验证文件存在:Get-ChildItem C:\Users\<你的Windows用户名>\.ssh\ - 执行复制命令,替换成你的服务器信息:
ssh-copy-id -i C:\Users\<你的Windows用户名>\.ssh\id_rsa.pub <服务器用户名>@<服务器IP或域名> - 按提示输入服务器的登录密码,完成后就可以尝试无密码SSH登录了。
方法2:手动复制(适用于没有ssh-copy-id的旧系统)
如果你的PowerShell里没有ssh-copy-id工具,可以手动完成:
- 读取并复制本地公钥内容:
把输出的全部文本复制下来,确保没有遗漏或多余字符。Get-Content C:\Users\<你的Windows用户名>\.ssh\id_rsa.pub - SSH登录到服务器:
输入密码完成登录。ssh <服务器用户名>@<服务器IP或域名> - 在服务器端配置目录和文件权限(这一步很重要,权限错误会导致认证失败):
mkdir -p ~/.ssh && chmod 700 ~/.ssh - 将复制的公钥追加到授权文件,并设置正确权限:
echo "<你复制的公钥完整内容>" >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys - 输入
exit退出服务器连接,再尝试SSH登录,应该就不需要输入密码了。
二、排查输入正确密码仍失败的原因
如果上面的步骤都做了还是不行,从这几个方向排查:
- 检查本地公钥文件:确认
id_rsa.pub存在,路径拼写正确,不要误用到id_rsa私钥文件。 - 检查服务器端权限:
.ssh目录必须是700权限,authorized_keys必须是600权限,这两个权限如果太宽松,SSH会拒绝公钥认证。可以在服务器上用ls -ld ~/.ssh和ls -l ~/.ssh/authorized_keys查看权限。 - 检查SSH服务器配置:登录服务器后,打开
/etc/ssh/sshd_config文件,确认以下配置项是启用的:PubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys
修改后需要重启SSH服务:# 对于Systemd系统(Ubuntu 16.04+/CentOS 7+) sudo systemctl restart sshd # 对于旧版SysVinit系统 sudo service sshd restart
- 查看调试日志:用 verbose 模式登录服务器,查看详细的认证过程,能快速定位问题:
日志里会显示公钥是否被服务器接收、是否匹配等信息,比如出现ssh -v <服务器用户名>@<服务器IP或域名>offering public key但后面跟着server refused,就说明服务器端有配置问题。 - 确认公钥内容完整:手动复制时有没有漏了开头的
ssh-rsa或者结尾的主机名/用户名部分,必须完整复制整个公钥字符串。
备注:内容来源于stack exchange,提问作者user531729




