ssh远程连接主机及内网穿透(win11)

yulabu2026-08-29 22 次阅读

ssh远程连接主机及内网穿透(win11)

本来不想写的,结果搜到的教程没有win11的,一部分操作都还是要自己搓,所以记录一下

本人是有一台mac和一台windows主机,现在做mac远程控制主机

首先我们在windows端(也就是主机)配置好先

windows端ssh服务的启动

win+I 在系统->可选功能->查看可选功能

添加openssh的客户端和服务端,理论上可以在可视化界面操作,但是我的win11不知道发什么颠就没有,所以我用以下指令来下载服务端,

注:我的win11是有找到客户端的,如果没有客户端请搜索对应指令尝试

进入powershell终端,输入:

powershell 复制代码
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

然后进行一些等待,最后日志输出:

复制代码
Online : True
RestartNeeded : False   # False 表示无需重启,True 则需要重启
image-20260825182922644

最后查看功能这里就有客户端和服务端了

同时win键搜索计算机管理,启动类型都改成自动(如果没有,或者没找到,那就直接上网查powershell相关的命令来安装吧

image-20260825183521215

都改成自动,然后右键自己启动一下

然后依旧在powershell输入指令检查状态

powershell 复制代码
 Get-Service -Name *ssh*
image-20260825183605182

现在他们就正常运行了

检查22端口是否正常被监听

powershell 复制代码
netstat -an | findstr :22
image-20260825183909773

两个端口22的正常被监听就一切正常,最后ipconfig(或者你有其他查看方式)得到自己电脑的IPv4的地址,记住这个地址,然后我们的mac电脑就可以通过ssh连接到windows电脑

image-20260825190506094

mac端建立远程连接

在windows主机的powershell中输入whoami,得到我们的用户名——反斜杠前是设备名,反斜杠后才是我们的用户名username

然后打开mac终端连接

复制代码
ssh "username"@IPv4地址

连接要windows端密码,正常输入就好,然后安装vscode插件,remote-ssh,

配置一下ssh配置文件,用 Ctrl+Shift+P打开命令面板,输入Remote-SSH: open SSH configuration file...,打开ssh配置文件,将windows的连接配置好,刷新一下,就可以便捷地控制windows端的文件了

txt 复制代码
Host PC
  HostName 服务器公网IP
  Port 6000
  User 你的windows用户名
  ConnectTimeout 30

这个插件偶尔会出现连接超时的问题

按 Ctrl+Shift+P 打开命令面板,输入Remote-SSH: Connect Current Window to Host...,重新连接一下就好了

不行就Remote-SSH: Kill VS Code Server on Host...,然后再启动,反正总有办法的,实在不行终端凑合着用

内网穿透

核心原理:借助第三方拥有公网 IP 的服务器,来中转外网请求与本地服务之间的通信。

我们需要的只是云服务器的公网IP和带宽,只有具有公网IP别人才能访问你的主机,而我们私人用的电脑一般是没有公网IP的,此时我们的主机与mac处于不同局域网内(也就是不同内网),但是他们同时能访问公网IP,也就是说,他们可以与具有公网IP的服务器连接

我们要做的就是利用这个公网IP实现处于不同局域网下设备的ssh连接,这就是内网穿透

实战

我们这里用到一个开源工具叫做frp(当然也有其他方法)

我们首先要明确三个角色:请求端、服务端、客户端

  • 请求端,就是请求客户端的内容,而它本身不作为被请求的对象,因此不需要配置frp
  • 服务端,用于接收请求端的请求,转发给客户端,这个转发和接收的功能就需要frps(服务端)
  • 客户端,接收转发自服务端的请求,根据请求做出响应,需要frpc(客户端)

我们下载下来的压缩包解压后(需要下载服务器对应的操作系统版本和主机操作系统的两个压缩包),包中内容分为frpc和frps,分别是客户端和服务端,选择对应的保留,不要的就删了

服务端

首先你要有个服务器,最便宜的就行,然后进控制台,放生下端口

  • 7000/TCP:frpc 连接 frps 使用
  • 6000/TCP:Mac 通过 SSH 连接 Windows 的入口

先把linux的frps文件上传到服务器(不需要做任何改动),

检查frps中frps.toml文件是否存在,不存在要自己创建一个,内容很简单,只需要一行

toml 复制代码
bindPort = 7000
auth.method = "token"
auth.token = "你的强密码"

以上三行是最简安全配置。其中 bindPort = 7000 是必需的,auth.method 和 auth.token 用于防止未授权客户端连接你的 frps,最好还是设置一下

在windows端得powershell执行上传

powershell 复制代码
scp .\frps .\frps.toml root@206.237.13.114:/opt/frps/

直接ssh登录服务器,先给frps可执行权限

bash 复制代码
chmod +x /opt/frps/frps

我的frps不知道为什么没有默认文件,于是使用ai的神秘小代码

复制粘贴执行以下代码,一键创建 systemd 服务文件

bash 复制代码
cat > /etc/systemd/system/frps.service << 'EOF'
[Unit]
Description = frp server
After = network-online.target
Wants = network-online.target

[Service]
Type = simple
ExecStart = /opt/frps/frps -c /opt/frps/frps.toml
Restart = on-failure
RestartSec = 5s
LimitNOFILE = 1048576

[Install]
WantedBy = multi-user.target
EOF

注意,如果你的frps上传到了和我不一样的地方,要修改ExecStart的路径

然后再执行以下代码配置,服务端的frps就搞定了

bash 复制代码
# 重新加载 systemd 配置
systemctl daemon-reload

# 设置开机自启
systemctl enable frps

# 启动服务
systemctl start frps

# 查看运行状态
systemctl status frps
image-20260825230626682

绿色真的很养眼,如果没有连接成功,就

维护:ls -l /opt/frps/检查frps文件在不在,可以用cat命令查看内容

客户端

先配置一下frpc.toml

端口7000是客户端与服务端连接的端口,6000端口是他的公网访问入口,服务端监听到 Mac 发给服务器公网 IP:6000 的请求后,将流量转发给windows的frpc,最后frpc通过本地的22端口将流量交给本机的sshd服务

toml 复制代码
serverAddr = "206.237.13.114"
serverPort = 7000
# auth.token = "与服务端相同的token"   # 如果服务端设置了token,请取消注释并填写

[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

我们在pc端启动frpc,确保运行时能够与服务器中的frps进行连接

用cmd打开frp所在的目录,执行以下指令

bash 复制代码
frpc.exe -c frpc.toml

记得远程端口号要和服务器监听的是一致的(这里用的6000端口),否则连接不上

请求端

我们在mac执行ssh连接,对6000端口发起请求

bash 复制代码
ssh -p 6000 你的Windows用户名@服务器公网IP

正常输入windows端的密码之后,登录成功,此时我们就完成了内网穿透的连接

nssm自启动服务安装

连接上了还不够,如果每次都要手动打开windows的frpc岂不是很麻烦,所以我们跟服务器一样搞一个自启动就好了

我们这里使用nssm提供的服务,首先我们需要一个nssm

https://nssm.cc/download

在nssm.exe的位置打开cmd,输入frpc安装指令,记得替换成自己的文件绝对路径

bash 复制代码
nssm install frpc "C:\frp\frpc.exe" "-c C:\frp\frpc.toml"

进行一些配置

bash 复制代码
nssm set frpc Start SERVICE_AUTO_START
nssm set frpc AppExit Default Restart
nssm set frpc AppRestartDelay 5000
nssm start frpc

后续维护

bash 复制代码
nssm status frpc          # 查看运行状态
nssm restart frpc         # 重启服务(修改配置后)
nssm remove frpc confirm  # 卸载服务(将来不用时)

至此,全链路的内网穿透完成了

评论

正在加载评论区…