当前位置: 首页 > news >正文

windows@openssh免密登陆配置@基于powershell快速配置脚本

文章目录

    • abstract
      • 免密自动登录配置介绍👺
        • 修改Server配置文件
          • 一键脚本修改👺
        • 向ssh server端上传或创建支持免密登录的公钥文件
          • 预执行命令👺
          • 方式1
          • 方式2
          • 重启服务以生效👺
      • 傻瓜式配置免密自动登录👺👺
        • 准备
    • 操作流程👺
      • 操作示例(仅供参考)
      • 尝试免密登录

abstract

  • 本文假设你已经在windows上顺利安装了openssh
    • windows@windows上使用OpenSSH和相关软件@windows设备间使用OpenSSH_openssh windows客户端-CSDN博客
  • windows上openssh配置免密登陆
  • 提供基于powershell脚本的快速配置方案

免密自动登录配置介绍👺

  • 如果您不想了解细节,可以直接跳转到下面的 傻瓜式配置免密登录 一节,开门见山的提供配置步骤;以下是细节步骤
  • 和linux server类似,但是windows 中需要修改的ssh服务器端的配置文件位置和linux不同(毕竟文件系统不同)
    • 一般在C:\ProgramData\ssh目录下面的sshd_config文件中
    • 这里给出简单的过程,完善的文档参考前面列出的参考文档链接
修改Server配置文件
  • 为了获得配置文件,你需要在安装openssh ssh server 后启动它

    • function Set-SSHServerInit
      {# Start the sshd serviceStart-Service sshd# OPTIONAL but recommended:Set-Service -Name sshd -StartupType 'Automatic'# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verifyif (!(Get-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -ErrorAction SilentlyContinue | Select-Object Name, Enabled)){Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22}else{Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."}
      }Set-SSHServerInit #调用定义的函数
  • 您可以尝试用type C:\ProgramData\ssh\sshd_config命令行来查看配置文件中的内容

  • 默认情况下的配置文件无法直接免密登录,您需要修改部分内容(其实默认文件中大多都是注释语句,有些需要我们解开注释,有些需要我们转为注释)

    • 参考:在Windows Server 之间配置SSH 免密登录 - LearningAlbum - 博客园 (cnblogs.com)
  • 这里直接给出我已经修改过的一个可以免密登录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 10PubkeyAuthentication 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 no# 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

    其实总共就保留了三条配置,其余都是注释掉:(不同版本的openssh server可能有所不同)

    PubkeyAuthentication yes
    AuthorizedKeysFile	.ssh/authorized_keys
    Subsystem	sftp	sftp-server.exe
    
一键脚本修改👺
  • 为了方便一键操作,执行以下pwsh脚本(需要管理员权限👺)

    • function Enable-SSHPubkeyAuthentication
      {<# .SYNOPSIS在SSH server端运行本代码启用公钥认证和AuthorizedKeysFile指定,从而允许授权公钥文件指定的公钥拥有者登录到ssh Server本函数需要配合其他代码才能达到预期的免密登录效果(需要客户端的公钥文件,无法整合到此脚本中).DESCRIPTION这是一个简易版的配置sshd_config文件的脚本,如果达不到预期效果,请查阅其他文档资料本函数在修改原sshd_config文件前执行了备份,因此您可以找回默认值.NOTESssh server除了运行本代码,还需要创建或修改 authorized_keys 文件(通常在ssh server端的某个用户家目录下.ssh中)#>$sch = 'C:\ProgramData\ssh' #sshd_config文件所在目录$sshd_config = "$sch\sshd_config" #原配置文件Get-Content $sshd_config #看一眼源文件内容Copy-Item $sshd_config $sch\sshd_config.bak #备份配置文件,以防万一$config = @'PubkeyAuthentication  yesAuthorizedKeysFile 	.ssh/authorized_keysSubsystem	 sftp 	sftp-server.exe
      '@ #向sshd_config文件写入新的内容(覆盖性)$config > $sshd_config#重新检查新内容(特别是行内配置项目的空格)Get-Content $sshd_config #重启ssh服务以生效配置Restart-Service sshd
      }#调用本函数
      Enable-SSHPubkeyAuthentication
