三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

告别PuTTY!Win10/Server 2019自带的OpenSSH客户端,这样用才顺手

告别PuTTY!Win10/Server 2019自带的OpenSSH客户端,这样用才顺手

告别PuTTY!Win10/Server 2019自带的OpenSSH客户端高效使用指南

如果你是一位经常需要远程连接Linux服务器的Windows用户,可能已经习惯了使用PuTTY、Xshell等第三方SSH客户端工具。但你知道吗?从Windows 10 1809和Windows Server 2019开始,微软已经内置了OpenSSH客户端,这意味着你可以完全摆脱第三方工具,使用系统原生支持的SSH功能。本文将带你深入了解Windows内置OpenSSH客户端的各种高效用法,让你体验到比PuTTY更流畅、更原生的SSH连接体验。

1. 为什么选择Windows内置OpenSSH客户端

在开始具体操作之前,我们先来了解一下为什么应该考虑切换到Windows内置的OpenSSH客户端。相比传统的PuTTY等工具,原生OpenSSH客户端具有几个显著优势:

  • 无需额外安装:系统自带,开箱即用
  • 与PowerShell深度集成:直接在PowerShell中使用,无需切换窗口
  • 完整的OpenSSH功能:支持所有标准OpenSSH特性,包括scp、sftp等
  • 更好的兼容性:与Linux/Unix环境保持高度一致
  • 现代化终端支持:完美适配Windows Terminal等新型终端

性能对比表

特性Windows OpenSSHPuTTYXshell
安装方式系统内置需单独安装需单独安装
命令行集成完美集成PowerShell需外部调用需外部调用
配置文件标准OpenSSH格式专有格式专有格式
多会话管理支持(~/.ssh/config)需保存会话需保存会话
文件传输原生支持scp/sftp需额外工具内置支持
密钥管理标准OpenSSH方式专有格式专有格式

2. 基础配置与快速上手

2.1 确认OpenSSH客户端状态

首先,我们需要确认系统是否已经安装了OpenSSH客户端。在Windows 10 1809及更高版本中,OpenSSH客户端通常是默认安装的。你可以通过以下步骤检查:

  1. 打开"设置" > "应用" > "可选功能"
  2. 在列表中找到"OpenSSH客户端"
  3. 如果未安装,点击"添加功能"进行安装

也可以通过PowerShell快速检查:

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*'

2.2 基本连接命令

连接远程服务器非常简单,基本语法与Linux上的OpenSSH完全一致:

ssh username@hostname

例如连接一台IP为192.168.1.100的服务器:

ssh admin@192.168.1.100

首次连接时会提示确认服务器指纹,输入"yes"后继续。之后每次连接都会自动验证服务器身份,确保安全性。

提示:如果服务器使用了非标准端口(不是22),可以使用-p参数指定端口号

3. 高级配置技巧

3.1 使用SSH配置文件管理多台服务器

对于需要管理多台服务器的用户,每次都输入完整的连接命令会很麻烦。OpenSSH提供了配置文件功能,可以简化这一过程。

在用户目录下的.ssh文件夹中创建config文件(如果没有则新建):

cd ~ mkdir .ssh -Force notepad .ssh\config

配置文件示例:

Host myserver HostName 192.168.1.100 User admin Port 2222 Host production HostName prod.example.com User deploy IdentityFile ~/.ssh/prod_key

配置好后,连接服务器只需输入:

ssh myserver

3.2 密钥认证配置

相比密码认证,密钥认证更安全也更方便。以下是设置步骤:

  1. 生成密钥对:
ssh-keygen -t rsa -b 4096
  1. 将公钥复制到服务器:
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh username@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
  1. 设置正确的权限(在服务器上执行):
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys

注意:Windows上的OpenSSH客户端不支持ssh-copy-id命令,需要手动复制公钥

3.3 解决常见问题

欢迎信息重复显示问题: 某些版本的Windows OpenSSH客户端连接Linux服务器时会出现欢迎信息(Banner)重复显示的问题。这是已知的客户端bug,可以通过以下方式解决:

  1. 编辑服务器的sshd_config文件:
sudo nano /etc/ssh/sshd_config
  1. 添加或修改以下行:
PrintMotd no
  1. 重启SSH服务:
sudo systemctl restart sshd

连接速度慢问题: 如果发现连接建立速度慢,可能是DNS反向解析导致的。可以在客户端配置文件中添加:

Host * GSSAPIAuthentication no

4. 与Windows Terminal的完美结合

Windows Terminal是微软推出的现代化终端应用,与OpenSSH客户端配合使用能获得最佳体验。

4.1 配置SSH配置文件集成

在Windows Terminal的settings.json配置文件中,可以为每个SSH连接创建独立的标签页配置:

{ "name": "生产服务器", "commandline": "ssh production", "icon": "ms-appx:///ProfileIcons/{9acb9455-ca41-5af7-950f-6bca1bc9722f}.png", "hidden": false }

4.2 使用SSH跳板机

对于需要通过跳板机访问的内部服务器,可以配置ProxyJump:

Host internal-server HostName 10.0.0.5 User admin ProxyJump jumpuser@jumpserver.example.com

4.3 文件传输操作

除了SSH连接,OpenSSH客户端还提供了文件传输功能:

  • 使用scp上传文件:
scp .\localfile.txt myserver:~/remotefile.txt
  • 使用scp下载文件:
scp myserver:~/remotefile.txt .\localfile.txt
  • 使用sftp交互式传输:
sftp myserver

5. 生产力提升技巧

5.1 使用SSH连接复用

频繁建立SSH连接会影响效率,OpenSSH支持连接复用,可以显著提高后续连接速度:

在~/.ssh/config中添加:

Host * ControlMaster auto ControlPath ~/.ssh/sockets/%r@%h-%p ControlPersist 600

然后创建sockets目录:

mkdir ~/.ssh/sockets

5.2 远程命令执行

不需要进入交互式shell,可以直接在本地执行远程命令:

ssh myserver "ls -l /var/log"

这在自动化脚本中特别有用。

5.3 端口转发

OpenSSH支持多种端口转发方式:

  • 本地端口转发(将远程端口映射到本地):
ssh -L 8080:localhost:80 myserver
  • 远程端口转发(将本地端口映射到远程):
ssh -R 9090:localhost:80 myserver

5.4 保持连接活跃

为防止长时间空闲导致连接断开,可以配置心跳:

在~/.ssh/config中添加:

Host * ServerAliveInterval 60 ServerAliveCountMax 3

6. 安全最佳实践

6.1 使用强密码和密钥

  • 避免使用简单密码
  • 使用至少4096位的RSA密钥或Ed25519密钥
  • 为密钥设置强密码短语

6.2 定期轮换密钥

建议每3-6个月更换一次SSH密钥:

  1. 生成新密钥:
ssh-keygen -t ed25519
  1. 将新公钥部署到所有服务器
  2. 确认新密钥工作正常后,从服务器删除旧公钥

6.3 使用SSH代理转发

在需要跳转多台服务器时,可以使用SSH代理转发避免重复输入密钥密码:

ssh -A jumpserver

然后在jumpserver上连接其他服务器时,会自动使用本地的密钥。

注意:代理转发有安全风险,只应在受信任的网络中使用

6.4 限制用户访问

在服务器端,可以通过sshd_config限制特定用户的访问:

AllowUsers admin deploy DenyUsers test guest

7. 故障排除与调试

当遇到连接问题时,可以使用-v参数获取详细输出:

ssh -v username@hostname

对于更详细的信息,可以使用-vvv参数:

ssh -vvv username@hostname

常见问题及解决方案:

  1. 连接被拒绝

    • 检查服务器SSH服务是否运行
    • 检查防火墙设置
    • 确认端口是否正确
  2. 认证失败

    • 检查用户名和密码
    • 确认密钥文件权限是否正确
    • 检查服务器上的authorized_keys文件格式
  3. 连接超时

    • 检查网络连接
    • 确认服务器IP地址正确
    • 检查是否有中间防火墙阻挡

在实际使用中,我发现将常用命令保存为PowerShell函数可以极大提高效率。例如,在$PROFILE文件中添加:

function Connect-Prod { ssh production } function Copy-ToProd { param($file) scp $file production:~/uploads/ }
← 返回列表