【PC/APP-技术教程】在公网中安全访问 Windows PC:SSH 服务端与客户端配置简易教程 文件管理 文件处理 SSH APP 技术教程

338 4

前言

FTP 在内网中使用没啥问题,但在公网中使用…… *赛博裸奔.MP4*。使用 SFTP / SCP 可有效规避此类问题。

SSH(Secure Shell)是一种加密的网络协议,用于在不安全的网络环境中安全地连接到远程计算机或服务器。

SSH 的主要特点包括:

1. 加密通信:SSH 使用强加密算法来保护数据传输,确保信息在传输过程中不被窃听或篡改。
2. 身份验证:SSH 支持多种身份验证方式,确保只有授权用户才能访问远程系统。
3. 数据完整性:SSH 会检查数据在传输过程中是否被篡改,确保数据的完整性。
4. 多功能性:除了远程登录,SSH 还支持端口转发(内网穿透)、文件传输(通过 SCP 或 SFTP)、远程命令执行等功能。


SSH 服务端(Windows PC)与客户端简易教程

目录

  • 1.1 SSH 服务端(Windows PC)配置
    • 1.1.1 安装软件/功能
    • 1.1.2 启动服务
    • 1.1.3 免密登录(仅使用密钥登录)
      • 1.1.3(1) 生成密钥对
      • 1.1.3(2) 编辑配置文件
  • 2.1 SSH 客户端配置-Windows
    • 2.1.1 使用 CMD / Powershell 访问(1)
    • 2.1.2 使用 CMD / Powershell 访问(2)
    • 2.1.3 使用 WinSCP 访问
  • 2.2 SSH 客户端配置-iOS
    • 2.2.1 使用 Termius 访问
  • 2.3 SSH 客户端配置-Android
    • 2.3.1 使用 JuiceSSH 访问
    • 2.3.2 使用 Termius 访问
  • 3.1 FAQ

 

1.1 SSH 服务端(Windows PC)配置

1.1.1 安装软件/功能

注意:若 PC 中存在诸如 Windows Update Blocker(WUB) 等阻止 Windows 更新的软件,请临时将其关闭。

Windows 默认安装有 OpenSSH 客户端,但 OpenSSH 服务器通常需手动安装。

在 Windows 10 中,打开“设置”,在搜索栏中输入“可选功能”,点击“管理可选功能”,点击“添加功能”,勾选“OpenSSH 服务器”并点击“安装”,耐心等待进度条达到 100%。

1.1.1_2.png

安装完毕后,打开 CMD 或 Windows Powershell,输入`ssh -V`并回车,若显示有 OpenSSH 的版本号,则说明安装成功。

Windows 11 中的操作步骤与其类似。

提示:可使用 Cygwin、MobaXterm 等作为替代方案。

 

1.1.2 启动服务

右键“此电脑”,点击“管理”,在“服务和应用程序 -> 服务”中,找到“OpenSSH Authentication Agent”和“OpenSSH SSH Server”,然后分别对这两项服务进行以下操作:

  • 右键并点击“属性” / 双击;
  • 将“启动类型”改为“自动”并点击“应用”;
  • 右键并点击“启动” / 在页面左上角点击“启动此服务”。

1.1.2_2.png

1.1.2-2.png

在 Windows Powershell 中,输入`Get-Service -Name *ssh*`并回车,若显示有`ssh-agent`和`sshd`且其`Status`均为`Running`,则说明服务启动成功。

接着输入`netstat -an | findstr :22`并回车,若显示有`TCP  0.0.0.0:22  0.0.0.0:0  LISTENING`和`TCP  [::]:22  [::]:0  LISTENING`,则说明 OpenSSH 服务器正在监听 22 端口(SSH 默认端口)。

1.1.2-3.png

 

1.1.3 免密登录(仅使用密钥登录)

虽说到这一步后即可使用 SSH 连接 PC,但使用密码登录的 SSH 并不安全。


1.1.3(1) 生成密钥对

在 Windows Powershell 中,输入以下其中一条命令生成密钥对:

  • `ssh-keygen -t ed25519`:生成长度为 256 bit 的 Ed25519 密钥对。推荐使用这条命令;
  • `ssh-keygen -b num -t ecdsa`:生成长度为 num bit 的 ECDSA 密钥对。此处 num 仅可为 256、384 或 521,若未输入`-b num`则生成长度为 256 bit 的 ECDSA 密钥对;
  • `ssh-keygen -b num -t rsa`:生成长度为 num bit 的 RSA 密钥对。建议长度为 3072 bit 或更高(至少 1024 bit,至多 16384 bit,不同 SSH 服务端对 bit 的限制可能不同);
  • `ssh-keygen`:生成长度为 3072 bit 的 RSA 密钥对。不同 SSH 服务端的默认生成选项可能不同,比如在 OpenSSH 9.5 之后的版本中输入此命令,将生成长度为 256 bit 的 Ed25519 密钥对。

