Lexsion 发布的文章

普源MSO5000系列示波器破解选件

前言

几年前,笔者有幸听闻民族品牌 日狗(RIGOL-普源)有一个系列高低配版本通过软件限制,硬件完全一样,国外有大神购买低配版本,对其系统进行破解。因去年双十一京东折扣较大,今年早早便开始关注该机器的价格变化。果不其然,在今年双十一期间MSO5074价格美丽。你买了么?

首先介绍一下该系列的命名规则。型号中的MSO5表示其属于MSO5000系列,07表示带宽为70MHz,4表示四个通道。该系列型号命名MSO表示它属于混合信号示波器(Mixed Signal Oscilloscope),它将数字存储示波器(DSO)与逻辑分析仪(LA)的部分测量功能整合在一台仪器中,以能够在同一显示屏幕上看到多个时间对齐的模拟和数字波形。

尽管混合信号示波器的优势在于混合信号的分析,但MSO5000系列的LA探头(PLA2216)并非标配,而是以选件形式存在,价格当然是非常昂贵。而国外有大神自行设计了较低成本的探头方案,本文暂不讨论,有需要的朋友可以自行搜索。

本文是对EEVblog社区的Hacking the Rigol MSO5000 series oscilloscopes帖子中最新固件的破解内容整理。

备份

一份成熟的固件破解方案少不了备份,通过大佬tv84提供的备份脚本可以快速对MSO5000进行备份。

首先下载解压第一个文件中的DS5000Update.GEL文件到一个FAT32 U盘(空间>1GB)中,插入示波器。按 Utility 键,在弹出的辅助菜单中选择 系统 -> 帮助 ->本地升级,点击确定以开始运行并等待脚本执行结束。结束后关闭电压拔下U盘,在电脑上检查备份文件并将其转移至安全的位置存储,最后删除文件。

然后下载解压第二个文件中的DS5000Update.GEL文件,重复上一步骤的操作。

破解步骤

大佬qali.pro提供了本破解。

  1. 升级系统

笔者到手的固件版本是v00.01.03.00.03,发布时间是2021/10/18,这是目前的最新版本。查看固件版本请按 Utility 键,然后在弹出的辅助菜单中选择 系统 -> 帮助 -> 关于此示波器。如果您的系统不是该版本,使用本破解需要先升级到该版本。如果您的系统是该版本,请跳过这一步。

访问RIGOL官方固件下载链接获取固件。解压DS5000Update.GEL文件到一个FAT32 U盘中,插入示波器。按 Utility 键,在弹出的辅助菜单中选择 系统 -> 帮助 -> 本地升级,点击确定以开始运行升级。等待完成升级。

  1. 破解固件

下载Patch.zip文件并将其中的三个文件解压到一个FAT32 U盘中,插入示波器。按 Utility 键,在弹出的辅助菜单中选择 系统 -> 帮助 -> 本地升级。点击确定开始破解流程。

等待示波器进入白屏命令行界面,然后在屏幕显示 Press any key on the scope to continue...时按屏幕右侧任意按键,整个过程中该提示会出现两次。之后示波器会黑屏几十秒,等其自动重启即可完成破解,不需要按电源键。

此时按 Utility 键,在弹出的辅助菜单中选择 系统 -> 帮助 -> 选件列表,即可看到选件的License全部显示Forever,这表示您已破解了所有选件。

  1. 自校正

最后,按大佬的说法,需要重新运行示波器的自校正。在自校正前需要保证示波器已经热机,即开机运行了半个小时以上。按 Utility 键,在弹出的辅助菜单中选择 系统 -> 自校正,然后点击开始键进行自校正,整个过程可能需要几十分钟。

如果您需要去除破解状态,您可以使用官方升级文件运行本地升级流程。

参考

Hacking the Rigol MSO5000 series oscilloscopes-EEVblog

H3C WA4320H-SI-FIT USB 连接串口按键无效踩坑记

前言:

