如何强制SSH提供RSA密钥而不是ECDSA?


16

第一次访问服务器时,如果用户批准,如何强制SSH给我提供RSA密钥并自动存储它?

目前,它为我提供了ECDSA密钥。因为我已经知道RSA密钥,所以我更希望看到此时出现的RSA密钥。

我试过了:

ssh -o RSAAuthentication=yes user@server

不幸的是,这给了我ECDSA密钥和Are you sure you want to continue connecting (yes/no)?消息。


我也有类似的情况。服务器A。客户端B。在B上:SSH A首先会询问您密钥。在Cleint C上:ssh A首先会要求您输入passwrd,但在尝试使客户端C使用ECDSA密钥失败后,我在A的日志中看到了这一点。如果我在C上预加载rsa密钥,则ssh A会很高兴地连接。如何防止C首次使用ECDSA密钥?
周克敏

Answers:


14

通过从HostKeyAlgorithms配置变量中删除ECDSA算法。

ssh -o HostKeyAlgorithms=ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-rsa,ssh-dss user@server

我只是从默认列表中删除了所有ECDSA算法。

当然,您可以将其放入.ssh/config该机器中:

Host: server
    HostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-rsa,ssh-dss

对于OpenSSL,1)主机后没有冒号,并且2)自您发布以来,默认列表似乎已更改。试试吧HostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-rsa
cowlinator '19

6

不要使用RSA,因为ECDSA是新的默认设置。

在服务器上执行以下操作: ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub 并记录该号码。

在客户端上,您可以SSH到主机,如果看到相同的数字,则可以Are you sure you want to continue connecting (yes/no)?肯定地回答提示。然后ECDSA密钥将记录在客户端上,以备将来使用。


3
是的,但是如果我有一个旧的应用程序需要RSA来保持兼容性,直到有业务决定要更新到ecdsa时该怎么办?
狂热的人

@RobertSiemer只有原始的问题发布者可以更改接受的答案。我无法这样做。
狂热爱好者

1
H2ONaCl:请更改您接受的答案。这一项没有完成您所要求的。@enthusiasticgeek对不起,混乱。
罗伯特·西默

默认(呼吁权威)和新(呼吁新颖)不一定意味着更好。RSA仍然被认为是强大的...如果您想要更大的强度,只需将其增加到4096(2048可能很快就会过时)。如果您想要一个好的EC算法,请使用ed25519。ECDSA很烂,因为它使用了弱NIST曲线,甚至可能是后门的。一段时间以来,这一直是一个众所周知的问题。因此,对于旧式支持,请启用RSA,对于理想的算法,请使用ed25519 ...总是禁用过时的DSA(主要原因是固定大小的1024位密钥),同时也禁用ECDSA。尝试使用ssh-audit进行更多操作。
彼得·

5

是的,可以,请尽快切换到ECDSA,但与此同时请尝试以下操作:

ssh -o HostKeyAlgorithms=ssh-rsa -o FingerprintHash=md5 user@example.com

这在我的系统(OpenSSH_6.6.1p1)上提供了“错误的配置选项:Fingerprinthash”。
索伦·比约恩斯塔德

1
@SorenBjornstad,该FingerprintHash选项是不必要的,只需将整个部分都保留掉即可。
卢卡斯

2

我刚刚添加了这一行

HostKeyAlgorithms ssh-rsa

/etc/ssh/sshd_conf

并且在此版本中工作正常。

OpenSSH_7.7p2 ubuntu-4ubuntu2.2

1

只是为了改善风滚草的答案,其中有一个死链接,用于查找旧算法列表。

首先确定算法列表。要查找旧列表,请使用ssh -vv

ssh -vv somehost

并查找两行,例如“主机密钥算法:...”,其中第一行似乎是服务器的报价,第二行是客户端的报价。或者要自动选择这两行,请尝试以下操作(并退出按ctrl + d键):

ssh -vv somehost 2>&1 | grep "host key algorithms:"

现在将其过滤掉...您应该删除所有dss / dsa,因为它们已经过时了,并且您还想删除ecdsa(我也是如此),例如,如果您有:

ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

您应该最终得到:

ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

现在编辑您的配置。对于您自己的配置:

vim ~/.ssh/config

对于系统范围的配置:

sudo vim /etc/ssh/ssh_config

全局添加新行:

HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

或特定的主机(不适合用于服务器范围的配置):

Host somehost
    HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

代替您输入的列表,粘贴您从ssh -vv输出派生的列表,而不包括“主机密钥算法:”部分。


0

某些问题令人困惑,是否有可能从现有默认值中删除密钥算法-最高级别的密钥是新的RSA-sha2 / 256/512和ed25519密钥,使用ssh-keygen -t ras -a -b 4096 -a 113可提供最佳安全性到一代 传统支持显然正在读取ssh1将完全消失的ssh新闻-其45位和96位最大-dsa密钥也已贬值。它固定在最大128/1024位,可被黑客入侵。(可能是NSA这样做了,而调试代码则la脚/借口使人怀疑它的名字令人讨厌),因此必须重新设计所有昂贵的安全RSA密钥结构,以支持并保持更高的标准。设置您希望使用的密钥,如/ etc / ssh / sshd_config中所述,尝试做2个密钥认证3个密钥也起作用,即:sshd_config“ AuthenticationMethods publickey,publickey,publickey” -确保ssh -Q kex列表与A和B服务器或台式机匹配,例如pos对它们的输出进行差异-并确保相同的密钥提取算法匹配。生产中较新的ecdsa钥匙也不适合使用。或get-keyexchange拒绝部分访问安全消息。很多好的信息只是耐心地搜索它。


2
您能否尝试打破这堵文字墙,以便更轻松地进行阅读?请使用格式指南,将代码和文本文件的内容格式化为代码,如果可以使内容更清楚,请放在各自的行中。如果可以,我会很乐意自己编辑您的答案,但我不能。
赞纳

-5

或者,如果您坚持采用RSA密钥方法,则可以ssh-keygen -t rsa在要进行SSH 加密的服务器上键入内容。

这应该在“〜/ .ssh / id_rsa”下生成RSA公钥和私钥。现在,您需要做的就是将$HOME/.ssh/authorized_keys要从中SSH的所有计算机下的公共密钥复制到生成RSA密钥的计算机上。

然后坐下来放松!


1
您意识到问题不是关于客户端密钥,而是关于服务器密钥?
0xC0000022L 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.