ssh无密码登陆

展开思考过程

在 Cygwin 中设置无密码登录服务器(基于 SSH 密钥认证),需通过以下步骤完成:

1. 生成 SSH 密钥对

在 Cygwin 终端中执行以下命令生成密钥对(推荐使用 Ed25519 算法):

ssh-keygen -t ed25519 -C "your_email@example.com"

  • 按提示选择密钥保存路径(默认:\\~/.ssh/id_ed25519)
  • 直接回车跳过设置密码(实现无密码登录)

2. 上传公钥到服务器

方法一:使用 ssh-copy-id(推荐)

ssh-copy-id -i \\~/.ssh/id_ed25519.pub username@server_ip

  • 输入服务器密码完成上传
  • 若提示命令不存在,需先安装 OpenSSH 客户端:apt-cyg install openssh

方法二:手动复制公钥

  1. 查看公钥内容:

    cat \\~/.ssh/id_ed25519.pub

  2. 登录服务器,将公钥粘贴到 \\~/.ssh/authorized_keys 文件中:

    mkdir -p \\~/.ssh
    chmod 700 \\~/.ssh
    echo "公钥内容" >> \\~/.ssh/authorized_keys
    chmod 600 \\~/.ssh/authorized_keys

3. 验证无密码登录

ssh username@server_ip

若直接登录成功,则配置完成。

4. 常见问题排查

权限问题

  • 本地密钥权限

    chmod 600 \\~/.ssh/id_ed25519
    chmod 644 \\~/.ssh/id_ed25519.pub

  • 服务器端权限

    chmod 700 \\~/.ssh
    chmod 600 \\~/.ssh/authorized_keys

SSH 配置检查

确保服务器 /etc/ssh/sshd_config 包含以下配置:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

修改后重启 SSH 服务:

sudo systemctl restart sshd

调试连接

使用 -v 参数查看详细错误:

ssh -v username@server_ip

5. 进阶配置(可选)

自定义密钥名称

生成密钥时指定名称:

ssh-keygen -t ed25519 -f \\~/.ssh/my_custom_key

登录时指定密钥:

ssh -i \\~/.ssh/my_custom_key username@server_ip

配置 SSH 别名

在 \\~/.ssh/config 中添加:

Host myserver
HostName server_ip
User username
IdentityFile \\~/.ssh/id_ed25519

之后可直接通过别名登录:

ssh myserver

总结

通过以上步骤,可在 Cygwin 中实现无密码 SSH 登录服务器。核心要点:

  1. 生成密钥对时不设置密码
  2. 确保本地和服务器端的文件权限正确;
  3. 优先使用 ssh-copy-id 简化操作;
  4. 通过调试命令(ssh -v)快速定位问题。