今天与新华三的技术支持一起研究给H3C的一个墙面AP刷固件,AP型号是WA4320H-SI-FIT,瘦AP。我们要做的是通过串口命令刷固件,这个机型的串口是通过Micro USB接口连接到电脑识别的。通过数据线连接电脑后,电脑顺利的出现了一个COM口,使用MobaXterm顺利连接串口,也看到了串口打印的日志。但在提示 Press ENTER to get started 时,按ENTER键却没有任何反应,我们尝试重启后在前面的 Press Ctrl-B to ...时按Ctrl+B,也没有任何反应。新华三技术支持表示遇到过数据线不良导致此问题的,但我这换了几根线后依然如此,可以排除线的问题。

故障原因:

在一切陷入僵局后,向公司的大佬求助。大佬插到他的笔记本上,Ctrl+B一按下去,启动过程就被终止了。本来我想的是机器原始固件有限制,不识别按键输入,大佬上肯定也补星。大佬成功后我当即傻眼,随后脑子里放电影似的回忆大佬操作过程和我哪里不一样,发觉在大佬笔记本的设备管理器里,串口设备名称貌似和我不一样,这说明串口驱动不一样! 如此说来,会不会是驱动不兼容导致的呢?事实证明,确实如此!

故障处理:

于是,我求大佬让我再看了一眼他的设备管理器,记下了大佬的串口名称是 XR21V1410后马不停蹄跑回自己电脑旁 ,看我的电脑则是什么Microsoft USB Serial Port。至于XR21V1410 是什么,我是从未听说过,于是我去搜索了一番,发现这是MaxLinear公司的一款USB转串口芯片。

立刻从官方产品页下载了最新的Windows驱动程序,然后解压。在串口上右击,更新驱动,定位到刚解压的驱动,进行更新,完事儿就能正常使用了!

其他原因:

此处列出其他可能的原因:

  1. 数据线不良导致传输数据不稳定。

    更换更好的数据线。

  2. 串口配置信息错误。

    波特率9600,数据位8,停止位1,无奇偶校验与流控。某些Shell默认打开流控,需要取消掉。

B560M Pro4 主板安装ESXi与黑群晖踩坑笔记

为了改善家中文件存储的安全性,降低功耗,笔者打算替换掉家中运行黑群晖的那台十几年前的工控机。新的机器使用专业的6盘位NAS机箱,配置采用B560M Pro4主板搭配Intel CORE i5 11500 CPU、16G DDR4 3000 * 2 。有望提升性能、降低功耗、扩充功能、提高数据安全,并且降低房间噪音。

读懂并实践本文,你可能需要预先在技能树中点亮以下技能:
1:基本的Windows系统与Linux Shell操作;
2:基本的网络知识;
3:域名、证书申请相关;

ESXi踩坑

ESXi 6.7 更换证书实现正常HTTPS访问

ESXi装完后默认就是HTTPS访问,但证书确实自签名的。浏览器会报不安全,使用体验很差。于是我们要更换证书,在这之前,要拥有自己的域名,并且配好外网访问或将域名解析到内网地址。
外网访问技术方面,内网穿透或是端口转发;证书的获取,很多云服务商提供了免费的额度,大概阿里云就有吧,申请后会得到一个证书和一个私钥;以上此处不做赘述。

证书两个文件,xxx.crt改为rui.crt,xxx.key改为rui.key 。

启动ESXi后,网页登录,在 主机 页面点击 操作->服务->启用安全Shell(SSH) ,打开SSH访问。

连接SSH后进入 /etc/vmware/ssl 目录,把原有的证书和私钥文件改名或直接删除,然后将刚才改名的文件上传。

重启ESXi,或使用以下命令重启相关服务后新的证书便被应用了。

/etc/init.d/hostd restart
/etc/init.d/vpxa restart

ESXi 6.7 修改配置文件强制设置SATA直通

装完ESXi6.7,发现主板自带的SATA控制器无法像别人那样可以直接设置直通,对应的控制器是灰色的。这时,我们就需要修改配置文件了。

