Windows11开启SSH服务

文章目录

  • 环境
  • 背景
  • 安装SSH服务
  • 配置SSH服务
  • 启动/停止SSH服务
  • 登录
  • 接下来
  • 参考

环境

  • Windows 11 家庭中文版

背景

在我的Windows电脑上,有些网站无法直接访问,所以需要通过Mac来代理。为此,需要创建一个位于Windows和Mac之间的SSH tunnel。

在我的环境中,网络结构如下:

Windows ⇐ Mac ⇒ server ⇒ 网站

首先,如果只是想在Mac上访问网站,则只需在Mac上建立一个到server的SSH tunnel:

ssh -o ExitOnForwardFailure=yes -qTfN -D 8888 <server>

然后在浏览器里配置SOCK5代理 localhost:8888 即可。

如果想要在Windows端访问网站,则需要在Windows和Mac之间再建立一个SSH tunnel。也就是说,把Mac作为请求转发的中继。

如果Windows能ssh登录到Mac(比如通过GitBash、Putty等工具),则只需在Windows端运行如下命令:

ssh -o ExitOnForwardFailure=yes -qTfnN -L 8888:localhost:8888 <Mac>

注意:此处无需添加 -D 选项,而 -L 选项表示local,也就是正向tunnel(tunnel的方向和ssh的方向一致)。

该解决方案可参见我另一篇文档 https://blog.csdn.net/duke_ding2/article/details/106878081

问题是,由于一些原因,Mac无法打开SSH服务,所以,只能想办法从Mac登录到Windows,建立一个远程(反向)SSH tunnel。也就是说,ssh的方向是从Mac到Windows,但tunnel的方向是从Windows到Mac。在Mac端运行如下命令:

ssh -o ExitOnForwardFailure=yes -qTfnN -R 8888:localhost:8888 <Windows>

注意:这两条ssh命令里,转发的目标地址都是 localhost 。请注意目标地址是相对于SSH tunnel的server端而言的,由于这两个ssh命令的SSH tunnel server都是Mac,所以,这两个 localhost 都是指Mac,也就是说,都是把tunnel client(即Windows)端的8888端口请求转发到Mac的8888端口。这一点一定要搞清楚。

为此,需要在Windows端开启SSH服务,以便Mac能够ssh登录到Windows端。

安装SSH服务

首先,点击“开始”按钮,查找“设置”:

在这里插入图片描述

打开“设置”窗口,选择“应用” -> “可选功能”:

在这里插入图片描述

在“已安装功能”里,确保“OpenSSH客户端”和“OpenSSH服务器”都存在,如下图所示。

在这里插入图片描述

在我的机器上,“OpenSSH客户端”默认已安装,而“OpenSSH服务器”不存在,此时需要点击窗口右上角的“查看功能”按钮,然后在弹出对话框里选中“OpenSSH服务器”并安装。安装过程略。

配置SSH服务

安装好以后,在启动SSH服务之前,还要先配置一下,配置文件为: C:\ProgramData\ssh\sshd_config

以下是我修改后的配置:

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey __PROGRAMDATA__/ssh/ssh_host_rsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_dsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ecdsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile	.ssh/authorized_keys

#AuthorizedPrincipalsFile none

# For this to work you will also need host keys in %programData%/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
PermitEmptyPasswords yes

# GSSAPI options
#GSSAPIAuthentication no

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#PermitTTY yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#PermitUserEnvironment no
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

# no default banner path
#Banner none

# override default of no subsystems
Subsystem	sftp	sftp-server.exe

# Example of overriding settings on a per-user basis
#Match User anoncvs
#	AllowTcpForwarding no
#	PermitTTY no
#	ForceCommand cvs server

#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

有几处需要修改和留意:

  • PubkeyAuthentication yes :允许使用ssh key登录(但只配置此处还不够)。
  • AuthorizedKeysFile .ssh/authorized_keys :存放授权公钥的文件(路径是基于个人的home目录,比如 C:\Users\duke_ )。
  • PasswordAuthentication yes :是否允许使用密码登录,如果不允许,则只能通过ssh key登录,如果没有配置ssh key,则直接报错。
  • PermitEmptyPasswords yes :是否允许空密码,在我的环境里,Windows本身没有设置登录密码,但是,此处即使设置为允许空密码,ssh登录时还会提示输入密码,而且无论是直接回车,还是随便输入什么内容再回车,都不能登录。反而是给Windows设置登录密码后,能通过密码登录。有待继续研究。
  • #Match Group administrators# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys :如果允许使用ssh key登录,则此处必须注释掉。

启动/停止SSH服务

修改完配置以后,需要重启SSH服务。“开始” -> “运行” -> “services.msc”,打开服务窗口:

在这里插入图片描述

找到“OpenSSH SSH Server”,点击右键,选择“启动”或者“重新启动”。

注:每次修改完配置以后,别忘了重新启动SSH服务,修改才能生效。

登录

现在,就可以在Mac端,用ssh登录到Windows了。

[ding@192 .ssh]$ ssh admin@192.168.1.4
admin@192.168.1.4's password: 

