ssh从不要求输入密码


14

不知何故,我的SSH从来不想向我询问密码。

因此,我在世界各地的某个随机服务器上设置了VPS,并希望通过ssh连接到它。

我可以设置一个密钥,但是当我这样做时:

ssh -l some-user IP

我得到错误:

Received disconnect from ##.##.##.##: 2: Too many authentication failures for some-user

当我查看详细信息时,可以看到密码是以下选项之一:

debug1: Offering RSA public key: some-user@computer
debug1: Authentications that can continue: publickey,password

但是SSH从不要求我提供密码。我用公钥方法尝试了5次,然后失败了。为什么ssh不尝试使用密码?

以防万一,我的ssh_config文件具有:

PasswordAuthentication yes

完整日志

ssh -v -l root ##.##.##.##
OpenSSH_6.1p1 Debian-4, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /home/someuser/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to ##.##.##.## [##.##.##.##] port 22.
debug1: Connection established.
debug1: identity file /home/someuser/.ssh/id_rsa type 1
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: identity file /home/someuser/.ssh/id_rsa-cert type -1
debug1: identity file /home/someuser/.ssh/id_dsa type -1
debug1: identity file /home/someuser/.ssh/id_dsa-cert type -1
debug1: identity file /home/someuser/.ssh/id_ecdsa type -1
debug1: identity file /home/someuser/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.2p2 Ubuntu-6
debug1: match: OpenSSH_6.2p2 Ubuntu-6 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.1p1 Debian-4
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA XX:XX:...:XX:XX
debug1: Host '##.##.##.##' is known and matches the ECDSA host key.
debug1: Found key in /home/someuser/.ssh/known_hosts:38
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/someuser/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering DSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
Received disconnect from ##.##.##.##: 2: Too many authentication failures for root

Answers:


17

尝试使用禁用的公钥身份验证登录

ssh -o PubkeyAuthentication=no root@newserver

好的!可行!我尝试了“相反”的尝试,但没有成功...(即-o PasswordAuthentication=yes)。但这就是我想要的。
亚历克西斯·威尔克

3
@AlexisWilke我很高兴它能工作!但也请阅读Olli的答案。他绝对是对​​的,你的事情还是有问题.ssh/config-o PubkeyAuthentication=no作为永久解决方案,它不是很好。
Klaus-Dieter Warzecha 2014年

此技巧(-o PubkeyAuthentication = no)在具有多个标识文件的计算机上效果很好。
Valerio Schiavoni 2015年

17

很可能您identityfile.ssh/config文件上有多行。

即使您identityfile正在host配置中,它也会全局应用。这意味着ssh在请求服务器提示输入密码之前,它将尝试每个主机上的每个身份文件(即公共密钥)。

您可以通过解决此问题

  1. 删除除identityfile一行以外的所有内容,或者
  2. 添加PubkeyAuthentication no.ssh/config
  3. 使用-o PubkeyAuthentication=no参数执行ssh 。

来自man 5 ssh_config

PubkeyAuthentication
    Specifies whether to try public key authentication.  The argument to this
    keyword must be “yes” or “no”.  The default is “yes”.  This option applies 
    to protocol version 2 only.

IdentityFile
    ...
    It is possible to have multiple identity files specified in configuration
    files; all these identities will be tried in sequence.  Multiple 
    IdentityFile directives will add to the list of identities tried (this 
    behaviour differs from that of other configuration directives).

有关公用密钥的一些一般说明:

  1. 通常,每个客户端(工作站)应该只有一个私钥,并将匹配的公钥放置到客户端应有权访问的所有服务器上。换句话说,在服务器之间共享公钥,并且永远不要在多个设备上使用相同的私钥。
  2. 始终在设备上生成密钥对,并且仅传输公共密钥。这样,即使服务器受到威胁,您的私钥仍然是安全的。这可能会以令人惊讶的方式发生-例如通过备份。
  3. 如果别人下辖的服务器,应该为他们提供的公共密钥; 他们应该不会生成密钥对和发私用密钥给你。这样,他们就无法用您的钥匙来模仿您(当然,通常他们可以做他们想做的任何事情)。同样,使用公钥,只能保护完整性(即某人未更改公钥);使用私钥,必须保持机密性(即没有其他人获得密钥),并且不可能绝对确定它没有受到损害。
  4. 即使您使用同一私钥连接到多个服务器,对服务器进行破坏也不会损害其他服务器(除非您将该私钥传输到该服务器。决不要这样做。)
  5. 损害您的工作站将无论如何都会暴露您的私钥。拥有多个私钥对此无济于事(除非您有不同的强密码短语,并且并非所有这些私钥都可供攻击者使用)。

有一些例外,但不是太多。


2
啊!我的识别文件“太多”,它检查5个文件并停止。得到它了!这说明了一切。我想我应该将所有这些移动到子文件夹中,以便不会自动找到它们,并且密码功能将再次自动运行...
Alexis Wilke 2014年

3
如果可能的话,您应该/只能为您需要的每项服务使用一个公钥。很少有理由以其他任何方式这样做。如果有人窃取了您的公开密钥(的内容authorized_keys),则他们将无能为力。而且,如果所有私钥(id_rsa/ id_dsa)都在同一台计算机上,则使用多个私钥无关紧要。
Olli 2014年

4

您本地的ssh不应要求您输入密码,另一端的ssh服务器应如此。服务器可能设置为不接受密码身份验证。我也不会要求您输入密码。


1
另一台服务器是一台全新的服务器,它们会告诉您完全这样做。不仅如此,我的伴侣也可以登录!我的计算机上有些杂物,无法对其进行密码测试...实际上,如果您查看日志,则授权的身份验证确实包含“密码”。因此,我的本地ssh客户端应该向我询问密码,但它决定跳过该密码。
亚历克西斯·威尔克

要了解为什么服务器不会提示您输入密码,要比为什么客户端没有向您提供该选项(如果服务器提供密码)要容易得多。它们的末端有很多配置选项,而您却很少。拥有您IP地址的人可能尝试使用正确的密码登录过多次,并且以后您的IP尝试已被禁用。射击,我刚刚阅读了Olli的答案。而已。
2014年
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.