首先,需要确认VT-D已经打开了,这个在BIOS中设置,每款主板设置不一样,相信能玩ESXi的朋友,这个应该都会打开,不知道怎么设置可以使用搜索引擎搜索。

启动ESXi后,网页登录,在 主机 页面点击 操作->服务->启用安全Shell(SSH) ,打开SSH访问。

点击主机->管理->硬件->PCI设备,找到描述内容中含有 SATA、AHCI 字样的设备,记录其 设备 ID供应商 ID注意,若要直通SATA控制器,务必保证安装ESXi的存储器不在直通的SATA控制器下,否则直通后ESXi将无法启动!

使用类似Putty、MobaXterm、xShell等终端工具连接ESXi,账号使用root,密码与网页登录相同。

然后使用 vi 修改ESXi的配置文件 /etc/vmware/passthru.map ,在文件末尾加入AHCI控制器的硬件ID后保存重启,如下所示。vi的使用此处不再赘述。

# Intel Corporation SATA
8086   43d2    d3d0    default

重启后即可在主机->管理->硬件->PCI设备页面下看到SATA设备已经不是灰色了,后面该怎么做直通就不罗嗦了。

ESXi 6.7 直通核显

ESXi在开机时会获取核显的控制权限,用于显示自检信息与DCUI界面,其他并不能作为硬件性能提供给虚拟机用,这样让人感觉有点浪费了核显。我们可以考虑将它直通给某个虚拟机使用。

启动ESXi后,网页登录,在 主机 页面点击 操作->服务->启用安全Shell(SSH) ,打开SSH访问。

点击主机->管理->硬件->PCI设备,找到描述内容中包含Intel字样的条目,自行判断哪个是显卡。选中后点击 切换直通 将其切换为直通,按提示重新引导ESXi。

编辑需要核显的虚拟机,点击添加其他设备->PCI 设备,在下拉菜单中选中需要添加的核显,点击 预留所有内存 ,然后保存。

在ESXi Shell下执行以下命令,让ESXi启动时不去获取显卡控制权,然后重启ESXi。

esxcli system settings kernel set -s vga -v FALSE

Tips:如上设置后,DCUI界面便不能直接访问了。需要访问DCUI界面可在Shell中使用dcui命令进入DCUI,退出按Ctrl+C。

Tips:不再使用核显直通时记得改回去,上面的命令中 FALSE 换成 TRUE 执行一下即可。

ESXi 6.7 直通网口老是提示“已启用/需要重新引导”

为了局域网传输速度,斥资购买了2.5G PCIE网卡,安装后正常识别。切换直通,重新引导后依然提示“已启用/需要重新引导”。

通过搜索发现:

这个是ESXi 对PCIE 设备的 ACScheck 带来的问题。在主机>管理>系统>高级设置里面,找到VMkernel.Boot.disableACSCheck,关掉就好了。


黑群晖踩坑

群晖网口改桥接电脑插群晖上网

因为我财力有限,路由器没有2.5G网口,目前只有我的电脑和群晖有2.5G网口。于是我需要将群晖的两个2.5G网口桥接,然后电脑通过网线直插群晖上网。这样,我的电脑访问群晖的网络速率就是2.5G了。经过搜索找到了办法。

打开群晖的Open vSwitch交换机

登录群晖管理页面,打开 控制面板->网络->网络界面 ,点击 管理->Open vSwitch设置 ,勾选 启用Open vSwitch 然后点击确定。若之前已经启用了群晖的虚拟机功能,你会发现Open vSwitch已是启用状态且无法关闭,则此步骤忽略。

打开群晖的SSH并连接Shell

登录群晖管理页面,打开 控制面板->终端机和 SNMP->终端机,勾选 启用SSH,点击 应用 保存设置。

使用类似Putty、MobaXterm、xShell等终端工具连接群晖。用户名和密码与网页登录相同,要使用有管理员权限的账号。

通过命令配置Open vSwitch