在生成密钥对时,在“Enter file in which to save the key”这一行中,输入`文件夹路径\文件名(不带后缀)`后回车,若直接回车则将以`默认文件夹路径\id_xxx`的方式生成密钥对。以下是两种示例写法:

  • 相对路径:`.ssh\keyfile_name`;
  • 绝对路径(带有盘符):`C:\Users\User_name\.ssh\keyfile_name`。

注意:若路径中含有空格,请使用半角双引号("")将路径括起来。

在“Enter passphrase (empty for no passphrase)”这一行中,输入随机字符串后回车将为私钥设置一个 passphrase(密码),此后使用此私钥建立 SSH 连接前需要输入 passphrase。若直接回车则不会为私钥设置 passphrase。passphrase 的主要作用在于若客户端被入侵或私钥泄露,攻击者在不知道 passphrase 的情况下也无法通过此私钥访问对应服务端。

在“Enter same passphrase again”这一行中,输入先前设置的 passphrase,若未设置则直接回车。

1.1.3_2.png

 

1.1.3(2) 编辑配置文件

密钥对生成完毕后,将不带`.pub`后缀的私钥文件发送到客户端。随后使用记事本打开后缀为`.pub`的公钥文件,复制其中的字符串。然后前往此文件夹:“C:\Users\*用户名*\.ssh”,新建文本文档并命名为“authorized_keys”(不带后缀),使用记事本打开此文件并将先前复制的字符串粘贴进去,随后保存。

