在日常开发与运维工作中,无论是在 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 上,将 .ssh
及 authorized_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 主机。