登陆后执行 sudo -i 提升到root权限。通过 ifconfig 命令可以看到ovs_eth0ovs_eth1两个网桥,通过详细的信息判断哪个网桥是连接路由器的,哪个网桥暂未使用给电脑。保留连接路由器的网桥,删除暂未使用的网桥,然后将释放的接口绑定到第一个网桥。

这里,我的 ovs_eth0ovs_eth1 分别对应 eth0eth1 ,大多数双网口群晖应该都是如此。于是我要删除ovs_eth1,将释放的eth1接口绑定到ovs_eth0。命令如下:

ovs-vsctl del-br ovs_eth1
ovs-vsctl add-port ovs_eth0 eth1

执行后将电脑连接通过网线连接到群晖的第二个网口,若配置正确,此时电脑应该可以正常获取IP,正常上网了。若网络不正常,可重启群晖,Open vSwitch的配置将还原。

通过任务计划让群晖开机时自动配置Open vSwitch

若上一步的网络配置可以正常工作,则将这两句命令添加到任务计划开机执行,这样就不用每次重启群晖都手动再配一遍了。

登录群晖管理页面,打开 控制面板->任务计划,点击 新增->触发的任务->用户定义的脚本 。在弹出的添加窗口中,常规选项卡下,任务名称自己编,用户选择 root 、事件选择开机;任务设置选项卡下,在运行命令下的文本框中填入有效的命令,然后点击确定保存即可。

Tips:使用此方法后可能出现自动获取IP异常的问题,建议在设置前先为网络1分配静态IP地址试用,笔者遇到此问题后将IP设为了静态,会关注一段时间。

USB-C与PD学习笔记——在新的USB应用中换用Type-C接口

USB 发展概览

USB,是英文Universal Serial Bus(通用串行总线)的缩写,是一个外部总线标准,目前由USB-IF维护。自1994年问世,大致经历了以下时期:USB1.0(1.5Mb/s ,Low-Speed, 1996.01)、USB1.1(12Mb/s ,Full-Speed, 1998.09)、USB2.0(480Mb/s ,High-Speed, 2000.04)、USB3.0(5.0Gb/s ,Super-Speed, 2008.11,又称USB3.1 Gen1、USB3.2 Gen1)、USB3.1 Gen2(10Gb/s ,Super-Speed+, 2013.12,又称USB3.2 Gen2)、USB3.2 Gen2x2(20Gb/s,Super-Speed++, 2017.09,仅支持Type-C接口)、USB4(包含 USB4® 20Gbps与USB4® 40Gbps并向下兼容前述规范,2019.09)。需要注意的是,雷电接口不属于USB规范,它是英特尔维护的一个接口规范,切莫混淆。

版本 速度 发布年份(参考)
USB1.0 1.5Mb/s ,Low-Speed,低速 1996.01
USB1.1 12Mb/s ,Full-Speed,全速 1998.09
USB2.0 480Mb/s ,High-Speed,高速 2000.04
USB3.0 5.0Gb/s ,Super-Speed 2008.11
USB3.1 Gen2 10Gb/s ,Super-Speed+ 2013.12
USB3.2 Gen2x2 20Gb/s,Super-Speed++ 2017.09
USB4® 20Gbps 20Gbps 2019.09
USB4® 40Gbps 40Gbps 2019.09

USB3时代命名混乱,最初的USB3.0速率为5.0Gb/s,后来USB3.1和3.2发布后,速度使用Gen1、Gen2、Gen2x2来表示。USB4时代USB-IF已经意识到了这个问题,简化USB版本命名。

USB-IF除维护上述的USB数据协议标准之外,他也定义了USB协议所使用的各种接口和电气规范。在USB3.1以及之前,接口与电器规范包含在USB规范中;从USB3.2开始,USB 3.2规范已经不再包含接口和电气规范,转为单独提供。

