用win11终端ssh连接CentOS6.10时,报 Unable to negotiate with 2.125.0.4 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss 241105

C:\>ssh root@2.125.0.4
Unable to negotiate with 2.125.0.4 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

解决办法1: 加参数 -o HostKeyAlgorithms=+ssh-rsa,ssh-dss -o PubkeyAcceptedKeyTypes=+ssh-rsa,ssh-dss

 -o HostKeyAlgorithms=+ssh-rsa,ssh-dss -o PubkeyAcceptedKeyTypes=+ssh-rsa,ssh-dss 
ssh -o HostKeyAlgorithms=+ssh-rsa,ssh-dss -o PubkeyAcceptedKeyTypes=+ssh-rsa,ssh-dss root@2.125.0.4

成功

C:\>ssh -o HostKeyAlgorithms=+ssh-rsa,ssh-dss -o PubkeyAcceptedKeyTypes=+ssh-rsa,ssh-dss root@2.125.0.4
The authenticity of host '2.125.0.4 (2.125.0.4)' can't be established.
RSA key fingerprint is SHA256:WMucsRCz6CHaLdI9f0UKbeRljPkFeKcDgl2zmZnchg8.
This host key is known by the following other names/addresses:
    C:\Users\z/.ssh/known_hosts:25: 192.168.56.1
    C:\Users\z/.ssh/known_hosts:26: [localhost]:61022
    C:\Users\z/.ssh/known_hosts:27: 127.6.1.1
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '2.125.0.4' (RSA) to the list of known hosts.
root@2.125.0.4's password:

只加 -o HostKeyAlgorithms=+ssh-rsa,ssh-dss 也行

 -o HostKeyAlgorithms=+ssh-rsa,ssh-dss 
ssh -o HostKeyAlgorithms=+ssh-rsa,ssh-dss root@2.125.0.4
C:\>ssh -o HostKeyAlgorithms=+ssh-rsa,ssh-dss root@2.125.0.4
root@2.125.0.4's password:
Last login: Tue Nov  5 01:40:37 2024 from 2.0.0.1
[root@1235vb-ce160ddd-1-d1 ~]#

只加 -o HostKeyAlgorithms=+ssh-rsa 也行

 -o HostKeyAlgorithms=+ssh-rsa,ssh-dss 
ssh -o HostKeyAlgorithms=+ssh-rsa root@2.125.0.4
C:\>ssh -o HostKeyAlgorithms=+ssh-rsa root@2.125.0.4
root@2.125.0.4's password:




解决方法2: 在用户文件夹下的.ssh文件夹下, 没有就创建,或者编辑已存在的名为config的配置文件~/.ssh/config

用户文件夹下的.ssh文件夹下, 没有就创建,或者编辑已存在的名为config的配置文件

~/.ssh/config

~/.ssh/config

在这里插入图片描述

host *
	HostKeyAlgorithms +ssh-rsa,ssh-dss
	PubkeyAcceptedKeyTypes +ssh-rsa,ssh-dss
	PubkeyAcceptedAlgorithms +ssh-rsa,ssh-dss

注意文件编码必须时UTF-8或者ASCII(ISO-8859-1)

成功

C:\>ssh root@2.125.0.4
root@2.125.0.4's password:







win11下 用 git bash , ssh CentOS6.10 时报: “no matching host key type found. Their offer” 240729

用 Windows11环境下的 git bash 自带的 ssh 登录 virtualbox上的CentOS6.10时, 报:“no matching host key type found. Their offer”

git版本: git version 2.43.0.windows.1
ssh版本: OpenSSH_9.5p1, OpenSSL 3.1.4 24 Oct 2023

原因是新版的 ssh 禁用了 ssh-rsa 算法

解决办法1:

例如把 ssh root@localhost -p61022 改为

ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa root@localhost -p61022

ssh -o HostKeyAlgorithms=+ssh-rsa root@localhost -p61022

ssh -o HostKeyAlgorithms=ssh-rsa root@localhost -p61022

解决办法2:

在 git 安装文件夹下的 \etc\ssh\ssh_config 文件中加入

Host *
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa

例如

#	$OpenBSD: ssh_config,v 1.36 2023/08/02 23:04:38 djm Exp $

# This is the ssh client system-wide configuration file.  See
# ssh_config(5) for more information.  This file provides defaults for
# users, and the values can be changed in per-user configuration files
# or on the command line.

# Configuration data is parsed as follows:
#  1. command line options
#  2. user-specific file
#  3. system-wide file
# Any configuration value is only changed the first time it is set.
# Thus, host-specific definitions should be at the beginning of the
# configuration file, and defaults at the end.

# Site-wide defaults for some commonly used options.  For a comprehensive
# list of available options, their meanings and defaults, please see the
# ssh_config(5) man page.

