ssh从不要求密码

不知怎的,我的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次我怀疑是publickey方法,然后失败。 为什么不用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 

尝试使用禁用公钥validation身份登录

 ssh -o PubkeyAuthentication=no root@newserver 

很可能你的.ssh/config文件中有多个identityfile行。

即使您在host配置下具有identityfile ,也会全局应用它。 这意味着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. 无论如何,妥协您的工作站都会暴露您的私钥。 拥有多个私钥对此没有帮助(除非您有不同的强密码,并且并非所有这些都可用于攻击者)。

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

您的本地ssh不应该要求您输入密码,另一端的ssh服务器应该。 服务器可能设置为不接受密码validation。 我也不会要求你输入密码。