USB-IF定义了USB的电源规范。从最初的BC1.0(Battery Charging1.0)到提供5V1.5A电流支持的BC1.2。又从PD1.0开始,到广泛使用的PD2.0&3.0,支持最高20V5A的100W供电能力。最新的PD3.1快充标准由USB-IF 于2021年5月发布。由此,基于USB Type-C的电源支持添加了28V、36V、48V档,其分别能够提供140W、180W、240W三档功率;可调电压模式提供了15V到电源适配器最大电压的可调范围,分辨率100mV。在PD协议中,电源的供给方向与USB接口的功能角色通过单独的导线通信进行配置,实现了大量的功能。

笔者最初开始学习USB-PD的目的是为USB2.0设备更换Type-C接口。本学习笔记最初的目标是为电子工程师提供参考,以便快速将Type-C接口应用于电路设计中;后期若有机会深入,可以研究一下快充协议触发。当然笔者才疏学浅,这个目标目前还很遥远。目前我为探索通过Type-C充电时各IO的信号,画了一张板子做测试用,文件已上传GitHub

本文相关的参考文档,如往常一样,我会在文末附加链接。

USB Type-C 接口定义

USB Type-C 母座定义(前视图):

USB Type-C 公头定义(前视图):

如何从C口获得电力

这个标题可能看起来有些无聊,但很多初学者对此并不了解。从传统的几款USB接口中获取电力非常简单,你只需要连接VBUS和GND,即可轻松获得电力。但Type-C 接口并非如此。这时有人会说,我画了张板子,Type-C口只是用来供电,我只连接了VBUS和GND,手机充电器插上,板子就工作了。哪有你说的那么悬?

传统5V取电:

目前市面常见的Android手机已经普遍采用Type-C 接口,但充电线与电源适配器间的连接仍大量使用USB A型接口,而这类充电器并不能代表全部。有一类电源适配器的输出口也是C口,它们应当支持PD快充协议。按PD规范,C口应该支持双向充电,这是两者协商决定的,提供电力的设备被称为Source,而受电的设备被称为Sink。Source端应上拉CC,Sink端应下拉CC,以此完成识别。复杂的快充协商要求两边是IC来执行,而普通的5V设备想做到被其他设备识别,只需要几颗电阻就可以。

所以,如上图所示。如果我们要从C口获取电力,我们需要的便是在受电即Sink端Type-C母口的CC1和CC2分别连接一个下拉电阻即可,一般取值5.1K。为什么要分别连接一颗下拉电阻,而不能直接短接CC1和CC2共用一颗电阻?因为在双头Type-C连接线缆中,CC实际只有一条,另一条将作为VCON,给线缆中的EMark芯片供电。注意,这里的EMark芯片是选配的,USB-IF规定了载流能力超过3A的线缆必须带有EMark芯片。而EMark 芯片会将CC线短接的情况识别为耳机附件模式,最终导致在Source端不能正确识别Sink设备。

按照上面介绍的逻辑,如果我们设计的是Type-C公头取电,比如是一条5V电源转接线。这种情况下我们只需要在CC上设计一个5.1K下拉电阻,VCON悬空即可。毕竟在公头Type-C上,只有一个CC线。另外,如果我们设计的是一个连接到Sink端的Type-C公头,此时我们应该为CC添加上拉电阻,以保证Sink正确识别到插入的是电源。具体的电阻大小与电源供电能力有关,此处不在赘述。

如何实现快充:

目前市面上有大量的快充协议,最广泛的可能要属USB PD 和高通的 QC。前者是在CC线上使用PD协议进行通信,后者是在D+和D-上加载不同电压来协商。学习这些信号的时序、协议需要耗费大量的时间。业界有公司专门为此设计了专用的接口芯片,他们往往提供了多种与单片机通信的方式,使用时无需关注PD协议信号的处理,通过简单的配置即可使用。此类产品如:沁恒CH224。

参考

Edge浏览器菜单透明效果异常导致无法看清的处理方案

前言:

笔者最近新换的电脑出厂预装Windows11,这个系统稳定性真不行,会出很多莫名其妙的问题。于是笔者装了个Windows11 的虚拟机,在虚拟机中安装Windows10还是有点小问题的,这里不展开。完活后发现的第一个问题就是Edge浏览器菜单透明样式异常,完全看不清选项。如下图所示:

Edge

处理思路:

  1. 这个问题一看就感觉与显示渲染有关,很有可能是虚拟机图形显示驱动兼容性问题。首先考虑换个黑主题碰碰运气,试了一下果然不行。

  2. 然后就打开搜索引擎开摆。最开始用关键词 Edge 菜单透明 搜索未果,考虑 Edge 和 Chrome 都采用的 Chromium 内核,会不会有Chrome用户遇到这个问题呢?

  3. 然后换关键词 Chrome 菜单透明 ,找到有用的信息了。

    有知乎用户于19年发文表示Chrome遇到此问题,前辈在文中表示他几乎把能试的都试了,都无效。最后突然想到显示相关office相关软件有个设置叫 硬件加速 前辈找了一下果然Chrome也有 硬件加速 ,然后关掉就好了。

    文末还有不愿透露ID的大佬评论,通过实验项目改一下图形后端渲染模式也可以解决。

详细操作:

于是我们有了两个办法二选一:

  1. 修改ANGLE graphics backend

    该项设置属于实验型设置,在Chrome中是在 chrome://flags 位置,那么在Edge中就应该是在地址栏中输入 edge://flags 回车打开实验项目设置。

    搜索 Choose ANGLE graphics backend 设置项,笔者测试只有 D3D11on12 选项是能恢复正常工作的。如果你不是虚拟机遇到此问题,可以试试换其他选项。如果所有选项都不行,那只好试试下面的办法了。

  2. 关闭硬件加速

    打开Edge浏览器的设置,如果看不清不好选择,可直接在地址栏输入 edge://settings 回车进入。然后在左侧选择 系统和性能 (有些环境中是:系统),然后在右侧的设置条目中找到使用硬件加速,将其关闭

    其实VMware虚拟机的话,还有一个办法:那就是在虚拟机设置中取消 加速3D图形 ,该设置在虚拟机设置的 显示器 部分。这个设置关闭虚拟机才能改哦!(非常糟糕的方案)

总结:为不影响性能,尽量用第一个办法解决。

参考:

Chrome部分框架窗口都变半透明了——WireWolf

使用SSH连接GitHub仓库

前言:

讲一个笑话:最近给新电脑装Git工具,才意识到自己之前用SSH连接GitHub的方法居然是错的。是这样的,我配置了密钥对后依然在使用之前配置的浏览器登录。这次换新电脑,之前没有登录GitHub,新装的Git工具。跟着官方文档配置完成后,git push -u origin master 居然还弹出登录页面,然后我才意识到之前错了。使用SSH连接仓库和创建仓库时GitHub教你的方法两者协议是不一样的,网页上给的参考命令是用的HTTPS。这些其实在开始使用Git文档中有的,只是不仔细看容易忽略。官方的SSH连接操作文档半中半英可读性也不够好,第一次读的时候没看仔细。以上教训告诉我们,学习不能急于求成,基础要仔细掌握。所以鄙人在此水贴一篇,算是个基础教程吧。(看我不如通读GitHub的文档?)

前置基础:

GitHub是一个提供Git服务的网站。Git是一套版本控制工具。所以,使用GitHub除了一些网页上的设置,其主要功能就是使用Git。首次使用Git首先要下载安装,然后便是要配置用户名和邮箱,建议设置成和GitHub上相同的。配置分为全局配置和仓库配置,全局就是没有仓库配置时默认的用户信息;仓库的就是单独某个仓库生效的。下载安装程序运行,一路点击下一步,装完Git后便可以打开Git Bash啦。

# 设置全局配置:
git config --global user.name "github's Name"
git config --global user.email "github@xx.com"
# 设置仓库的配置,要在仓库目录下执行:
git config user.name "git's Name"
git config user.email "git@xx.com"
# 查看的命令,查哪在哪执行:
git config --list

