Featured image of post SSH配置简介

SSH配置简介

配置Linux,Windows,WSL系统的SSH连接

SSH是一种传输协议,通过TCP传输加密通信来保护数据在传输过程中的安全性,广泛应用于系统管理、文件传输和远程命令执行等场景。

配置 SSH

连接到远程主机的原理与连接MC服务器类似,关键在于确定远程主机的IP地址和端口。

Windows系统

将Windows系统作为远程主机的情况确实比较少,但确实存在(而且配置过程更具挑战性!)

安装 SSH 服务

首先在要连接的主机上打开设置,搜索“可选功能”,在“添加可选功能”中搜索“OpenSSH服务器”,下载该功能。

启动并配置 SSH 服务

管理员权限打开Powershell,输入:

1
2
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

然后开放防火墙端口(默认22):

1
2
3
4
5
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server' -Enabled True 
        -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

# 其中'OpenSSH Server'是协议的名称,可自行修改
# 这样默认同时开启IPV4和IPV6的端口,即“127.0.0.1:22”和“[0:0:0:0]:22”

还可以通过以下方法实现:

步骤 操作
打开防火墙高级设置 控制面板 > Windows Defender 防火墙 > 高级设置(或win+R输入wf.msc
新建入站规则 右键“入站规则” > 新建规则。
选择规则类型 选择“端口” > 下一步。
指定端口和协议 协议类型:选择 TCP;特定本地端口:输入 22 > 下一步。
选择操作 选择“允许连接” > 下一步。
选择配置文件 默认全选(域、专用、公用)> 下一步。
指定规则名称 如“允许 IPv6 22222 端口” > 完成。
📝 备注

如果有时开放了防火墙但仍无法连接,可尝试重启电脑(我就是这样解决的……)

Linux系统

安装 OpenSSH Server

1
2
sudo apt update
sudo apt install openssh-server

启动 SSH 服务

编辑配置文件:

1
sudo nano /etc/ssh/sshd_config

确保以下配置项存在且未被注释:

1
2
3
4
5
...
Port 22
...
PasswordAuthentication yes
PermitRootLogin yes

如果要启用IPV6的SSH连接,还应该保持以下内容未被注释:

1
2
3
4
Port 22
AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::

启动SSH服务:

1
2
3
sudo systemctl start ssh
sudo systemctl enable ssh   # 设置开机自启
sudo systemctl status ssh   # 检查ssh运行状态

输出中应显示active (running)

配置防火墙

允许 SSH 默认端口(22):

1
2
sudo ufw enable  # 如果防火墙未启用
sudo ufw allow ssh

获取服务器的IP地址

1
ip a  # 或 hostname -I

找到类似 192.168.x.x 的局域网 IP 或公网 IP(如果适用)。

WSL系统

连接WSL系统实在是迷惑行为,但本人就使用了近半年……

现在我已转向完整的Ubuntu系统,还是纯净的用的爽!

WSL系统的SSH配置与纯Linux系统类似,但要注意的是不能使用systemctl启动服务,请使用:

1
sudo service ssh start

验证服务是否运行:

1
2
3
sudo service ssh status
# 或使用
ps aux | grep sshd

注意:

必须保证Windows防火墙的22端口已被放行;

WSL系统是Windows的子系统,在Windows开机时,WSL的ssh功能默认并不能开启,此时需要将WSL的ssh注册为系统服务实现Windows开机时启用WSL的ssh功能。

下面给出使用任务计划程序(无需第三方程序)的方法:点击展开

打开任务计划程序:Win+Rtaskschd.msc

创建任务:

选项 操作
名称 StartWSL
触发器 选择「计算机启动时」
操作 新建 → 程序/脚本:wsl.exe,参数:-d Ubuntu-22.04 -u root /usr/sbin/service ssh start
(或 -d Ubuntu-22.04 true 单纯启动实例)
设置 勾选「允许任务按需运行」

保存时输入管理员密码。重启测试即可。

Termux

参见:Termux启动SSH功能

连接 SSH

直接连接

在 Windows 本地测试:

1
ssh 用户名@localhost

从局域网其他设备连接:

1
ssh 用户名@<Windows主机IP>

SSH配置文件

通常位于C:\Users\你的用户名\.ssh\config文件中。

1
2
3
4
5
Host xxxx                       # Host的名称,可自定义
    HostName xxx.xxx.xxx.xxx    # SSH服务端的IP地址
    User xxxxx                  # 登录的用户名
    Port xxxxx                  # SSH服务端的IP端口
    IdentityFile xxxxx          # SSH的连接私钥

注意:VScode的Host名会绑定远程主机的操作系统(Windows、Linux、MacOS),如果使用同一个Host名连接不同操作系统的主机,需要在设置中修改,否则会报错。(就因为这个,让我花了近1小时)

修改方法:打开设置,搜索Remote Platform,修改相应项的值

Remote Platform

使用SSH密钥

SSH密钥可以实现免密登录,省去输入密码的操作,但需要保证私钥文件的存放安全。

制作密钥对

首先在服务器上制作密钥对:用密码登录到你打算使用密钥登录的账户,然后执行以下命令:

1
ssh-keygen

之后会让你进行如下配置:

1
2
3
4
5
6
7
8
9
Generating public/private rsa key pair.
Enter file in which to save the key (/name/.ssh/id_rsa):    # 密钥生成位置,按Enter即可
Created directory '/name/.ssh'.
Enter passphrase (empty for no passphrase):                 # 输入密钥锁码,按Enter留空
Enter same passphrase again:                                # 再输入一遍密钥锁码
Your identification has been saved in /name/.ssh/id_rsa.    # 私钥
Your public key has been saved in /name/.ssh/id_rsa.pub.    # 公钥
The key fingerprint is:
0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 name@host

在服务器上安装公钥

键入以下命令,在服务器上安装公钥:

1
2
cd .ssh
cat id_rsa.pub >> authorized_keys

也可以直接将id_rsa.pub文件中的内容复制到authorized_keys文件中。

为了确保连接成功,请保证以下文件权限正确:

1
2
chmod 600 authorized_keys
chmod 700 ~/.ssh

打开密钥登录功能

编辑/etc/ssh/sshd_config文件,进行如下设置:

1
2
RSAAuthentication yes
PubkeyAuthentication yes

另外,请留意 root 用户能否通过 SSH 登录:

1
PermitRootLogin yes

当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录:

1
PasswordAuthentication no

最后,重启 SSH 服务:

1
service sshd restart

下载私钥到客户端

使用 WinSCP、SFTP 等工具将私钥文件id_rsa下载到客户端机器上,之后在SSH客户端中可输入私钥文件所在目录或其中的内容实现免密登录SSH。

SSH应用程序

SSH应用程序可以简化连接操作,而且可以使用SFTP方便地进行文件上传和下载。

Visual Studio Code

这是目前为止(我发现的)最方便的SSH应用,只需下载VScode并安装Remote-ssh插件,写好配置文件后就能连接。

VSCode的Remote-SSH插件

全程免费,而且附带端口转发、文件编辑、下载等功能。

Tabby

Tabby是一款现代的终端应用,界面简洁。

Tabby的Github仓库

ServerBox

ServerBox是一款国产的远程服务器监控和操作应用,支持Windows、Linux、Android、MacOS等操作系统。优点是可以监测服务器实时运行状态(包括CPU、内存、温度、网络、硬盘等)。

Serverbox的监测界面

注意,Serverbox自带的脚本只支持监控Linux系统的运行数据,对于WSL系统,只能监控部分数据。

ServerBox的Github仓库

以下是各ssh应用程序的功能比较:

应用 特点 平台
VScode 功能最强大 Windows/Linux/MacOs
Tabby 界面简洁美观 Windows/Linux/MacOS
Serverbox 可以监控服务端的运行 Windows/Android/MacOS
网站总访客数:Loading

使用 Hugo 构建
主题 StackJimmy 设计