Microsoft Windows [版本 10.0.22000.2538]
(c) Microsoft Corporation。保留所有权利。

admin@DESKTOP-IK7TLA2 C:\Users\duke_>

但是这种方法只限于Windows有登录密码,如果没有密码,在提示输入密码时,无论直接回车还是随便输入什么内容再回车,都不行。不知道是不是哪里配置的有问题,有待继续研究。

还有一种方法是用ssh key登录(无论Windows有没有登录密码)。把Mac的公钥(一般是 ~/.ssh/id_rsa.pub 文件)内容复制到Windows的 c:\Users\duke_\.ssh\authorized_keys 文件里,然后在Mac端用ssh登录,就会直接登录,不再提示输入密码了:

[ding@192 .ssh]$ ssh admin@192.168.1.4

Microsoft Windows [版本 10.0.22000.2538]
(c) Microsoft Corporation。保留所有权利。

admin@DESKTOP-IK7TLA2 C:\Users\duke_>

接下来

配置好SSH登录以后,就可以在Mac上建立SSH反向tunnel了。

ssh -o ExitOnForwardFailure=yes -qTfnN -R 8888:localhost:8888 admin@192.168.1.4

注: 192.168.1.4 是Windows的IP地址。

注意:此处使用该命令,是因为Mac也不能直接访问网站,从Mac到server还有一层代理做动态转发(在Mac上):

ssh -o ExitOnForwardFailure=yes -qTfN -D 8888 <server>

如果Mac能够直接访问网站,则应使用如下命令(在Mac上):

ssh -o ExitOnForwardFailure=yes -qTfN -R localhost:8888 <Windows>

注:这种方式亲测有效(使用w3测试)。该方式其实是“反向动态代理”,也就是 -R-D 的组合。之所以只用 -R ,是因为自从OpenSSH 7.6起, -R 已经包含了动态转发的功能,参见 http://openssh.com/txt/release-7.6

接下来,在Windows端的浏览器里,配置SOCKS5代理 localhost:8888 即可。

注:如果不建立Windows和Mac之间的SSH tunnel,而直接在Windows端的浏览器里,配置SOCKS5代理 <Mac>:8888 行不行呢?答案是不行,因为Mac的8888端口是nc不通的,无法接收外界的请求(但能接收本地的请求,具体原因我也不是很清楚)。