Git存储内容项目的单元被称为仓库(Repository),作为一个仓库,创建的过程称之为初始化。然后创建文件,需要产生一个历史记录时,就将变更的文件按需添加到暂存区,提交(Commit)一次。有了一次Commit后,便可以为其设置远端仓库地址,将本地的仓库变化推送过去保存。大致这么个流程:

# 创建一个以仓库名称命名的目录(或者叫文件夹),并进入其中。
mkdir XX-Repository
cd XX-Repository
# 使用初始化命令
git init
# 按照实际需要,创建或从其他地方拷贝文件到目录下。惯例要创建一个README.md文件,给人看。
touch README.md
cp ../../XXX.XXX ./XXX.XXX     # 这个Linux下用的多,Win下不如直接图形界面拖拽。
# 文件写的差不多了,先按需添加到Commit暂存区,
git add XXX.XXX XXX.XXX      # 添加指定文件
git add -A      # 添加所有新增或变更的文件
# 然后执行Commit,一般惯例要带-m参数,备注本次提交的变更。
git commit -m "first commit"
# 添加远端仓库地址,地址从仓库主页的绿色Code按钮中能看到:
git remote add origin https://github.com/USERNAME/REPOSITORY.git
# 设置远端仓库的分支为master,并推送到该分支。
git push -u origin master
# 因为上面是HTTPS的连接方式,所以会弹出网页的登录页面。按提示登录即可完成推送。

到此一个Git仓库大致就在GitHub上搞起来了。那如何换用SSH方式连接仓库呢?

通过SSH连接:

这里我抄一下官方的内容,原文半英半中,写了很多注意事项,很多内容的位置却不合理。在此我缩减了一下,有问题建议看官方文档。

检查已有的SSH密钥对

首先可以检查下您电脑上有没有已经生产的可用的密钥对,他们是成对的一组文件,包含私钥和公钥。

  1. 打开Git Bash。
  2. 执行 ls -al ~/.ssh ,如果.ssh目录下有密钥对变回在回显的信息中看到文件名类似于:
    • id_rsa.pub
    • id_ecdsa.pub
    • id_ed25519.pub

这里,如果提示目录不存在,那看样子就是啥都没有了。如果有密钥对,就可以用后面的方法检查有没有密码加密,没有密码或者知道密码便可以直接用。否则就按下面的方法新建密钥对。

生成新的SSH密钥

如果您还没有 SSH 密钥,则必须生成新 SSH 密钥用于身份验证。为了安全,需要在生产的密钥对上添加密码保护。如果不想在每次使用 SSH 密钥时重新输入这个密码,您可以将密钥添加到 SSH 代理(即ssh-agent),让它管理您的 SSH 密钥并记住您的密码。

  1. 打开Git Bash。

  2. 复制下面的文本粘贴到Bash中执行(替换为您自己的 GitHub 电子邮件地址)。

    ssh-keygen -t ed25519 -C "your_email@example.com"

    注:如果您使用的是不支持 Ed25519 算法的旧系统,请使用以下命令:

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  3. 此时将以邮箱地址为标签生成新的SSH密钥对。

    • 提示您“Enter a file in which to save the key(输入要保存密钥的文件)”时,按 Enter 键。 这密钥会存在默认文件位置。(即~/.ssh ,不存在默认位置没有积极意义且会让后面更繁琐。)
    • 在提示 Enter passphrase 时设置密码,在提示 Enter same passphrase again: 时重复密码。

在 Git for Windows 上自动启动 ssh-agent

