首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当使用Yubikey进行SSH连接时,未显示“确认用户是否存在密钥”消息

当使用Yubikey进行SSH连接时,未显示“确认用户是否存在密钥”消息
EN

Stack Overflow用户
提问于 2022-06-08 04:18:45
回答 1查看 437关注 0票数 1

我已经使用FIDO2在Yubikey 5 Nano上创建了SSH密钥:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ssh-keygen -t ed25519-sk -f ~/.ssh/id_ed25519-sk

Yubikey设置了用户和管理PIN。

但是,在使用键建立SSH连接时,不需要像Github博客现在SSH Git操作支持安全密钥。那样访问密钥。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Confirm user presence for key ...

在详细模式下,SSH客户端显示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: /.../.ssh/id_ed25519-sk ED25519-SK SHA256:... explicit authenticator agent
debug1: Server accepts key: /.../.ssh/id_ed25519-sk ED25519-SK SHA256:... explicit authenticator agent

这时,Yubikey开始闪烁。一旦我触摸到它,SSH登录将成功地使用该键,随后的消息将是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
debug1: Authentication succeeded (publickey).
Authenticated to github.com (via proxy).

当为Git操作(如git clonegit pull )使用密钥时,它只是静默地等待键点击。这种行为的问题是,我不知道SSH客户机是在等待网络/服务器/代理,还是在等待我触摸密钥。

这是在Ubuntu20.04.4LTS上使用的OpenSSH 8.2p1 (和Git 2.28.0)。我正在使用默认的ssh-代理,我可以在Gnome的“OpenSSH密钥”下看到“密码和密钥”应用程序中列出的密钥。

使用从ssh-keygen 9.0p1便携源代码编译的OpenSSH,我可以看到公钥将标志设置为0x1 (需要用户在场):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ./ssh-keygen -vvv -y -f ~/.ssh/id_ed25519-sk
sk-ssh-ed25519@openssh.com AAAAGnNrLX...mAAAABHNzaDo= foo@bar
debug1: sk_application: "ssh:", sk_flags 0x01

理论上,此标志应该触发消息,但不会触发。OpenSSH 9.0p1SSH客户端具有相同的行为,因此我假设这种消息的缺失是由我的设置中的某种原因造成的。

将一些调试代码添加到identity_sign()中的sshconnect2.c中,我可以看到它调用ssh_agent_sign()并返回。检查process_sign_request2()ssh-agent.c中的源代码,它包含发出"sk“键消息的代码。

当SSH客户端等待键触摸时,相关的进程树如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gnome-keyring-d(57868)-+-ssh-agent(58517)---ssh-sk-helper(79174)
                       |-{gnome-keyring-d}(57869)
                       |-{gnome-keyring-d}(57870)
                       |-{gnome-keyring-d}(57982)
                       `-{gnome-keyring-d}(79173)

一旦发生了关键触摸,ssh-sk-helper进程就会消失。

因此,如果ssh-agent发出消息,它就不会到达ssh进程。

EN

回答 1

Stack Overflow用户

发布于 2022-06-08 06:04:30

这更多的是一种解决办法,而不是正确的答案,但是它提供了一种修复行为的方法。有多种因素(sic!)对此:

首先,Ubuntu中有一个东西是自动将~/.ssh目录中的键添加到登录时开始的ssh-agent中--一旦我使用ssh-keygen创建了一个密钥,该键就会自动出现在ssh-add -l的输出中。它可能不是ssh本身,因为我在我的AddKeysToAgent (或全局配置)中没有设置~/.ssh/config,而且这个指令的默认值是no

为了克服这种行为,我在不同的位置(~/altssh)生成了关键文件。

接下来,ssh更喜欢存储在ssh-agent中的密钥,因此也需要使用IdentitiesOnly指令设置为yes来改变这种情况。

发出“确认用户存在”消息的ssh配置片段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Host *github.com                                                                
  User git                                                                      
                                                                                
  # ssh will prefer the keys stored in ssh-agent to the one from                
  # the identity file so this behavior needs to be changed.                     
  IdentitiesOnly yes                                                            
  # for a good measure                                                          
  IdentityAgent none                                                            
                                                                                
  # The keys from ~/.ssh will be added to the ssh-agent automatically           
  # which I want to avoid because then the 'Confirm user presence'              
  # message will not be displayed.                                              
  IdentityFile ~/altssh/id_ed25519-sk

有了这一点,它就能发挥作用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ssh-add -l | grep 25519 | wc -l
0
$ ssh -T github.com
Confirm user presence for key ED25519-SK SHA256:...
Hi ...! You've successfully authenticated, but GitHub does not provide shell access.

不过,我认为这是OpenSSH中ssh-agent通信方式的一个限制。此外,也许Ubuntu不应该将sk键添加到ssh代理作为第二级解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72545585

复制
相关文章
使用root用户连接Ubuntu16.04时,提示SSH连接被拒绝
(1)查看ip地址是否冲突 我在单位的虚拟机ip地址是192.168.8.85,与其它机器冲突了。改成了192.168.8.83 (2)关闭Ubuntu16.04的防火墙 root@stgman-desktop:~# sudo ufw disable 防火墙在系统启动时自动禁用 亲自尝试了sudo ufw enable,从我的win7系统ssh登录不上虚拟机。但是在Ubuntu本机上ssh 192.168.8.83可以登录成功。 (3)Ubuntu系统上安装、启动sshd服务 sudo apt-get install openssh-server
似水的流年
2019/12/13
3.1K0
使用root用户连接Ubuntu16.04时,提示SSH连接被拒绝
(1)查看ip地址是否冲突 我在单位的虚拟机ip地址是192.168.8.85,与其它机器冲突了。改成了192.168.8.83 (2)关闭Ubuntu16.04的防火墙 root@stgman-desktop:~# sudo ufw disable 防火墙在系统启动时自动禁用 亲自尝试了sudo ufw enable,从我的win7系统ssh登录不上虚拟机。但是在Ubuntu本机上ssh 192.168.8.83可以登录成功。 (3)Ubuntu系统上安装、启动sshd服务 sudo apt-get in
似水的流年
2018/01/18
3.6K0
如何使用GPG密钥进行SSH身份验证
GPGTools为OS X提供了最简单的GPG实现。否则,js brew install gnupg2如果你有Homebrew,你可以运行。
evildickman
2018/09/04
8.7K1
YubiKey使用教程
之前老看见有人讨论这个玩意,然后心血来潮收了10个优惠码(100收的),开了个车,买了5个5 NCF、5个5C NFC;加上我一共7个人,我就要了俩5,下面价格加上每个人平摊的转运费和码字钱大概是35元差不多,寄到他们手里在加上十几块快递费就是最终费用了。
残浔
2023/05/11
4.5K0
YubiKey使用教程
git如何使用ssh密钥
首先先来了解一下git的四种传输协议:本地、ssh、git和http,http协议应该说是最常见的一种,因为简单,以下是各个协议的优点与缺点:
benny
2018/12/29
2.6K0
[772]python使用mysqldb模块通过ssh隧道连接mysql(密码|密钥)
主要出于安全考虑,数据库服务器只允许堡垒机通过ssh访问,这对日常的使用带来了麻烦。问题是这样的,MySQL数据库放在了服务器A上,只允许服务器B来访问,而我在机器C上,可以通过ssh连接服务器B。为了解决在机器C上连接mysql这个问题
周小董
2020/06/01
3.8K0
[772]python使用mysqldb模块通过ssh隧道连接mysql(密码|密钥)
在Windows上使用PuTTY进行SSH连接
PuTTY是一个用于Windows和UNIX系统的免费开源SSH客户端。它可以轻松连接到运行SSH守护程序的任何服务器,因此您可以像登录到远程系统上的控制台会话一样工作。
文艺复兴
2018/09/10
21.6K0
在Windows上使用PuTTY进行SSH连接
WinSCP连接Ubuntu拒绝访问,SSH访问状态确认
1.编辑 /etc/ssh/sshd_config文件: sudo vi /etc/ssh/sshd_config
全栈程序员站长
2022/11/04
3.9K0
WinSCP连接Ubuntu拒绝访问,SSH访问状态确认
通过询问-响应身份认证提高桌面登录安全
今天,Fedora 提供了多种方式来提高我们账户的身份认证的安全性。当然,它有我们熟悉的用户名密码登录方式,它也同样提供了其他的身份认证选项,比如生物识别、指纹、智能卡、一次性密码,甚至是 询问-响应(challenge-response)身份认证。
用户8639654
2021/10/18
8060
ssh密钥登录默认用户外的其他新建用户
把ubuntu用户家目录/home/ubuntu下的.ssh文件夹复制到root用户家目录/root下,发现并不能密钥登录,原因是sshd_config配置文件里禁止root登录了(为了安全)
Windows技术交流
2019/12/25
4K0
当网页图片不存在时不显示叉叉,显示默认图片的方法,管用的很!
有时候管理系统里面的产品图片没上传,或者因为网络原因传输过程中断了,图片没显示出来,就会显示一个叉叉,并且图片的占位符也不起作用了。昨晚上花了1个小时搜索、调试,验证了几种网络上的方法,最终有2种方法的确有效,鉴于代码优美的需要,我选择了如下一种。
崔文远TroyCui
2019/02/26
1.9K0
Git 设置用户名、邮箱和SSH密钥
当我们安装好Git之后第一件事就应该是设置用户名还有邮箱,那么下面就说说怎么设置吧~
全栈程序员站长
2022/10/04
1.5K0
树莓派官方系统取消pi用户,没有显示器如何初始化默认用户并进行SSH连接?
在过去,树莓派官方系统,拥有默认用户pi,初始化密码为raspberry;但是,因为一些安全性的原因,在2022年4月后,取消系统默认的pi用户:
Mintimate
2022/07/18
3.7K0
树莓派官方系统取消pi用户,没有显示器如何初始化默认用户并进行SSH连接?
SSH 密钥类型
GitHub 改变了他们的安全协议,不再允许使用使用 SHA-1 加密算法的 RSA 密钥进行访问,而我目前使用 ssh 默认策略生成的就是这种类型的密钥,结果就是无法提交代码。
宋天伦
2023/10/21
6800
腾讯云服务器创建 SSH 密钥及如何使用 提高 SSH 连接安全性
腾讯云服务器内置创建 SSH 密钥功能,创建并使用之后就是有密钥才能使用 SSH 连接服务器,相对于几位数的登陆密码来说,2048 位密钥显然更安全。
魏艾斯博客www.vpsss.net
2018/07/30
12K0
腾讯云服务器创建 SSH 密钥及如何使用 提高 SSH 连接安全性
python ssh连接_pycharm显示no module named
原来问题出在,使用命令 ssh-keygen -t rsa 生成ssh,默认是以新的格式生成,id_rsa的第一行变成了“BEGIN OPENSSH PRIVATE KEY” 而不再是“BEGIN RSA PRIVATE KEY”,这是一种新的密钥格式, 而且很多软件对这种格式的密钥都是不支持的。
全栈程序员站长
2022/09/27
6640
python ssh连接_pycharm显示no module named
grpc 检测客户端连接是否存在
默认情况下,服务端是没有检测客户端连接是否存活的。 如果因为网络抖动,客户端退出,此时客户端会向服务端发送一个Fin_wait2的消息。但这个消息如果丢失,服务端将长期认为客户端“仍然存在”,即使此时客户端已经退出。 为了解决这个问题,grpc服务端在启动的时候,可以传入keepalive参数,原理是:每隔N秒ping客户端,当客户端无法ping通的时候,服务端会主动断开连接。代码如下:
超级大猪
2019/11/27
7.5K0
关于Git你必须知道的
提交的时候warning: LF will be replaced by CRLF in 解决办法
徐建国
2021/08/03
3770
Mysql 使用 ssh 连接
之前有写过远程连接mysql的文章。不过这样做不太安全,更好的方式是利用 ssh 远程连接mysql。
上山打老虎了
2022/06/14
2.8K0
Mysql 使用 ssh 连接
Mysql 使用 ssh 连接
之前有写过远程连接mysql的文章。不过这样做不太安全,更好的方式是利用 ssh 远程连接mysql。
子润先生
2021/06/28
3.6K0

相似问题

使用SSH密钥进行BlueOcean连接

17

capistrano未使用ssh密钥进行记录

10

Submit_tag确认消息未显示确认消息

119

使用SSH密钥进行http用户验证

33

如何使用Yubikey对消息进行签名

123
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文