Linux中ssh远程登录系统和远程拷贝
本章主要介绍ssh远程登录系统和远程拷贝的方法
- ssh的基本用法
- 打开远程图形化界面
- ssh无密码登录和安全操作
- Windows远程登录
- 远程拷贝
很多时候服务器并没有显示器,我们也不可能每次都通过控制台去管理服务器,这时就需 要远程登录。远程登录到服务器可以通过Telnet或ssh的方式。但是用Telnet登录,整个过 程都是以明文的方式传输的,不安全。所以,建议使用ssh的方式来登录,因为ssh在整个连 接过程中,数据都是加密的
实验拓扑两台Linux操作系统
redhat8和node1
redhat中有aaa用户和jin用户,node1中只有jin用户
1.1 ssh的基本用法
ssh的基本用法1:
ssh 主机名 /IP
这里如果没有指定用什么用户连接,则以当前用户连接
当第一次远程连接到服务器时,要记录服务器的公钥指纹信息
[root@redhat8 ~]# ssh 192.168.161.12

上面如果输入的是no,则连接终止。输入yes,则保存在了当前用户家目录下 的.ssh/known_hosts文件中
如果使用aaa用户进行登录,连续输入3次密码不正确就会退出了,因为192.168.161.12上没有aaa用户,但是有jin用户

ssh的基本用法2:
1. ssh 0l 用户名 主机名 /IP
2. 用户名@主机名 /IP
建议用第2个。现在以jin的身份连接
[root@redhat8 ~]# ssh jin@192.168.161.12
jin@192.168.161.12's password:
[jin@node1 ~]$
可以看到,此时已经正常连接过去了,要退出来时只要输入“exit”即可
[jin@node1 ~]$ exit
登出
Connection to 192.168.161.12 closed.
[root@redhat8 ~]#
1.2 打开远程图形化界面
当远程连接到远端机器时,例如,从 redhat8上通过jin用户连接到node1
[root@redhat8 ~]# ssh jin@192.168.161.12
jin@192.168.161.12's password:
Last login: Fri Dec 1 11:08:34 2023 from 192.168.161.16
[jin@node1 ~]$ firefox
Failed to open connection to "session" message bus: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
Running without a11y support!
Error: no DISPLAY environment variable specified
[jin@node1 ~]$
然后执行firefox命令,出现了“Error: no DISPLAY environment variable specified”的错误提示。这是为什么呢?首先我们了解一下 Xserver和 Xclient
每个打开的图形化界面的工具,例如,终端、 Firefox浏览器、gedit记事本等,这些都叫作 Xclient,这些Xclient必须在 Xserver上运行。 Xserver是一个平台环境,安装系统时如果选择 了图形化界面,那么Xserver就已经安装上去 了,如图

要是想在本机打开远端服务器的Xclient,即图形化客户端,需要满足以下3个条件
(1)通过ssh登录到服务器时,要加上-X(大写的X)选项
因为ssh建立的连接默认只允许字符传输,不允许Xclient进行传输,加上-X选项之后就可以 让Xclient通过ssh建立的连接传输
(2)本地要运行Xserver
(3)远端服务器要安装xorg-x11-xauth,默认是已经安装上去了的
现在退出来,重新通过ssh连接过去,加上-X选项,命令如下
[root@redhat8 ~]# ssh jin@192.168.161.12 -X
jin@192.168.161.12's password:
Last login: Fri Dec 1 11:16:30 2023 from 192.168.161.16
/usr/bin/xauth: file /home/jin/.Xauthority does not exist
[jin@node1 ~]$
1.3 ssh无密码登录
ssh远程登录到服务器时有两种认证方式
1.3.1 密码认证
前面在redhat8上通过ssh连接到node1时需要输入密码才能正常登录,这种就是密码认证
1.3.2 密钥认证
如果做了密钥认证,远程登录时不需要密码就可以直接登录
需要生成一个密钥对
[aaa@redhat8 ~]$ ssh-keygen -f ~/.ssh/id_rsa -N ""
Generating public/private rsa key pair.
Your identification has been saved in /home/aaa/.ssh/id_rsa.
Your public key has been saved in /home/aaa/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:D6UKYyQIyqkWhvPj3p+22Q4GppGHL+jYtKo+rt67O/g aaa@redhat8
The key's randomart image is:
+---[RSA 3072]----+
|. |
|=.. |
|==. . . |
|oo.= o |
|..* B S |
|.o O + . o |
|. * . + . |
|o*.= ..= |
|@**E*o=oo |
+----[SHA256]-----+
[aaa@redhat8 ~]$
这条命令会生成一个密钥对(私钥和公钥),这里-f指定了生成私钥的路径和名称,如果 不指定,默认也是这个路径。-N后面的双引号中没有空格,意思是不对生成的私钥加密
这样aaa生成了自己的密钥对,存放在自己家目录的.ssh目录下
[aaa@redhat8 ~]$ ls .ssh/
id_rsa id_rsa.pub known_hosts
[aaa@redhat8 ~]$
其中id_rsa是私钥,id_rsa.pub是公钥
然后通过ssh-copy-id把公钥的内容存储在jin@node1的家目录下的.ssh/authorized_keys文件中,如果没有此文件,拷贝过去之后会自动创建
[root@node1 ~]# ls .ssh
ls: 无法访问.ssh: 没有那个文件或目录
[root@node1 ~]#
下面执行ssh-copy-id命令
[aaa@redhat8 ~]$ ssh-copy-id jin@192.168.161.12
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/aaa/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
jin@192.168.161.12's password: Number of key(s) added: 1Now try logging into the machine, with: "ssh 'jin@192.168.161.12'"
and check to make sure that only the key(s) you wanted were added.[aaa@redhat8 ~]$
这样aaa的公钥就存放在jin@node1家目录下的.ssh/authorized keys文件中了
[jin@node1 ~]$ cat .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDI3ngWP/jf8809s1EOyXI9CnLu92iYEfJqxvj09nvHDrEgUb4PT0+RLkys/sqzViYdtQvOKhGgXqCsU29PZZXNQPgisbF2+7w7H3XvOlSPH/3p0/9HgMHDghHOH3G6A/dMcqh+KRWcz/6U8wzNtk6TBcZL8ovT64erHigx/hMlgE0fP/fX6SnFUFgpFVUSGEAszxzl6oPkSXTITH2U8/1n3rZMNKL9GxPmFLMSg5e5VlJSCjOIxlzDePmgeGJkvEx79ZMqNzEJ4AFl7gkpCOmx1STe415lPFS2m+Xgvrvz0og12Ojy+9lTeIA1iFiDUZxP4GeUhMM9wHU6qfZbT2+uTxx/va+4pu6NEmzYb30VvmknMIaVU0fDwlW0WMhaawOVd7bYqF6MfhAnl191aYGy823N4rkvijIdAjlO5MitJNO8+6+9hhTDAV0TlycUL7KASzS13r6Kdq5yFP5aBBJ+TpoczJkjdXnQUGywRrUJ/xck5HJu+tlB9dF88g1NSSk= aaa@redhat8
[jin@node1 ~]$
通过对比,发现这个文件的内容就是 aaa@redhat的公钥的内容
下面远程登录测试
[aaa@redhat8 ~]$ ssh jin@192.168.161.12
Last login: Fri Dec 1 11:48:58 2023 from 192.168.161.1
[jin@node1 ~]$
可以看到,已经无密码登录过去了
1.4 ssh安全设置
前面已经讲了,ssh有两种认证方式:密码认证和密钥认证。aaa@redhat到jin@node1用的是密钥认证,其他用户的登录方式仍然是密码登录,现在想设置只能用 其中一种认证,是否可以?答案是可以的
1.4.1 禁用密钥登录
在node1中,以 root用户编辑/etc/ssh/sshd_config,找到 PubkeyAuthentication, 修改内容如下
将#PubkeyAuthentication yes修改为PubkeyAuthentication no(需要注意的是,这里 前面的注释符#被删除了),这样就禁用了密钥登录,保存退出并重启sshd

[root@node1 ~]# systemctl restart sshd
[root@node1 ~]#
此时已经禁用了密钥登录,只能密码登录,到 redhat上进行测试
[aaa@redhat8 ~]$ ssh jin@192.168.161.12
jin@192.168.161.12's password:
Last login: Fri Dec 1 11:50:06 2023 from 192.168.161.16
[jin@node1 ~]$
这里只能使用密码登录,原来配置的密钥认证不再生效
再次设置允许密钥登录(PubkeyAuthentication yes),修改内容如下

将PubkeyAuthentication no修改为PubkeyAuthentication yes,并重启sshd,命令如下
[root@node1 ~]# systemctl restart sshd
[root@node1 ~]#
1.4.2 禁止密码登录
在node1上,以root用户编辑/etc/ssh/sshd_config,找到PasswordAuthentication, 修改内容如下

