如何在Windows与Linux(Ubuntu/CentOS)之间配置SSH免密登录

发布于:2024-12-18 ⋅ 阅读:(146) ⋅ 点赞:(0)

在日常开发与运维工作中,无论是在 Windows 上管理 Linux 服务器,还是在 Linux 上登录其他主机,实现 SSH 免密登录都能显著提升操作效率。本文将详细介绍如何在 Windows 与 Linux 系统之间配置 SSH 免密登录,并为多种场景提供实际解决方案。


一、从 Windows 到 Linux 的免密登录配置

1. 确认并安装 OpenSSH 客户端

在 Windows 客户端上,需要有 SSH 客户端以便与 Linux 服务器通信。Windows 10 及以上版本通常已内置 OpenSSH 客户端,可通过以下步骤进行确认与安装:

  • 确认是否已安装
    打开命令提示符(CMD)或 PowerShell,输入:

    ssh
    

    若出现 SSH 使用说明,表示已安装。若提示找不到该命令,可执行以下操作安装:

  • 安装 OpenSSH 客户端
    打开 “设置” -> “应用” -> “可选功能”,查找并安装“OpenSSH 客户端”。
    或在 PowerShell 中执行:

    Add-WindowsCapability -Online -Name OpenSSH.Client*
    

2. 在 Windows 端生成 SSH 密钥对

在 Windows 上生成公私钥对以实现免密登录:

ssh-keygen -t rsa -b 4096
  • -t rsa:指定使用 RSA 算法
  • -b 4096:密钥长度为 4096 位,增强安全性

默认会将密钥保存在 C:\Users\YourUsername\.ssh\ 下,如无特殊需求建议使用默认路径。若需免密则直接按回车跳过密码短语;若更重视安全性可设置密码短语。

3. 将公钥复制到 Linux 服务器

生成公钥后,将公钥内容放入远程 Linux 服务器的 ~/.ssh/authorized_keys 文件中。由于 Windows 没有 ssh-copy-id 工具,这里介绍两种常用方法:

  • 方法一:使用 SCP 命令

    scp C:\Users\YourUsername\.ssh\id_rsa.pub username@remote_host:/tmp/id_rsa.pub
    

    然后在 Linux 服务器上执行:

    mkdir -p ~/.ssh && chmod 700 ~/.ssh
    cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    rm /tmp/id_rsa.pub
    
  • 方法二:手动复制粘贴

    在 Windows 上打开公钥文件:

    notepad C:\Users\YourUsername\.ssh\id_rsa.pub
    

    将文件内容复制到剪贴板后,在 Linux 服务器上执行:

    mkdir -p ~/.ssh && chmod 700 ~/.ssh
    echo "这里粘贴你的公钥内容" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    

4. 确保权限正确

Linux 上的 .ssh 目录及其中文件的权限非常重要:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R username:username ~/.ssh

5. 调整 SSH 服务配置(如果需要)

编辑 Linux 服务器的 SSH 配置文件 /etc/ssh/sshd_config

sudo vim /etc/ssh/sshd_config

确保如下行已启用或存在:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

编辑完成后重启 SSH 服务:

sudo systemctl restart sshd

6. 测试免密登录

在 Windows 客户端中执行:

ssh username@remote_host

如果配置正确,将无需密码直接登录。

7. 配置 SSH Config(可选)

为简化登录指令,可在 Windows 端编辑 C:\Users\YourUsername\.ssh\config 文件,添加如下内容:

Host mylinuxserver
    HostName remote_host
    User username
    IdentityFile ~/.ssh/id_rsa

今后可使用简化指令:

ssh mylinuxserver

二、从 Linux 到 Windows 的免密登录配置

当你需要从 Linux 环境中反向登录 Windows 主机(已启用 OpenSSH Server)时,也可实现免密登录。

1. 在 Linux 上生成 SSH 密钥对

在 Linux 客户端生成密钥对:

ssh-keygen -t rsa -b 4096

默认路径为 ~/.ssh/id_rsa,同样可不设置密码短语以实现免密登录。

2. 在 Windows 上启用 OpenSSH Server

在 Windows 主机上执行以下操作(需管理员权限):

Add-WindowsCapability -Online -Name OpenSSH.Server*
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

确保 Windows 防火墙允许 22 端口的 SSH 流量:

New-NetFirewallRule -Name sshd -DisplayName "OpenSSH Server" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

3. 将公钥复制到 Windows 用户的 authorized_keys

在 Linux 客户端上:

  • 使用 SCP 传输公钥:

    scp ~/.ssh/id_rsa.pub user@windows_host:"C:\Users\YourUsername\.ssh\authorized_keys"
    

    如果目标文件不存在,可先在 Windows 上手动创建 C:\Users\YourUsername\.ssh\ 目录和 authorized_keys 文件,再将公钥内容粘贴其中。

4. 设置文件权限

在 Windows 上,将 .sshauthorized_keys 的权限设置为仅当前用户可访问:

icacls C:\Users\YourUsername\.ssh /grant YourUsername:F
icacls C:\Users\YourUsername\.ssh\authorized_keys /inheritance:r

5. 测试连接

在 Linux 客户端执行:

ssh user@windows_host

若成功登录则表示免密配置完成。

6. 配置 SSH Config(可选)

若你希望在 Linux 端也通过简短命令访问 Windows 主机,可在 Linux 客户端编辑 ~/.ssh/config 文件(如文件不存在则创建),添加类似如下内容:

Host mywindowsserver
    HostName windows_host
    User user
    IdentityFile ~/.ssh/id_rsa

现在只需输入:

ssh mywindowsserver

即可轻松登录 Windows 主机。



网站公告

今日签到

点亮在社区的每一天
去签到