向ssh server端上传或创建支持免密登录的公钥文件
  • 默认情况下,这个文件为~/.ssh/authorized_keys

    • 不妨记该文件为授权公钥文件为变量,方便引用

      • $authorized_keys='~/.ssh/authorized_keys'
        
    • 确定Client端的授权公钥文件位置(您需要实现创建好密钥对,详情另见它文)

      • $pubkey="$home\.ssh\id_*pub" #为公钥文件路径创建易于引用的变量
        
      • 其中id_*pub可能需要您补全(比如id_ed25519.pub),特别是您创建了多个不同的ssh key时,如果仅创建过一个,那么通常可以不修改直接执行

预执行命令👺
function Get-SSHPreRunPubkeyVarsScript
{<# .SYNOPSIS生成一段预执行脚本,创建相关文件(公钥等)的路径变量,便于后续引用.EXAMPLEPS> Get-SSHPreRunScript|iex #将脚本输出并调用执行#>$script = @'#ssh Client端执行$authorized_keys = '~/.ssh/authorized_keys'$authorized_keys = "$env:userprofile/.ssh/authorized_keys"$pubkeys = "$home\.ssh\id_*pub"#查看公钥文件$pubkeys = Get-ChildItem $pubkeys$pubkeys#兼容多个的情况,默认选择其中的第一个$pubkey = $pubkeys[0]write-host $pubkey'@# Write-Host $script -ForegroundColor Blue# $script | Invoke-Expression -Verbose #外部脚本无法访问return $script}
Get-SSHPreRunScript|iex #将脚本输出并调用执行 #我觉得这里利用iex命令整合的就比较巧妙,解决了局部变量外部无法访问的问题

无论选择下面的哪一种方式,都请先执行预执行命令

方式1
  • 推荐的通用方法👺

  • 也可以复制公钥到剪切板,然后登录到server中创建相应文件

    • 查看ssh client的公钥

    • 复制输出的内容

  • ssh server上创建或追加公钥到授权公钥文件中

    • 此前,我们现在Client端执行以下逻辑
    function Get-SSHPubKeysAdderScripts
    {param([switch]$PassThru)if (!$pubkeys){Write-Error 'Please run pre-executing above commands first!'Write-Error '请先执行预执行命令,然后重试'return}$pubkey_content = Get-Content $pubkey #该值同上述指定$script = '$pubkey=' + "'$pubkey_content'" + @'$authorized_keys='~/.ssh/authorized_keys'
    if(Test-Path $authorized_keys){type $authorized_keys #查看修改前的授权公钥文件
    }else{new-item -Path $authorized_keys -ItemType File -forceWrite-Verbose "No $authorized_keys exist, create it!"
    }
    $pubkey >> $authorized_keys
    type $authorized_keys #查看修改后的授权公钥文件
    #重启ssh服务以生效配置
    Restart-Service sshd
    '@ Write-Host $script -ForegroundColor Blueif ($PassThru){return $script}
    }
    #调用并执行上述逻辑
    Get-SSHPubKeysAdderScripts
方式2
  • 针对仅授权单台设备免密或者还原备份的授权公钥文件的情况

  • 创建或编辑方式有多种,以下方案提供的命令行直接在ssh client的命令行中执行(powershell)

  • 可以从而ssh client端上传到server

    • function Get-SSHPubKeysPushScripts{#适用于仅对一台主机进行免密登录的情况;否则其他方法更合适if(!$pubkeys){write-error 'Please run pre-executing above commands first!'write-error '请先执行预执行命令,然后重试'return}$s="$env:userprofile/desktop/script.txt"@'#填写server:#局域网内启用网络发现的话可以直接用server计算机名(server上执行hostname获取),比较方便,但是更通用的是使用server的ip地址(执行ipconfig,可能有好几个地址,找出ip地址,通常是192开头的)#如果是云服务器,一般具有公网ip,可以直接用ip地址即可$user='    ' #ssh client要以 ssh server 上的哪一个用户身份登录(例如server上有个UserDemo用户)$server='    '  #例如192.168.1.111或者'redmibookpc'$user=$user.trim()$server=$server.trim()scp $pubkey $user@${Server}:$authorized_keys#查看执行的scp命令行内容"scp $pubkey $user@${Server}:$authorized_keys"#重启ssh服务以生效配置Restart-Service sshd
      '@ > $snotepad $s
      }
      Get-SSHPubKeysPushScripts
      • 执行上述命令行,会弹出一个记事本窗口,修改必要的内容(前几行都是注释,后面2行改改即可),然后复制到命令行中执行
重启服务以生效👺
  • #重启ssh服务以生效配置
    restart-service sshd
    • 如果执行失败,请手动打开service.msc,然后找到OpenSSH SSH Server进行重启(停止后重新启用)

傻瓜式配置免密自动登录👺👺

准备

上述两种方法都是powershell命令行,都算简单可行,任选一种即可,能够为两台windwos计算机建创建免密码ssh链接公钥文件

此外,ssh server 端还需要进一步配置sshd_config文件(可以在创建公钥之前就完成配置)

您可以将上述提供的各个powershell函数分别在ssh client 和ssh server上导入(不是直接运行),为了方便这一点,可以从gitee仓库复制整合好的脚本:modulesByCxxu/SSH/SSH.psm1 · xuchaoxin1375/scripts - 码云 - 开源中国 (gitee.com)

操作流程👺

  • 复制后分别粘贴到客户端和服务端的管理员权限powershell窗口

  • 然后就只需要按照以下指示在ssh客户端(client)或服务端(server)上调用或执行相关命令即可

流程如下(按顺序执行):

  1. server端执行

    • Set-SSHServerInit
      Enable-SSHPubkeyAuthentication
      # Set-SSHPubkeyAuthentication #虽然名字更贴切,但是也可以考虑一致性可以用set-...开头
      
    • server上粘贴并运行上述复制的脚本即可(这会创建服务端上的authorized_keys文件,并且会重启ssh server)

  2. client端执行

    • Get-SSHPreRunPubkeyVarsScript|iex 
      #client 再执行以下两个函数中的一个即可,以获得一段创建**授权公钥文件**(authorized_keys)的脚本
      Get-SSHPubKeysAdderScripts -PassThru|scb #方案1(自动将脚本复制到剪切板)
      # Get-SSHPubKeysPushScripts #方案2
      
    • Note:

      1. 方案1是输出在终端上,直接复制即可;
      2. 方案2会打开一个记事本,在其中做必要的填写或修改;然后复制其中内容
  3. server端粘贴运行client输出的脚本

  4. 如果sshd服务重启失败(报错),请手动到services.msc中找到Openssh ssh server手动重启它

操作示例(仅供参考)

服务端上执行的记录(管理员权限)

#管理员权限窗口运行
#如果没有安装ssh server,这里先安装,如果已经安装,则跳过
PS C:\Users\cxxu> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0Path          :
Online        : True
RestartNeeded : False#初始化服务端
PS C:\Users\cxxu> Set-SSHServerInit
WARNING: Waiting for service 'OpenSSH SSH Server (sshd)' to start...
Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists.
#启用免密登录
PS C:\Users\cxxu> Enable-SSHPubkeyAuthentication
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
.....(原配置的一大堆内容,不用管它)
.....# 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 serverMatch Group administratorsAuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keysPubkeyAuthentication  yesAuthorizedKeysFile  .ssh/authorized_keysSubsystem    sftp   sftp-server.exe#此时前往客户端执行任务,复制其输出的脚本粘贴进来回车执行

客户端上执行的记录

#预执行指令(创建必要变量等方便引用)
PS C:\Users\cxxu\Desktop> Get-SSHPreRunPubkeyVarsScript|iexDirectory: C:\Users\cxxu\.sshMode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---            2024/3/8    16:40             99 id_ed25519.pub
-a---           2024/7/13    21:28            743 id_rsa.pub
C:\Users\cxxu\.ssh\id_ed25519.pub#执行下一条命令,会输出一段脚本,复制其输出
PS C:\Users\cxxu\Desktop> Get-SSHPubKeysAdderScripts
$pubkey='ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPM/U3hKGVFJsqDdW8ydffoDlL79PrBQhycgFnZn3DVo 838808930@qq.com'
$authorized_keys='~/.ssh/authorized_keys'
if(Test-Path $authorized_keys){type $authorized_keys #查看修改前的授权公钥文件
}else{new-item -Path $authorized_keys -ItemType File -forceWrite-Verbose "No $authorized_keys exist, create it!"
}
$pubkey >> $authorized_keys
type $authorized_keys #查看修改后的授权公钥文件
#重启ssh服务以生效配置
Restart-Service sshd# 现在离开客户端,回去服务端操作

回到server端操作(粘贴并回车运行前面复制的脚本)

PS C:\Users\cxxu> $pubkey='ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPM/U3hKGVFJsqDdW8ydffoDlL79PrBQhycgFnZn3DVo 838808930@qq.com'
PS C:\Users\cxxu> $authorized_keys='~/.ssh/authorized_keys'
PS C:\Users\cxxu> if(Test-Path $authorized_keys){
>>
>> type $authorized_keys #查看修改前的授权公钥文件
>> }else{
>>     new-item -Path $authorized_keys -ItemType File -force
>>     Write-Verbose "No $authorized_keys exist, create it!"
>> }Directory: C:\Users\cxxu\.sshMode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           2024/7/19     9:46              0 authorized_keysPS C:\Users\cxxu> $pubkey >> $authorized_keys
PS C:\Users\cxxu> type $authorized_keys #查看修改后的授权公钥文件
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPM/U3hKGVFJsqDdW8ydffoDlL79PrBQhycgFnZn3DVo 838808930@qq.com
PS C:\Users\cxxu> #重启ssh服务以生效配置
PS C:\Users\cxxu> Restart-Service sshd
PS C:\Users\cxxu>

不出意外客户端现在就可以免密登录了

尝试免密登录

PS> ssh cxxu@redmibookpc
Microsoft Windows [版本 10.0.19045.4529]
(c) Microsoft Corporation。保留所有权利。

如果顺利的话,就可以登录到远程windows server (ssh),默认命令行shell是cmd

输入powershellpwsh可以切换shell

相关文章:

windows@openssh免密登陆配置@基于powershell快速配置脚本

文章目录 abstract免密自动登录配置介绍&#x1f47a;修改Server配置文件一键脚本修改&#x1f47a; 向ssh server端上传或创建支持免密登录的公钥文件预执行命令&#x1f47a;方式1方式2重启服务以生效&#x1f47a; 傻瓜式配置免密自动登录&#x1f47a;&#x1f47a;准备 操…...

【深度学习】【图像分类】【OnnxRuntime】【Python】VggNet模型部署

【深度学习】【图像分类】【OnnxRuntime】【Python】VggNet模型部署 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【图像分类】【OnnxRuntime】【Python】VggNet模型部署前言Windows平台搭建依赖环境模型转换--pytorch转onnxONN…...

手写排班日历

手写排班日历&#xff1a; 效果图&#xff1a; vue代码如下&#xff1a; <template><div class"YSPB"><div class"title">排班日历</div><div class"banner"><span classiconfont icon-youjiantou click&qu…...

SpringBoot多数据源配置

1、添加依赖 <!-- 数据库驱动 --><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql-connector-java.version}</version><scope>runtime</sco…...