将PasswordAuthentication yes修改为PasswordAuthentication no,这样就禁用了密 码登录,保存退出并重启sshd
[root@node1 ~]# systemctl restart sshd
[root@node1 ~]#
此时只允许密钥登录,不允许密码登录
为了方便测试,在node1上创建用户bbb,密码设置为123.123
[root@node1 ~]# useradd bbb
[root@node1 ~]# echo 123.123 | passwd --stdin bbb
更改用户 bbb 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@node1 ~]#
在redhat上进行验证,首先以jin身份连接过去
[aaa@redhat8 ~]$ ssh jin@192.168.161.12
Last login: Fri Dec 1 11:55:51 2023 from 192.168.161.16
[jin@node1 ~]$
可以看到,使用tom登录192.168.26.102时是可以无密码登录的
然后以bbb身份连接过去
[aaa@redhat8 ~]$ ssh bbb@192.168.161.12
bbb@192.168.161.12: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
[aaa@redhat8 ~]$
因为我们并没有做bbb用户无密码登录到node1,只能使用密码登录,而密码登录被禁用, 所以bbb登录失败
自行设置允许密码登录,修改/etc/ssh/sshd_config

将PasswordAuthentication no修改为PasswordAuthentication yes,并重启sshd
[root@node1 ~]# systemctl restart sshd
[root@node1 ~]#
再次使用bbb用户登录
[aaa@redhat8 ~]$ ssh bbb@192.168.161.12
bbb@192.168.161.12's password:
Last failed login: Fri Dec 1 12:07:28 CST 2023 from 192.168.161.16 on ssh:notty
There were 3 failed login attempts since the last successful login.
[bbb@node1 ~]$
已经可以正常登录了
1.5 ssh限制用户
对于服务器上的有效用户,基本上都是可以通过 ssh 连按过去的,但是有时为了安全性 要禁用某些用户登录,如禁用root等
1.5.1 禁用root用户登录
默认情况下,是可以用root登录到远端服务器的
[aaa@redhat8 ~]$ ssh root@192.168.161.12
root@192.168.161.12's password:
Last login: Fri Dec 1 11:01:05 2023 from 192.168.161.16
[root@node1 ~]#
如果要禁用root用户登录,在server2一用vim编辑哭打开/eto/ssh/sshd_config,按如下内容修改

将PermitRootLogin yes修改为PermitRootLogin no,保存退出并重启sshd
[root@node1 ~]# systemctl restart sshd
[root@node1 ~]#
此时就禁用root用户登录了,在redhat上进行验证
[aaa@redhat8 ~]$ ssh root@192.168.161.12
root@192.168.161.12's password:
Permission denied, please try again.
root@192.168.161.12's password:
提示被拒绝,是因为不允许root用户登录,按【Ctrl+C】组合键终止
如果允许root用户登录,将PermitRootLogin no修改为PermitRootLogin yes,然后重启sshd 即可
1.5.1 禁用普通用户登录
如果想禁用某普通用户,可以用DenyUsers选项实现,用法是打开/etc/ssh/sshd_config, 在任意一行添加 DenyUsers userX,就可以限制userX ssh登录了。如果需要在server2上禁 用bob用户ssh登录,可以用vim 编辑器打开/etc/ssh/sshd_config,在任意一行添加 DenyUsersbob,命令如下

这里就是禁用bob用户ssh 登录,保存退出并重启sshd,然后到redhat上进行测试
[aaa@redhat8 ~]$ ssh bbb@192.168.161.12
bbb@192.168.161.12's password:
Permission denied, please try again.
bbb@192.168.161.12's password:
提示被拒绝,是因为bbb用户被限制登录了,按【Ctrl+C】组合键终止
这里只是禁用了bbb用户,并不影响其他用户登录
类似的选项还有AllowUsers和 DenyGroups
其中AllowUsers userX的意思是,只允许userX用户登录,不允许其他用户登录
如果写成AllowUsers userX userY,意思是只允许userX和userY登录,不允许其他用户登录
如果以下两个条目同时出现:

则 DenyUsers生效,bob仍然是不能登录的
1.6 Windows远程登录
很多时候服务器上安装的是 Linux系统,但我们平时用的笔记本电脑是Windows系统, 如果要使用Windows远程登录,只要在Windows上安装ssh客户端,就可以登录到远端的 Linux服务器了。Windows中常见的ssh客户端包括PuTTY、Xshell、SecureCRT 等
Windows中的这些客户端,大家根据自己的喜好自行下载使用即可
1.7 远程拷贝
有时我们需要远程拷贝一些文件,例如,把文件或目录从A机器拷贝到B机器上,这种情 况下我们一般用scp或rsync
scp或 rsync利用的是ssh建立的通道,然后把文件传输过去,scp的用法如下
scp /path1/file1 remoteIP:/path2/
这里的意思是把本地的/path1/file1铂贝到remoteIP这台机器的/path2目录中。需要注意的是,远程主机上目录的表示方式是“IP:目录”,冒号两边没有空格。如果拷贝目录需加上选项
先查看node1上/opt目录中的内容
[root@node1 ~]# ls /opt/
[root@node1 ~]#
然后到redhat上拷贝 /etc/hosts到server2上的/opt目录中
[root@redhat8 ~]# scp /etc/hosts 192.168.161.12:/opt
root@192.168.161.12's password:
hosts 100% 158 78.6KB/s 00:00
[root@redhat8 ~]#
这样就把文件拷贝过去了,scp利用的是ssh建立的通道,如果没有指定使用哪个用户接到 192.168.161.12,则使用的是当前用户 root
下面以jin身份登录192.168.161.12并拷贝文件
[root@redhat8 ~]# scp /etc/hosts jin@192.168.161.12:/opt
jin@192.168.161.12's password:
scp: /opt/hosts: Permission denied
[root@redhat8 ~]#
因为192.168.161.12上的jin用户对/opt没有写权限,所有拷贝过去时出现了“Permission denied”这样的报错信息
把目录/boot/grub2拷贝到node1上的/opt目录中
[root@redhat8 ~]# scp /boot/grub2/ 192.168.161.12:/opt
root@192.168.161.12's password:
/boot/grub2: not a regular file
[root@redhat8 ~]#
结果是没有拷贝过去,因为/boot/grub2是一个目录,拷贝目录需要加上r选项

这样就把该目录拷贝过去了,到node1上查看
[root@node1 ~]# ls /opt/
grub2 hosts
[root@node1 ~]#
清空node1上/opt中的内容
[root@node1 opt]# rm -rf /*
[root@node1 opt]# ls
[root@node1 opt]#相关文章:
Linux中ssh远程登录系统和远程拷贝
本章主要介绍ssh远程登录系统和远程拷贝的方法 ssh的基本用法打开远程图形化界面ssh无密码登录和安全操作Windows远程登录远程拷贝 很多时候服务器并没有显示器,我们也不可能每次都通过控制台去管理服务器,这时就需 要远程登录。远程登录到服务器可以通…...
git常用命令小记
(文章正在持续更新中) git init - 在当前目录下初始化一个新的 Git 仓库。 git clone [url] - 克隆远程仓库到本地。 git add [file] - 将文件添加到暂存区。 git commit -m "commit message" - 将添加到暂存区的文件提交到本地仓库。 git pus…...
深入Android S (12.0) 探索Framework之输入系统IMS的构成与启动
文章目录 前言一、输入系统的基本组成部分二、输入系统相关源码分析1、IMS 构建1.1、SystemServer # startOtherServices()1.2、InputManagerService1.3、NativeInputManager # nativeInit()1.4、NativeInputManager1.5、InputManager1.6、InputDispatcher1.7、InputReader1.8、…...
SoC with CPLD and MCU ?
AG32 MCU 产品支持多种接口外设,具备与业界主流产品的兼容性,并内置额外的2K FPGA 可编程逻辑。 产品支持 LQFP-48,LQFP-64,LQFP-100 ,QFN-32等不同封装。其所有可用 IO 都可以任意地进行映射和互换,以灵活…...
基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(二)——数据清洗、转换
2 数据清洗、转换 此实验使用S3作为数据源 ETL: E extract 输入 T transform 转换 L load 输出 大纲 2 数据清洗、转换2.1 架构图2.2 数据清洗2.3 编辑脚本2.3.1 连接数据源(s3)2.3.2. 数据结构转换2.3.2 数据结构拆分…...
vuepress-----6、时间更新
# 6、时间更新 基于Git提交时间修改文字时间格式 moment # 最后更新时间 # 时间格式修改 下载库文件 yarn add momentconst moment require(moment); moment.locale(zh-cn)module.exports {themeConfig: {lastUpdated: 更新时间,},plugins: [[vuepress/last-updated,{trans…...
C++ ini配置文件的简单读取使用
ini文件就是简单的section 下面有对应的键值对 std::map<std::string, std::map<std::string, std::string>>MyIni::readIniFile() {std::ifstream file(filename);if (!file.is_open()) {std::cerr << "Error: Unable to open file " << …...
【稳定检索|投稿优惠】2024年经济管理与安全科学国际学术会议(EMSSIC 2024)
2024年经济管理与安全科学国际学术会议(EMSSIC 2024) 2024 International Conference on Economic Management and Security Sciences(EMSSIC 2024) 一、【会议简介】 2024年经济管理与安全科学国际学术会议(EMSSIC 2024),将于繁华的上海城召开。这次会议的主题是“…...
什么是网站?
这篇文章是我学习网站开发,阶段性总结出来的。可以帮助你 通俗易懂 地更加深刻理解网站的这个玩意。 一,网站和网页的区别? 网站是由一个个网页组成。我们在浏览器上面看到的每一个页面就是网页,这些 相关的 网页组成一个网站。…...
pg_stat_replication.state 含义
在PostgreSQL中,pg_stat_replication视图提供了有关连接到主服务器的流式复制进程(备用服务器)的信息。该视图中的一个列是state,它指示复制进程的当前状态。 state列可以具有各种值: startup: This WAL sender 刚开始运行 catc…...
JavaWeb(六)
一、Maven的常用命令 maven的常用命令有:compile(编译)、clean(清理)、test(测试)、package(打包)、install(安装)。 1.1、compile(编译) compile(编译)的作用有如下两点: 1、从阿里云下载编译需要的jar包,在本地仓库也能看到下载好的插件(远程仓库配置的是阿里…...
GPIO的使用--时钟使能含义--代码封装
目录 一、时钟使能的含义 1.为什么要时钟使能? 2.什么是时钟使能? 3.GPIO的使能信号? 二、代码封装 1.封装前完整代码 2.封装结构 封装后代码 led.c led.h key.c key.h main.c 一、时钟使能的含义 1.为什么要时钟使能?…...
最小化安装 Neokylin7.0 用于搭建 Hadoop 集群
文章目录 环境搭建背景虚拟机创建和环境配置安装过程注意事项虚拟机设置软件选择KOUMP系统分区网络和主机名打开以太网,并记录信息配置 IPv4修改主机名 创建用户 hadoop完全分布式搭建-CSDN博客 环境搭建背景 为什么不从hadoop100或者hadoop101开始,而是…...
苍穹外卖面试题-中
8. 如何理解分组校验 很多情况下,我们会将校验规则写到实体类中的属性上,而这个实体类有可能作为不同功能方法的参数使用,而不同的功能对象参数对象中属性的要求是不一样的。比如我们在新增和修改一个用户对象时,都会接收User对象…...
Python 重要数据类型
目录 列表 序列操作 列表内置方法 列表推到式 字典 声明字典 字典基本操作 列表内置方法 字典进阶使用 字典生成式 附录 列表 在实际开发中,经常需要将一组(不只一个)数据存储起来,以便后边的代码使用。列表就是这样的…...
03、pytest初体验
官方实例 # content of test_sample.py def func(x):return x 1def test_ansewer():assert func(3) 5步骤解释 [100%]指的是所有测试用例的总体进度,完成后,pytest显示一个失败报告,因为func(3)没有返回5 注意:你可以使用ass…...
智能指针及强相关知识经验总结 --- 移动语义、引用计数、循环引用、move()、自定义删除器等
目录 前言 一、shared_ptr 1. 基本用法和构造方法 2. 引用计数机制 3. weak_ptr 解决循环引用 二、unique_ptr 1. 基本用法和构造方法 2. 独占性 3. 所有权转移 1)unique_ptr :: release() 2)移动语义 和 move() 三、 对比 shared_ptr 和 un…...
Gson 自动生成适配器插件
在json解析方面 我们常见有下面几方面困扰 1. moshi code-gen能自动生成适配器,序列化效率比gson快,但是自定义程度不如gson,能java kotlin共存 且解决了默认值的问题 2.gson api 强大自由,但是 第一次gson的反射缓存比较慢,而且生成对象都是反射,除非主动注册com.google.gson…...
React创建项目
React创建项目 提前安装好nodejs再进行下面的操作,通过node -v验证是否安装 1.设置源地址 npm config set registry https://registry.npmmirror.com/2.确认源地址 npm config get registry返回如下 https://registry.npmmirror.com/3.输入命令 npx create-re…...
Redis5新特性-stream
Stream队列 Redis5.0 最大的新特性就是多出了一个数据结构 Stream,它是一个新的强大的 支持多播的可持久化的消息队列,作者声明 Redis Stream 地借鉴了 Kafka 的设计。 生产者 xadd 追加消息 xdel 删除消息,这里的删除仅仅是设置了标志位&am…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
Canal环境搭建并实现和ES数据同步
作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...
