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

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

文章目录

在日常开发和运维中,SSH免密登录可以显著提升操作效率,同时保证连接的安全性。以下详细讲解如何在Windows与Linux之间配置SSH免密登录,并针对多种场景提供实际解决方案。


一、Windows到Linux的免密登录配置
1. 确认并安装OpenSSH

在Windows端,SSH客户端是实现免密登录的基础。首先确认系统中是否已安装OpenSSH客户端:

  • 确认是否安装

    打开命令提示符(CMD)或PowerShell,输入以下命令检查是否已安装:

    powershell 复制代码
    ssh

    如果出现相关的SSH帮助信息,说明OpenSSH客户端已安装。如果提示未找到命令,可以通过以下方式进行安装:

  • 安装OpenSSH客户端

    适用于Windows 10及以上版本:

    • 打开"设置" -> "应用" -> "可选功能",找到并安装"OpenSSH客户端"。

    • 或者在PowerShell中执行以下命令:

      powershell 复制代码
      Add-WindowsCapability -Online -Name OpenSSH.Client*
2. 生成SSH密钥对

安装完成后,生成一对公钥和私钥。打开PowerShell或命令提示符,执行以下命令:

powershell 复制代码
ssh-keygen -t rsa -b 4096
  • -t rsa 指定使用RSA算法。
  • -b 4096 设置密钥长度为4096位(增强安全性)。

系统会提示保存密钥的位置,默认路径为 C:\Users\YourUsername\.ssh\id_rsa,建议使用默认路径。随后,系统会要求设置密码短语。如果需要真正的免密登录,可以直接按回车跳过,但如果追求更高的安全性,建议设置密码短语。

3. 将公钥复制到远程服务器

生成密钥对后,需要将公钥文件复制到Linux服务器的 ~/.ssh/authorized_keys 中。由于Windows默认没有 ssh-copy-id 工具,以下是常见的几种方法:

方法一:使用SCP命令

利用SCP将公钥传输到Linux服务器上。

powershell 复制代码
scp C:\Users\YourUsername\.ssh\id_rsa.pub username@remote_host:/tmp/id_rsa.pub

然后登录到Linux服务器,执行以下命令将公钥添加到 authorized_keys 文件:

bash 复制代码
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上的公钥文件:

powershell 复制代码
notepad C:\Users\YourUsername\.ssh\id_rsa.pub

将公钥内容复制到剪贴板。登录Linux服务器后,执行以下命令:

bash 复制代码
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "粘贴你的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
4. 检查权限设置

Linux服务器上,.ssh目录及文件的权限设置非常重要,否则可能导致免密登录失败:

bash 复制代码
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R username:username ~/.ssh
5. 启用SSH服务并重启

某些Linux发行版可能需要确保SSH服务允许基于密钥的身份验证。编辑SSH配置文件 /etc/ssh/sshd_config

bash 复制代码
sudo vim /etc/ssh/sshd_config

确保以下选项已启用:

plaintext 复制代码
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

保存后重启SSH服务:

bash 复制代码
sudo systemctl restart sshd
6. 测试免密登录

现在,你可以尝试从Windows客户端通过SSH连接到Linux服务器:

powershell 复制代码
ssh username@remote_host

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

7. 设置默认用户名(可选)

为简化SSH命令,可以在Windows的 C:\Users\YourUsername\.ssh\config 文件中添加以下内容:

plaintext 复制代码
Host alias
    HostName remote_host
    User username
    IdentityFile ~/.ssh/id_rsa

这样,你可以通过以下简化命令连接到服务器:

powershell 复制代码
ssh alias

二、Linux到其他机器(Windows或Linux)的免密登录配置
1. 在Linux上生成SSH密钥对

在Linux终端上生成SSH密钥对:

bash 复制代码
ssh-keygen -t rsa -b 4096

默认保存路径为 ~/.ssh/id_rsa

2. 配置Windows上的OpenSSH服务

在Windows端启用OpenSSH Server:

  • 确认安装OpenSSH Server

    在PowerShell中执行:

    powershell 复制代码
    Add-WindowsCapability -Online -Name OpenSSH.Server*
  • 启动并设置服务为开机自启

    powershell 复制代码
    Start-Service sshd
    Set-Service -Name sshd -StartupType 'Automatic'
  • 检查防火墙规则:确保允许SSH流量通过防火墙。

    powershell 复制代码
    New-NetFirewallRule -Name sshd -DisplayName "OpenSSH Server" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
3. 将公钥复制到Windows

从Linux端将公钥复制到Windows用户的 .ssh/authorized_keys 中:

  • 方法一:使用SCP传输公钥

    bash 复制代码
    scp ~/.ssh/id_rsa.pub user@windows_host:C:\Users\user\.ssh\authorized_keys
  • 方法二:手动复制粘贴

    在Linux终端查看公钥内容:

    bash 复制代码
    cat ~/.ssh/id_rsa.pub

    然后在Windows上创建并编辑 C:\Users\YourUsername\.ssh\authorized_keys 文件,将公钥内容粘贴进去。

4. 设置权限

在Windows端,确保 .ssh 目录及文件权限正确:

powershell 复制代码
icacls C:\Users\YourUsername\.ssh /grant YourUsername:F
icacls C:\Users\YourUsername\.ssh\authorized_keys /inheritance:r
5. 测试连接

从Linux端通过SSH尝试连接到Windows机器:

bash 复制代码
ssh user@windows_host

三、注意事项与总结
多用户环境下的配置方法

如果在同一台服务器上多人开发,可以考虑以下方案:

  1. 每人一个文件夹,统一管理分支

    • 克隆同一个仓库到不同文件夹。
    • 每人在自己文件夹中创建独立的分支开发,定期同步主分支。
  2. 使用Fork机制

    • 每个人从主仓库Fork到自己的远程仓库。
    • 在服务器上各自克隆自己的远程仓库,开发完成后提交到自己的仓库,再通过Pull Request将代码合并到主仓库。
防火墙和SELinux配置

在Linux服务器上,注意开放SSH服务的端口(通常是22):

bash 复制代码
sudo ufw allow ssh

如果使用的是CentOS且启用了SELinux,还需确保SELinux策略允许SSH连接。

相关推荐
开开心心就好25 分钟前
免费卸载工具,可清理残留批量管理启动项
linux·运维·服务器·windows·随机森林·pdf·1024程序员节
智算菩萨32 分钟前
摩擦电纳米发电机近期进展的理论脉络梳理:从接触起电到统一建模与能量转换
linux·人工智能·算法
Lbwnb丶35 分钟前
检测服务器是否是虚拟化,如KVM,VM等
linux·运维·服务器
老猿讲编程40 分钟前
【车载信息安全系列4】基于Linux中UIO的HSE应用实现
linux·运维·服务器
淼淼7631 小时前
Qt调度 程序
开发语言·c++·windows·qt
Poetinthedusk2 小时前
设计模式-命令模式
windows·设计模式·c#·wpf·命令模式
whm27772 小时前
Visual Basic Data控件
windows·visual studio
feiduoge2 小时前
教程 43 - 渲染目标和可配置渲染通道
windows·游戏引擎·图形渲染
蓝晶之心2 小时前
Linux rsync ssh方式数据备份
linux·运维·服务器
ss2733 小时前
Java线程池全解:工作原理、参数调优
java·linux·python