您可以在打开 bash 或 Git shell 时自动运行 ssh-agent。并让它自动添加~/.ssh目录下新的 SSH 密钥。

  1. 复制以下内容并将其粘贴到 Git shell 的 ~/.profile 文件中保存,没有就创建一个:

    env=~/.ssh/agent.env
    
    agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
    
    agent_start () {
        (umask 077; ssh-agent >| "$env")
        . "$env" >| /dev/null ; }
    
    agent_load_env
    
    # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2=agent not running
    agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
    
    if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
        agent_start
        ssh-add
    elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
        ssh-add
    fi
    
    unset env

    ~/ 这个位置是用户的HOME目录,Windows 下就是 C:\Users\<你的用户名> 这个目录。

    如果您的私钥没有存储在默认位置之一(如 ~/.ssh/id_rsa),您需要告知 SSH 身份验证代理其所在位置。 要将密钥添加到 ssh-agent,请输入 ssh-add ~/path/to/my_key

  2. 重新开一个Git Bash窗口,ssh-agent首次被启动,自动搜索新增的密钥对,然后提示输入密码,按要求输入密码后密钥对就被加入了ssh-agent。以后运行 Git Bash 时便会自动启动 ssh-agent ,不再需要输入密码。

  3. ssh-agent 进程将继续运行,直到您注销、关闭计算机或终止该进程。

添加SSH 公钥到 GitHub 帐户

前面的操作概括来讲就是将本地的私钥添加到了本地的SSH代理中,下面要将公钥添加到GitHub上。

  1. 网页右上角点击头像,然后点击 Settings。在左侧找到 Access 部分,点击 SSH and GPG keys

  2. 点击右上方的 New SSH key,打开 SSH keys/ Add new 页面。

  3. 在 "Title"(标题)文本框中,为新公钥添加描述性标题,要求自己看到就知道是啥。 例如,如果密钥对用于枪神6笔记本上,此公钥名称可以是 "God of Gun 6"。

  4. 使用以下命令将 SSH 公钥复制到剪贴板,并粘贴到网页的"Key"(密钥)文本框中。最后点击 Add SSH key(添加 SSH 密钥),按提示输入GitHub的登录密码完成公钥的添加。

    clip < ~/.ssh/id_ed25519.pub

    提示:注意文件位置,此处是默认位置与文件名,如果前面你的位置不一样,需要灵活改变。如果 clip 命令不可用,可找到隐藏的 .ssh 文件夹,在常用的文本编辑器中打开该.pub文件,并将其内容复制到剪贴板。

这样GitHub那边有对应的公钥,我有对应的私钥,我本地的SSH便能够向GitHub证明我的身份啦。

测试 SSH 连接

测试连接时,您可能需要使用密码(即您之前创建的 SSH 密钥对的密码)验证此操作。如果密钥的密码之前没有缓存到ssh-agent中。如果是按照前面操作过来的,应该无需再次输入密码。

  1. 打开 Git Bash。

  2. 输入以下内容:

    ssh -T git@github.com

    您可能会看到类似如下的警告:

    > The authenticity of host 'github.com (IP ADDRESS)' can't be established.
    > RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
    > Are you sure you want to continue connecting (yes/no)?
  3. 验证所看到消息中的指纹是否匹配 GitHub 的 RSA 公钥指纹。 如果是,则输入 yes。如果一切正常,会看到GitHub返回了一段包含您的用户名的消息。

    > Hi username! You've successfully authenticated, but GitHub does not
    > provide shell access.

将远端仓库的 URL 从 HTTPS 切换到 SSH

  1. 打开 Git Bash。

  2. 将当前工作目录切换到为您的本地仓库。

  3. 列出现有远程仓库以获取要更改的远程仓库的名称,关注一下USERNAME和REPOSITORY部分。

    $ git remote -v
    > origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
    > origin  https://github.com/USERNAME/REPOSITORY.git (push)
  4. 使用 git remote set-url 命令更改远端的 URL ,注意将上面获取的名称换到下面命令中。

    $ git remote set-url origin git@github.com:USERNAME/REPOSITORY.git

这里也可以使用git config 命令直接调整配置处理。

git config -l # 查看配置
git config remote.origin.url git@github.com:USERNAME/REPOSITORY.git
git config -l # 再次执行,检查修改结果

参考: