如何在Windows与Linux(Ubuntu/CentOS)之间配置SSH免密登录
文章目录
- 如何在Windows与Linux(Ubuntu/CentOS)之间配置SSH免密登录
- 一、Windows到Linux的免密登录配置
- 1. 确认并安装OpenSSH
- 2. 生成SSH密钥对
- 3. 将公钥复制到远程服务器
- 方法一:使用SCP命令
- 方法二:手动复制粘贴
- 4. 检查权限设置
- 5. 启用SSH服务并重启
- 6. 测试免密登录
- 7. 设置默认用户名(可选)
- 二、Linux到其他机器(Windows或Linux)的免密登录配置
- 1. 在Linux上生成SSH密钥对
- 2. 配置Windows上的OpenSSH服务
- 3. 将公钥复制到Windows
- 4. 设置权限
- 5. 测试连接
- 三、注意事项与总结
- 多用户环境下的配置方法
- 防火墙和SELinux配置
在日常开发和运维中,SSH免密登录可以显著提升操作效率,同时保证连接的安全性。以下详细讲解如何在Windows与Linux之间配置SSH免密登录,并针对多种场景提供实际解决方案。
一、Windows到Linux的免密登录配置
1. 确认并安装OpenSSH
在Windows端,SSH客户端是实现免密登录的基础。首先确认系统中是否已安装OpenSSH客户端:
-
确认是否安装
打开命令提示符(CMD)或PowerShell,输入以下命令检查是否已安装:ssh
如果出现相关的SSH帮助信息,说明OpenSSH客户端已安装。如果提示未找到命令,可以通过以下方式进行安装:
-
安装OpenSSH客户端
适用于Windows 10及以上版本:-
打开“设置” -> “应用” -> “可选功能”,找到并安装“OpenSSH客户端”。
-
或者在PowerShell中执行以下命令:
Add-WindowsCapability -Online -Name OpenSSH.Client*
-
2. 生成SSH密钥对
安装完成后,生成一对公钥和私钥。打开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服务器上。
scp C:\Users\YourUsername\.ssh\id_rsa.pub username@remote_host:/tmp/id_rsa.pub
然后登录到Linux服务器,执行以下命令将公钥添加到 authorized_keys
文件:
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服务允许基于密钥的身份验证。编辑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连接到Linux服务器:
ssh username@remote_host
如果配置正确,你将直接登录而无需输入密码。
7. 设置默认用户名(可选)
为简化SSH命令,可以在Windows的 C:\Users\YourUsername\.ssh\config
文件中添加以下内容:
Host aliasHostName remote_hostUser usernameIdentityFile ~/.ssh/id_rsa
这样,你可以通过以下简化命令连接到服务器:
ssh alias
二、Linux到其他机器(Windows或Linux)的免密登录配置
1. 在Linux上生成SSH密钥对
在Linux终端上生成SSH密钥对:
ssh-keygen -t rsa -b 4096
默认保存路径为 ~/.ssh/id_rsa
。
2. 配置Windows上的OpenSSH服务
在Windows端启用OpenSSH Server:
-
确认安装OpenSSH Server
在PowerShell中执行:Add-WindowsCapability -Online -Name OpenSSH.Server*
-
启动并设置服务为开机自启:
Start-Service sshd Set-Service -Name sshd -StartupType 'Automatic'
-
检查防火墙规则:确保允许SSH流量通过防火墙。
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传输公钥
scp ~/.ssh/id_rsa.pub user@windows_host:C:\Users\user\.ssh\authorized_keys
-
方法二:手动复制粘贴
在Linux终端查看公钥内容:cat ~/.ssh/id_rsa.pub
然后在Windows上创建并编辑
C:\Users\YourUsername\.ssh\authorized_keys
文件,将公钥内容粘贴进去。
4. 设置权限
在Windows端,确保 .ssh
目录及文件权限正确:
icacls C:\Users\YourUsername\.ssh /grant YourUsername:F
icacls C:\Users\YourUsername\.ssh\authorized_keys /inheritance:r
5. 测试连接
从Linux端通过SSH尝试连接到Windows机器:
ssh user@windows_host
三、注意事项与总结
多用户环境下的配置方法
如果在同一台服务器上多人开发,可以考虑以下方案:
-
每人一个文件夹,统一管理分支
- 克隆同一个仓库到不同文件夹。
- 每人在自己文件夹中创建独立的分支开发,定期同步主分支。
-
使用Fork机制
- 每个人从主仓库Fork到自己的远程仓库。
- 在服务器上各自克隆自己的远程仓库,开发完成后提交到自己的仓库,再通过Pull Request将代码合并到主仓库。
防火墙和SELinux配置
在Linux服务器上,注意开放SSH服务的端口(通常是22):
sudo ufw allow ssh
如果使用的是CentOS且启用了SELinux,还需确保SELinux策略允许SSH连接。