# Host *
#   ForwardAgent no
#   ForwardX11 no
#   PasswordAuthentication yes
#   HostbasedAuthentication no
#   GSSAPIAuthentication no
#   GSSAPIDelegateCredentials no
#   BatchMode no
#   CheckHostIP no
#   AddressFamily any
#   ConnectTimeout 0
#   StrictHostKeyChecking ask
#   IdentityFile ~/.ssh/id_rsa
#   IdentityFile ~/.ssh/id_dsa
#   IdentityFile ~/.ssh/id_ecdsa
#   IdentityFile ~/.ssh/id_ed25519
#   Port 22
#   Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
#   MACs hmac-md5,hmac-sha1,umac-64@openssh.com
#   EscapeChar ~
#   Tunnel no
#   TunnelDevice any:any
#   PermitLocalCommand no
#   VisualHostKey no
#   ProxyCommand ssh -q -W %h:%p gateway.example.com
#   RekeyLimit 1G 1h
#   UserKnownHostsFile ~/.ssh/known_hosts.d/%k
# Added by git-extra
Host ssh.dev.azure.com
	HostkeyAlgorithms +ssh-rsa
	PubkeyAcceptedAlgorithms +ssh-rsa
# Added by git-extra
Host *.visualstudio.com
	HostkeyAlgorithms +ssh-rsa
	PubkeyAcceptedAlgorithms +ssh-rsa




###  2407290509 append
Host *
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa


可看到, 官方给 ssh.dev.azure.com 和 Host *.visualstudio.com 加了




ssh -o

在SSH(Secure Shell)命令中,-o 选项后面通常跟随一个配置指令,用于在命令行中临时设置SSH客户端的配置选项。这种方式允许你覆盖SSH客户端配置文件(通常是~/.ssh/config或者/etc/ssh/ssh_config)中的设置,或者为单个SSH会话指定特定的配置。

-o 选项后面紧跟的是配置项的名称和值,配置项和值之间通常使用=分隔,如果配置项的值包含空格,则整个值可能需要用引号括起来。

ssh -o HostKeyAlgorithms

ssh -o HostKeyAlgorithms 选项允许你指定 SSH 客户端在连接服务器时应该接受哪些主机密钥算法。这个选项在 SSH 客户端配置中非常重要,因为它可以帮助你控制连接的安全性。

随着 SSH 协议的发展,一些较旧的密钥算法(如 RSA1)已经被认为是不安全的,而新的、更安全的算法(如 ecdsa-sha2-nistp256, rsa-sha2-512 等)已经被引入。通过使用 -o HostKeyAlgorithms 选项,你可以指定 SSH 客户端只接受你认为安全的那些算法。

例如,如果你想要 SSH 客户端只接受使用 ECDSA(椭圆曲线数字签名算法)和 RSA(Rivest-Shamir-Adleman)签名算法(且要求 RSA 至少使用 SHA-2 散列函数)的主机密钥,你可以这样配置你的 SSH 命令:

ssh -o HostKeyAlgorithms=+ecdsa-sha2-nistp256,+rsa-sha2-512 user@hostname
ssh -o HostKeyAlgorithms=ssh-rsa

ssh -o HostKeyAlgorithms=ssh-rsa 这个命令选项用于在 SSH 连接时指定服务器主机密钥的算法。在这个例子中,它指定了仅使用 ssh-rsa 算法来验证服务器的身份。然而,需要注意的是,ssh-rsa 算法已经不再被认为是安全的最佳选择,因为它容易受到一些已知的攻击,如小公钥指数攻击和因子分解攻击。

从 OpenSSH 7.0 开始,ssh-rsa 已经不是默认的密钥算法了,而是被更安全的算法(如 ecdsa-sha2-nistp256ecdsa-sha2-nistp384ecdsa-sha2-nistp521rsa-sha2-256rsa-sha2-512ssh-ed25519)所取代。

尽管出于兼容性考虑,你可能需要暂时使用 ssh-rsa,但建议逐步迁移到更安全的算法上。如果你控制服务器,你应该更新 SSH 服务器的配置以使用更安全的密钥算法,并在客户端相应地更新你的 SSH 客户端配置或连接选项。

如果你只是偶尔需要连接到某个仍在使用 ssh-rsa 的服务器,使用 ssh -o HostKeyAlgorithms=+ssh-rsa(注意加号 +)可以确保在保持对其他更安全算法支持的同时,也接受 ssh-rsa 算法。然而,如果你完全确定只与 ssh-rsa 服务器通信,并且了解相关的安全风险,那么直接使用 ssh -o HostKeyAlgorithms=ssh-rsa 也是可以的。

不过,请记住,最好的做法是尽可能避免使用 ssh-rsa,并在可能的情况下升级到更安全的密钥算法。

注意,在 HostKeyAlgorithms 的值前面使用 + 符号是可选的,但在某些情况下(尤其是当你想要明确添加某个算法而不是替换默认列表时),使用 + 符号会更加清晰。然而,在许多 SSH 客户端实现中,简单地列出你想要的算法而不使用 + 也是有效的。

