ssh远程连接主机及内网穿透(win11)
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 则需要重启

最后查看功能这里就有客户端和服务端了
同时win键搜索计算机管理,启动类型都改成自动(如果没有,或者没找到,那就直接上网查powershell相关的命令来安装吧

都改成自动,然后右键自己启动一下
然后依旧在powershell输入指令检查状态
powershell
复制代码
Get-Service -Name *ssh*

现在他们就正常运行了
检查22端口是否正常被监听
powershell
复制代码
netstat -an | findstr :22

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

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

绿色真的很养眼,如果没有连接成功,就
维护: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
在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 # 卸载服务(将来不用时)
至此,全链路的内网穿透完成了
评论