关于SSH tunnel的代理转发,可参见我另一篇文档( https://blog.csdn.net/duke_ding2/article/details/106878081 )。

参考

  • https://www.jianshu.com/p/03b04f96eaa8
  • https://blog.csdn.net/duke_ding2/article/details/106878081
  • https://unix.stackexchange.com/questions/179270/how-to-create-reverse-dynamic-ssh-port-forwarding

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/336508.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】vector容器接口要点的补充

接口缩容 在VS编译器的模式下&#xff0c;类似于erase和insert接口的函数通常会进行缩容&#xff0c;因此&#xff0c;insert和erase行参中的迭代器可能会失效。下图中以erase为例&#xff1a; 代码如下&#xff1a; #include <iostream> #include <vector> #inclu…

如何本地部署虚VideoReTalking

环境&#xff1a; Win10专业版 VideoReTalking 问题描述&#xff1a; 如何本地部署虚VideoReTalking 解决方案&#xff1a; VideoReTalking是一个强大的开源AI对嘴型工具&#xff0c;它是我目前使用过的AI对嘴型工具中效果最好的一个&#xff01;它是由西安电子科技大学、…

MATLAB聚类工具箱

本文借鉴了数学建模清风老师的课件与思路&#xff0c;可以点击查看链接查看清风老师视频讲解&#xff1a;【1】MATLAB聚类工具箱&#xff1a;提前预览工具箱的核心功能_哔哩哔哩_bilibili 关于工具箱的获取&#xff0c;在数学建模学习交流公众号里发送&#xff1a; 567891 %% …

idea 安装免费Ai工具 codeium

目录 概述 ide安装 使用 chat问答 自动写代码 除此外小功能 概述 这已经是我目前用的最好免费的Ai工具了&#xff0c;当然你要是有钱最好还是用点花钱的&#xff0c;比如copilot&#xff0c;他可以在idea全家桶包括vs&#xff0c;还有c/c的vs上运行&#xff0c;还贼强&am…

数据加密-mysql

想要实现数据加密可以在mysql数据库表实现数据加密&#xff0c;来确保数据安全。下面就是加密算法AES_ENCRYPT&#xff0c;其他加密算法类似。 1 创建一张临时表test_table CREATE TABLE test_table (name varchar(20) DEFAULT NULL,id blob ) ENGINEInnoDB DEFAULT CHARSETu…

【JavaEE】_基于UDP实现网络通信

目录 1. 服务器 1.1 实现逻辑 1.2 代码 1.3 部分代码解释 2. 客户端 2.1 实现逻辑 2.2 代码 2.3 客户端部分代码解释 3. 程序运行结果 4. 服务器客户端交互逻辑 此篇内容为实现UDP版本的回显服务器echo server&#xff1b; 普通服务器&#xff1a;收到请求&#xff…

领略指针之妙

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

【高等数学之极限】

一、引言 我们先思考一下&#xff0c;上面三个表达式&#xff0c;是否可以将极限值直接代入求值&#xff0c;我们在计算之前需要先分析一下&#xff0c;如果将极限值代入&#xff0c;那么表达式将会变成什么形式? 经过上面的分析&#xff0c;我们发现第一个式子可以直接带入&a…

微电网优化MATLAB:遗传算法(Genetic Algorithm,GA)求解微电网优化(提供MATLAB代码)

一、微网系统运行优化模型 微电网优化是指通过对微电网系统中各个组件的运行状态进行监测和调节&#xff0c;以实现微电网系统的高效运行和能源利用的最大化。微电网是由多种能源资源&#xff08;如太阳能、风能、储能等&#xff09;和负载&#xff08;如建筑、工业设备等&…

通用人工智能的能力评估框架-Levels of AGI Operationalizing Progress on the Path to AGI

通用人工智能的能力评估框架-Levels of AGI: Operationalizing Progress on the Path to AGI 译自’Levels of AGI: Operationalizing Progress on the Path to AGI’&#xff0c;有所删节.笔者能力有限&#xff0c;敬请勘误。 摘要 Google DeepMind提出一种针对通用人工智能 …

端口映射的定义、特点、场景、实例、常见问题回答(Port Mapping)

目 录 一、端口映射&#xff08;Port Mapping&#xff09; 二、端口映射应用场景&#xff08;什么时候用到端口映射&#xff09; &#xff08;一&#xff09;、使用端口映射的条件 &#xff08;二&#xff09;使用端口映射的具体场景 三、端口映射技术的特点 …

LLM之RAG实战(十七)| 高级RAG:通过使用LlamaIndex重新排序来提高检索效率

基本RAG的检索是静态的&#xff0c;会检索到固定数字&#xff08;k&#xff09;个相关文档&#xff0c;而如果查询需要更多的上下文&#xff08;例如摘要&#xff09;或更少的上下文&#xff0c;该怎么办&#xff1f; 可以通过在以下两个阶段来实现动态检索&#xff1a; 预检索…

Python对Excel文件中不在指定区间内的数据加以去除的方法

本文介绍基于Python语言&#xff0c;读取Excel表格文件&#xff0c;基于我们给定的规则&#xff0c;对其中的数据加以筛选&#xff0c;将不在指定数据范围内的数据剔除&#xff0c;保留符合我们需要的数据的方法。 首先&#xff0c;我们来明确一下本文的具体需求。现有一个Exc…

Centos 7 单机部署 consul

一、下载安装 参考官网文档 Install | Consul | HashiCorp Developer 进入Centos 执行下面命令 sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo sudo yum -y install consul 这种方法安装完成…

Javascript简介(全部是基础)

js初识 js是一种解释性语言&#xff0c;不需要编译&#xff0c;直接由浏览器解析执行 组成 ECMAScript是一种开放的&#xff0c;被国际上广为接收的&#xff0c;标准的脚本语言规范&#xff0c;主要描述&#xff1a;语法&#xff0c;变量&#xff0c;数据类型&#xff0c;运算…

什么是DOM?(JavaScript DOM是什么?)

1、DOM简洁 DOM是js中最重要的一部分&#xff0c;没有DOM就不会通过js实现和用户之间的交互。 window是最大的浏览器对象&#xff0c;在它的下面还有很多子对象&#xff0c;我们要学习的DOM就是window对象下面的document对象 DOM&#xff08;Document Object Model&#xff09…

C++ 学习系列 -- std::function 与 std::bind

一 std::function 与 std::bind 的介绍 1. std::function std::function 是 c 11 的新特性 &#xff0c;包含在头文件<functional>中&#xff0c;为了更方便的调用函数而引入。 std::function 是一个函数包装器&#xff08;function wrapper&#xff09;&#xff0c;…

Cmake(1)——Cmake的基本介绍和原理、Cmake的安装、如何使用Cmake构建项目

Cmake的基本介绍和原理、Cmake的安装、如何使用Cmake构建项目 插播&#xff01;插播&#xff01;插播&#xff01;亲爱的朋友们&#xff0c;我们的Cmake课程上线啦&#xff01;感兴趣的小伙伴可以去下面的链接学习哦~ https://edu.csdn.net/course/detail/39261 1、Cmake的基…

在微信公众号中加入ChatGPT聊天的方法

1 介绍 开源项目 "chatgpt-on-wechat" 支持通过微信公众号进行调用&#xff0c;这意味着用户可以在与公众号的交互中体验 ChatGPT。由于服务是部署在远端服务器上的&#xff0c;因此用户只需拥有一部手机&#xff0c;就可以在任何环境下与 ChatGPT 进行交流。例如&am…

fabric.js 组件 图片上传裁剪并进行自定义区域标记

目录 0. 前言 1. 安装fabric与引入 2. fabric组件的使用 3. 属性相关设置 4. 初始化加载 4. 方法 5. 全代码 0. 前言 利用fabric组件&#xff0c;实现图片上传、图片”裁剪“、自定义的区域标记一系列操作 先放一张效果图吧&#x1f447; 1. 安装fabric与引入 npm i …