影响画布微信小程序canvas及skyline和webview用户界面布局的关键流程

影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 目录 影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 一、微信小程序canvas开发流程 1.1、官方指南 1.2、客制化开发 第一步&#xff1a;在 WXML 中添加 canvas 组件 第二步&…...

MATLAB图像处理

MATLAB图像处理 MATLAB&#xff0c;作为美国MathWorks公司出品的商业数学软件&#xff0c;以其强大的矩阵运算能力和丰富的函数库&#xff0c;在图像处理领域得到了广泛的应用。MATLAB不仅提供了基础的图像处理功能&#xff0c;还通过图像处理工具箱&#xff08;Image Process…...

【编程底层思考】性能监控和优化:JVM参数调优,诊断工具的使用等。JVM 调优和线上问题排查实战经验总结

JVM性能监控和优化是确保Java应用程序高效运行的关键环节。以下是一些JVM性能监控和优化的方法&#xff0c;以及使用诊断工具和实战经验的总结&#xff1a; 一、JVM参数调优&#xff1a; 堆大小设置 : - Xms&#xff1a;设置JVM启动时的初始堆大小。 - -Xmx&#xff1a;设置J…...

数据库的实施过程分析

在完成了数据库的逻辑结构设计和物理结构设计后&#xff0c;下一步就是将设计成果转化为现实&#xff0c;这一步骤被称为数据库的实施。数据库实施是数据库开发过程中至关重要的一环&#xff0c;它标志着从设计阶段向实际应用的过渡。本文将为你详细讲解数据库实施的各个关键步…...

【Kubernetes】常见面试题汇总(十二)

目录 36.简述 Kubernetes 的负载均衡器&#xff1f; 37.简述 Kubernetes 各模块如何与 APl Server 通信&#xff1f; 38.简述 Kubernetes Scheduler 作用及实现原理&#xff1f; 36.简述 Kubernetes 的负载均衡器&#xff1f; &#xff08;1&#xff09;负载均衡器是暴露服务…...

基于SpringBoot+Vue+MySQL的美术馆管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着文化艺术产业的蓬勃发展&#xff0c;美术馆作为展示与传播艺术的重要场所&#xff0c;其管理工作变得日益复杂。为了提升美术馆的运营效率、优化参观体验并加强艺术品管理&#xff0c;我们开发了基于SpringBootVueMySQL的美…...

golang面试

算法&#xff1a; 1.提取二进制位最右边的 r i & (~i 1) 2.树上两个节点最远距离&#xff0c;先考虑头结点参与不参与。 3.暴力递归改dp。 1.确定暴力递归方式。 2.改记忆化搜索 3.严格表方式&#xff1a; 分析可变参数变化范围&#xff0c;参数数量决定表维度、 …...

基于"WT2605C的智能血压计:AI对话引领个性化健康管理新时代,健康守护随时在线

在当今快节奏的生活中&#xff0c;健康管理已成为我们日常不可或缺的一部分。随着科技的进步&#xff0c;智能设备正逐步融入我们的日常生活&#xff0c;为健康管理带来前所未有的便捷与智能化。今天&#xff0c;让我们共同探索WT2605C AI在线方案如何在血压计中发挥革命性作用…...

redis高级教程

一 关系型数据库和 NoSQL 数据库 数据库主要分为两大类&#xff1a;关系型数据库与 NoSQL 数据库 关系型数据库 &#xff0c;是建立在关系模型基础上的数据库&#xff0c;其借助于集合代数等数学概念和方法来处理数据库中的数据主流的 MySQL 、 Oracle 、 MS SQL Server 和 D…...

prfm命令初探

1. 前言 在查看一段neon代码时&#xff0c;发现有如下片段&#xff0c;为使用汇编进行数据预取操作。这是一个新的知识点&#xff0c;记录一下学习过程。 __asm__ volatile("prfm pldl2keep,[%0, #8192] \n""prfm pldl1keep,[%0, #1024] \n":"r"…...

AI大模型需要学什么?怎么学?从零基础入门大模型(保姆级),从这开始出发!

一.初聊大模型 1.为什么要学习大模型&#xff1f; 在学习大模型之前&#xff0c;你不必担心自己缺乏相关知识或认为这太难。我坚信&#xff0c;只要你有学习的意愿并付出努力&#xff0c;你就能够掌握大模型&#xff0c;并能够用它们完成许多有意义的事情。在这个快速变化的时代…...

python自述3

Python 条件控制 if语句的一般形式如下所示: if condition_1: statement_block_1 elif condition_2: statement_block_2 else: statement_block_3 Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else。 注意: 1、每个条件后面要使用冒号 :,表…...

Redis常见的数据结构

Redis底层的数据结构是Redis高效存储和操作数据的基础,Redis提供了五种基本的数据类型&#xff0c;每种类型在底层都有对应的数据结构来实现。这五种数据类型分别是&#xff1a;字符串&#xff08;String&#xff09;、哈希&#xff08;Hash&#xff09;、列表&#xff08;List…...

批量插入insert到SQLServer数据库,BigDecimal精度丢失解决办法,不动代码,从驱动层面解决

概述 相信很多人都遇到过&#xff0c;使用sql server数据库&#xff0c;批量插入数据时&#xff0c;BigDecimal类型出现丢失精度的问题&#xff0c;网上也有很多人给出过解决方案&#xff0c;但一般都要修改应用代码&#xff0c;不推荐。 丢失精度的本质是官方的驱动有BUG造成…...

随手记:uniapp小程序登录方式和小程序使用验证码登录

小程序登录方式&#xff1a; 方式一&#xff1a;小程序授权登录 通过uni.login获取 临时登录凭证code&#xff0c;向后端换取token。 <u-button type"primary" shape"circle" click"login">登 录</u-button>login() {uni.login({p…...

【Hadoop|HDFS篇】DataNode概述

1. DataNode的工作机制 1&#xff09;一个数据块在DataNode上以文件形式存储在磁盘上&#xff0c;包括两个文件&#xff0c;一个是数据本身&#xff0c;一个是元数据包括数据块的长度&#xff0c;块数据的校验和&#xff0c;以及时间戳。 2&#xff09;DataNode启动后向NameNod…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...