如果你想要完全禁用对旧算法的支持(比如,只接受 ECDSA 和 RSA-SHA2 密钥),你可以省略 + 符号,并确保你的列表中没有包含任何你认为不安全的算法。但是,请注意,这样做可能会阻止你连接到一些仍然使用旧算法的服务器。

最后,请记得这个选项的效果是临时的,它只会影响你当前执行的 SSH 命令。如果你想要永久更改这个设置,你应该在你的 SSH 客户端配置文件中(通常是 ~/.ssh/config)设置 HostKeyAlgorithms 选项。

其它一些-o选项

  1. 设置端口号

    ssh -o Port=2222 user@hostname
    

    这个命令将SSH会话的端口号设置为2222,而不是默认的22端口。

  2. 禁用主机密钥检查警告:这降低了安全性):

    ssh -o StrictHostKeyChecking=no user@hostname
    

    这会在连接到新主机时自动接受并添加未知的主机密钥到~/.ssh/known_hosts文件,而不是询问用户是否接受。

  3. 设置连接超时

    ssh -o ConnectTimeout=10 user@hostname
    

    这个命令设置了连接尝试的超时时间为10秒。

  4. 使用特定的私钥文件

    ssh -o IdentityFile=/path/to/your/private/key user@hostname
    

    这告诉SSH客户端在认证时使用指定的私钥文件。

  5. 设置日志级别

    ssh -o LogLevel=VERBOSE user@hostname
    

    这会增加SSH客户端的日志详细程度,有助于调试连接问题。

注意

  • 使用-o选项时,可以指定多个配置项,只需在命令中重复-o选项即可。
  • 某些配置项可能涉及到安全性问题,如禁用主机密钥检查,应谨慎使用。
  • 始终确保你的SSH密钥和配置文件受到妥善保护,避免未授权访问。

通过-o选项,SSH提供了一种灵活的方式来为不同的SSH会话定制配置,而无需修改全局或用户级别的SSH配置文件。




HostKeyAlgorithms +ssh-rsa , PubkeyAcceptedKeyTypes +ssh-rsa , PubkeyAcceptedAlgorithms +ssh-rsa

在SSH配置中,HostKeyAlgorithmsPubkeyAcceptedKeyTypesPubkeyAcceptedAlgorithms 这三个选项都涉及到SSH密钥和算法的使用。然而,从安全性的角度来看,直接在这些选项中添加 +ssh-rsa 可能不是最佳实践,因为RSA密钥算法(特别是较短的密钥长度)已经被认为在某些情况下不够安全,容易受到攻击。

HostKeyAlgorithms

HostKeyAlgorithms 选项用于指定SSH客户端在验证SSH服务器身份时接受的公钥算法。现代SSH服务器和客户端通常推荐使用更安全的算法,如 ecdsa-sha2-nistp256ecdsa-sha2-nistp384ecdsa-sha2-nistp521rsa-sha2-512ssh-ed25519

如果你需要在配置中包含 ssh-rsa(即RSA密钥算法),可以这样做,但请注意这可能会降低安全性。例如:

HostKeyAlgorithms +ssh-rsa,ecdsa-sha2-nistp256,ssh-ed25519

但请注意,通常不推荐仅使用 ssh-rsa

PubkeyAcceptedKeyTypes

PubkeyAcceptedKeyTypes 选项用于指定SSH服务器在公钥认证过程中接受的公钥类型。与 HostKeyAlgorithms 类似,这个选项也建议使用更安全的算法。如果你需要包含 ssh-rsa,可以这样做:

PubkeyAcceptedKeyTypes +ssh-rsa,ecdsa-sha2-nistp256,ssh-ed25519

但同样地,仅使用 ssh-rsa 可能会带来安全风险。

PubkeyAcceptedAlgorithms

PubkeyAcceptedAlgorithms 选项实际上与 PubkeyAcceptedKeyTypes 类似,但在某些SSH版本中可能用于更广泛的公钥算法配置。不过,请注意,具体的选项名称和用法可能因SSH版本和配置而异。对于大多数现代SSH版本,你可能不需要单独设置这个选项,除非你有特定的配置需求。

安全性建议

  • 升级密钥算法:尽可能使用更安全的密钥算法,如ECDSA或ED25519。
  • 密钥长度:对于RSA密钥,至少使用2048位长度,最好是4096位。
  • 定期更换密钥:定期更换SSH密钥以减少潜在的安全风险。
  • 禁用不安全的算法:在可能的情况下,禁用 ssh-rsa 和其他已知不安全的算法。

如果你必须保持与旧系统的兼容性,并且无法避免使用 ssh-rsa,请确保你了解相关的安全风险,并采取适当的缓解措施。













Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