You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

咨询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工具,可以手动完成:

  1. 读取并复制本地公钥内容:
    Get-Content C:\Users\<你的Windows用户名>\.ssh\id_rsa.pub
    
    把输出的全部文本复制下来,确保没有遗漏或多余字符。
  2. SSH登录到服务器:
    ssh <服务器用户名>@<服务器IP或域名>
    
    输入密码完成登录。
  3. 在服务器端配置目录和文件权限(这一步很重要,权限错误会导致认证失败):
    mkdir -p ~/.ssh && chmod 700 ~/.ssh
    
  4. 将复制的公钥追加到授权文件,并设置正确权限:
    echo "<你复制的公钥完整内容>" >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
    
  5. 输入exit退出服务器连接,再尝试SSH登录,应该就不需要输入密码了。

二、排查输入正确密码仍失败的原因

如果上面的步骤都做了还是不行,从这几个方向排查:

  • 检查本地公钥文件:确认id_rsa.pub存在,路径拼写正确,不要误用到id_rsa私钥文件。
  • 检查服务器端权限.ssh目录必须是700权限,authorized_keys必须是600权限,这两个权限如果太宽松,SSH会拒绝公钥认证。可以在服务器上用ls -ld ~/.sshls -l ~/.ssh/authorized_keys查看权限。
  • 检查SSH服务器配置:登录服务器后,打开/etc/ssh/sshd_config文件,确认以下配置项是启用的:
    • PubkeyAuthentication yes
    • AuthorizedKeysFile .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

火山引擎 最新活动