接着前往此文件夹:“C:\ProgramData\ssh”,使用记事本打开文件“sshd_config”(注意:请以管理员身份打开),取消以下内容的注释(删除“#”号):

  • `PubkeyAuthentication yes`(第 34 行);
  • `AuthorizedKeysFile .ssh/authorized_keys`(第 38 行);
  • `PasswordAuthentication no`(第 51 行,若为“yes”请改为“no”)。

并注释掉以下内容(在开头添加“#”号):

  • `Match Group administrators`(倒数第 2 行);
  • ` AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys`(倒数第 1 行)。

随后保存。

右键“此电脑”,点击“管理”,在“服务和应用程序 -> 服务”中,找到“OpenSSH SSH Server”,右键此服务并点击“重新启动”。

 

2.1 客户端配置-Windows

2.1.1 使用 CMD / Windows Powershell 访问(1)

在 CMD 中,输入`ssh -i "私钥文件路径" username@ip(或域名)`并回车。首次连接时会弹出提示,此时先输入“yes”并回车,然后使用记事本打开此文件:“C:\Users\*用户名*\.ssh\known_hosts”,将其中的字符串与服务端中的公钥文件“C:\ProgramData\ssh\ssh_host_xxx_key.pub”(xxx 为此次连接使用的密钥加密算法)当中的字符串逐一比对(注意忽略“=”号后面的注释),若核对无误,则说明未遭遇中间人攻击,此次与后续的连接均可信。

2.1.1_2.png

输入`exit`并回车即可断开连接。

注意:在 Windows 中,微软账户用户名通常为邮箱,此时请使用半角双引号("")将用户名括起来以免用户名中的“@”与命令中的“@”混淆。

 

2.1.2  使用 CMD / Windows Powershell 访问(2)

每次连接服务端前都需要输入私钥文件路径略显麻烦,尤其是有多个 SSH 服务端时。其中一个解决办法为将 SSH 连接命令存储在`.bat`文件中以实现批量管理 SSH 连接。

新建文本文档并将后缀改为“.bat”,然后使用记事本打开此文件,输入`ssh -i "私钥文件路径" username@ip(或域名)`并保存。此后仅需双击打开此文件即可连接服务端。

 

2.1.3 使用 WinSCP 访问

CMD / Windows Powershell 主要用于远程命令执行。对于文件传输,可使用 WinSCP。

WinSCP 官网:https://winscp.net/eng/docs/lang:chs

打开 WinSCP,在“登录”页面中,“主机名”填写服务端 IP 或域名,“端口号”若未特别设置过则填写 22,“用户名”填写服务端的微软账户用户名或本地账户用户名,“密码”留空。

2.1.3_2.png

然后点击“高级...”,在“SSH -> 验证 -> 密钥文件”中,点击右侧的三个点,选择私钥文件并点击“打开”(若找不到私钥文件,尝试将右下角的筛选条件由“PuTTY私钥文件(*.ppk)”改为“所有文件(*.*)”)。若私钥文件由 OpenSSH 生成,WinSCP 会提示需要将 OpenSSH 私钥转化为 PuTTY 格式,点击“确定”,将转换后的私钥文件保存,WinSCP 会自动识别此私钥文件的路径。随后点击“确定”退出高级站点设置。

2.1.3-2_2.png

2.1.3-3_2.png

接着点击“保存”,输入站点名称和文件夹名称并点击“确定”,即可保存站点配置。此后连接服务端时无需再输入主机名、用户名等。

2.1.3-4_2.png

最后点击“登录”。首次连接时会弹出警告,此时先将服务端中的公钥文件“C:\ProgramData\ssh\ssh_host_xxx_key.pub”(xxx 为此次连接使用的密钥加密算法)复制到客户端,在客户端中复制其中的字符串到剪贴板。然后在 WinSCP 的警告页面中,点击“接受”旁的箭头,点击“粘贴密钥”。

2.1.3-5_2.png

若显示内容不匹配,则说明可能遭遇中间人攻击、字符串复制错误或复制公钥文件时文件损坏等;若显示网络错误,点击“重新连接”即可正常连接。

2.1.3-6.png

2.1.3-7.png

连接成功后,可像使用文件资源管理器一样自由管理文件。

 

2.2 客户端配置-iOS

2.2.1 使用 Termius 访问

在 App Store 中,搜索“Termius”,找到“Termius: Terminal & SSH Client”并下载安装。

2.2.1.jpg

在 Termius 中,点击右上角“+”号,点击“New Host”。“Label”填写站点名称,“IP or Hostname”填写服务端 IP 地址或域名,启用“Use SSH”选项,Port 若未特别设置过则填写 22, “Username”填写服务端的微软账户用户名或本地账户用户名,“Password”留空。

2.2.1-2.jpg2.2.1-3.jpg

点击“Key”,点击右上角“+”号,点击“Import Key”,选择存储在本地的私钥文件并打开,点击“Save”。选择导入的 Key,随后点击“Save”。

2.2.1-4.jpg

点击 Hosts 中的站点图标以连接。首次连接时会弹出警告,此时先点击“Continue”,然后点击左上角退出连接页面,在“Known Hosts”中点击对应的站点图标,将“Host Information”中的字符串与服务端中的公钥文件“C:\ProgramData\ssh\ssh_host_xxx_key.pub”(xxx 为此次连接使用的密钥加密算法)当中的字符串逐一比对(注意忽略“=”号后面的注释),若核对无误,则说明未遭遇中间人攻击,此次与后续的连接均可信。

2.2.1-5.jpg2.2.1-6.jpg

输入`exit`并回车或点击页面正上方的叉号即可断开连接。

Termius 亦支持 SFTP 文件传输。

2.2.1-7.jpg

 

2.3 客户端配置-Android

2.3.1 使用 JuiceSSH 访问

JuiceSSH 官网 APK 下载页面:https://juicessh.com/changelog

在 JuiceSSH 中,点击“Manage Connections”,点击右下角“+”号。“名称”填写站点名称,“类型”选择 SSH,“主机”填写服务端 IP 地址或域名,“端口/连接埠”若未特别设置过则填写 22。

2.3.1-2.jpg

在“身份”中,点击“新增...”。“使用者名称”填写服务端的微软账户用户名或本地账户用户名,“密码”无视,点击“私钥”并导入存储在本地的私钥文件,随后点击右上角的勾以新增身份。

2.3.1-3.jpg

点击右上角的勾以新增连接,随后点击站点图标以连接服务端。首次连接时会弹出警告,由于 JuiceSSH 无法查看 Known Host,请自行确认公钥指纹后点击“接受”或“拒绝”。

输入`exit`并回车即可断开连接。

 

2.3.2 使用 Termius 访问

Termius APK 下载:

操作步骤与章节 2.2.1 类似。

 

3.1 FAQ

  • 为什么没有 MacOS 客户端的配置教程?
    • 本作者无力制作,请自行搜索。
  • 如何在公网中访问内网设备?
  • 为什么不使用 SMB 协议访问 Windows PC?
    • 密码的安全性不如密钥对,即使多一个用户名也是如此。当然,使用其它身份验证机制的 SMB 协议另说。

 

参考资源

 

曲终人散,黄粱一梦,该醒了!
最新回复 ( 4 )
发新帖