SSH故障处理手册


第1章  SSH故障处理

&  说明:

本文档不严格和具体的软硬件版本对应。

 

1.1  H3C设备作为服务器,用户使用密码认证登录失败

1.1.1  故障描述

H3C设备作为SSH服务器,SSH客户端配置无误,用户在SSH客户端以密码认证方式登录服务器时失败。

1.1.2  故障处理流程

图1-1 H3C设备作为服务器,用户使用密码认证无法登录服务器故障处理流程图

1.1.3  故障处理步骤

1. 检查网络连接是否畅通

在客户端ping服务器的IP地址,检查客户端和服务器端的网络是否可用,排除因网络故障导致SSH连接不能建立的可能性。

2. 检查服务器端是否开启SSH服务器功能

如果服务器端未开启SSH服务器功能,则客户端无法登录服务器。可以通过下述命令确认SSH服务器端是否开启了SSH服务器功能:

<Server> display ssh server status

SSH server: Disable

SSH version : 1.99

SSH authentication-timeout : 60 second(s)

SSH server key generating interval : 0 hour(s)

SSH authentication retries : 3 time(s)

SFTP server: Disable

SFTP server Idle-Timeout: 10 minute(s)

如果SSH服务器的状态为Disable,则需要在服务器上通过ssh server enable命令开启SSH服务器功能。

如果是使用SFTP方式登录,还需要检查是否使能了SFTP服务。在服务器上通过sftp server enable命令可以使能SFTP服务。

3. 检查版本是否匹配

服务器和客户端之间的版本不能协商成功,则连接无法建立。可以通过display ssh server status命令查看服务器上的SSH版本。

<Server> display ssh server status

SSH server: Disable

SSH version : 1.99

SSH authentication-timeout : 60 second(s)

SSH server key generating interval : 0 hour(s)

SSH authentication retries : 3 time(s)

SFTP server: Disable

SFTP server Idle-Timeout: 10 minute(s)

SSH服务器的版本号是SSH2.0时,如果客户端使用SSH1.5或更低的版本,则版本协商会失败。

如果客户端必须使用SSH1.5版本登录,可以在服务器上通过ssh server compatible-ssh1x enable命令配置服务器兼容SSH1.5版本,此时显示的SSH版本为1.99;如果客户端版本可以选择,建议使用SSH2.0的版本,这样连接会更加安全。

4. 检查VTY用户界面配置是否正确

开启SSH服务器功能后,如果客户端登录服务器端时,未提示用户是否认可该服务器身份,就退出了登录,且服务器端没有任何调试输出,则可能是由于服务器端的VTY用户界面配置不正确导致的。

(1)        SSH用户登录时要求存在认证模式是schemeVTY用户界面

可以通过下述命令查看VTY用户界面上的配置:

[Server-ui-vty0-4] display this

#

user-interface con 0

user-interface vty 0 4

#

return

缺省情况下,VTY用户界面的认证模式不是scheme,需要在VTY用户界面视图下增加如下配置:

[Server-ui-vty0-4] authentication-mode scheme

(2)        SSH用户登录时要求VTY用户界面支持SSH协议

可以通过下述命令查看VTY用户界面上的配置:

[Server-ui-vty0-4] display this

#

user-interface con 0

user-interface vty 0 4

 authentication-mode scheme

 protocol inbound telnet

#

return

上述配置表明VTY用户界面仅支持Telnet协议,增加如下配置可以解决此问题:

[Server-ui-vty0-4] protocol inbound all

缺省情况下,VTY用户界面支持包括SSH在内的所有协议。

5. 检查服务器公钥是否存在

为了防止“伪服务器欺骗”,客户端登录服务器端时,客户端通过数字签名的方法验证服务器的身份。如果客户端没有保存服务器的公钥或保存的服务器公钥不正确,则服务器身份验证将会失败,从而导致客户端无法登录服务器。因此,客户端登录服务器之前,需要先在服务器端创建密钥对,并将正确的服务器公钥保存在客户端。

如果客户端输入用户名后,未提示用户是否认可服务器的身份即退出登录,则问题的原因可能是服务器端未创建密钥对。

可以通过下述命令查看服务器端的公钥配置:

<Server> display public-key local dsa public

<Server> display public-key local rsa public

如果没有显示配置的DSARSA公钥,说明服务器上还没有配置公钥。通过以下方式可以解决该问题:

(1)        在服务器端执行public-key local create命令创建密钥对

(2)        在服务器端执行public-key local export命令将服务器端的公钥导入到文件中;

(3)        将保存服务器公钥的文件通过FTP/TFTP方式上传到客户端,并在客户端指定该公钥文件用于认证服务器身份。

6. 检查服务器端是否存在该用户

客户端登录服务器时,提示用户反复输入密码,但是认证都不成功。该问题的原因可能是服务器端不存在该用户。

SSH为了防止用户名猜测,服务器不会提示客户端登录的用户名不存在。可以通过display local-user命令查看服务器端的本地用户配置,如果AAA使用远程认证,需要查看远程认证服务器上的用户配置。

如果服务器端不存在该用户名,则需要在服务器上创建该用户。

7. 认证失败

客户端登录服务器时,提示用户反复输入密码,但是认证都不成功。该问题的原因也可能是:

(1)        密码不正确

用户登录时输入的用户名和密码要求与服务器上配置的完全一致。如果输入的密码错误,则需要获取正确的密码,或修改服务器上用户名对应的密码。

(2)        用户已经被服务器记入黑名单

在某些设备上,使能密码管理功能后,对于连续失败认证次数超过设置次数的终端,服务器会将其IP地址以及用户名记入黑名单中,并拒绝后续从该终端登录的用户。

可以通过display password-control blacklist命令查看服务器端的黑名单列表,确认用户是否已经列入黑名单。如果用户被列入黑名单,则无法登录服务器。

可以通过reset password-control blacklist user-name命令将指定用户从黑名单中删除。

(3)        用户可以使用的服务类型设置不正确

SSH用户要想成功登录服务器,则需要在服务器上指定用户可以使用的服务类型为SSH

可以通过display local-user命令查看用户可以使用的服务类型是否为SSH;如果AAA使用远程认证,则必须查看远程认证服务器上的用户配置。

<Server> display local-user user-name test

The contents of local user test:

 State:                    Active

 ServiceType:              ssh

 Access-limit:             Disable           Current AccessNum: 0

 User-group:               system

 Bind attributes:

 Authorization attributes:

Total 1 local user(s) matched.

如果用户可以使用的服务类型配置不正确,则需要在本地用户视图下通过service-type ssh命令或在远程服务器上修改本地用户的配置。

8. 检查SSH用户服务类型配置是否正确

SSH用户服务类型包括StelnetSFTP两种。如果用户登录时使用的服务类型与服务器上配置的用户服务类型不一致,则用户登录会失败。

可以在服务器端通过display ssh user-information命令查看SSH用户的配置:

<Server> display ssh user-information

 Total ssh users:1

Username    Authentication-type   User-public-key-name     Service-type

test        password              null                     sftp

如果为登录用户配置的服务类型与用户登录时实际使用的服务类型不一致,则可以通过ssh user username service-type命令修改用户的服务类型。

9. 用户登录超时

服务器端打印如下调试信息后,用户退出登录。

*Jan 24 14:40:12:100 2008 Server SSH/7/Server_ERROR: VTY[0]:Login Error:

SSH user user failed to login because of authentication timeout.

出现这个问题的原因是用户登录过程的时间超过了服务器设置的时间,一般是由服务器上设置的超时时间不合适导致的。

可以通过display ssh server status命令查看服务器上的超时时间配置:

<Server> display ssh server status

 SSH server: Enable

 SSH version : 2.0

 SSH authentication-timeout : 20 second(s)

 SSH server key generating interval : 0 hour(s)

 SSH authentication retries : 3 time(s)

 SFTP server: Disable

 SFTP server Idle-Timeout: 10 minute(s)

SSH登录过程中密钥交换运算量比较大,如果设备性能较低,需要配置较长的认证超时时间。

通过ssh server authentication-timeout命令可以修改服务器端配置的认证超时时间。

10. 检查SFTP工作目录配置是否正确

SSH用户服务类型为SFTP时,如果服务器上设置的SFTP用户工作目录不正确,则用户不能成功登录。

服务器端打印如下调试信息时,登录失败的原因可能是工作目录设置错误。

Jan 30 17:12:34:891 2008 Server SSH/7/Server_MESSAGE: VTY[0]:SSH_Channel:

  Send Message SSH2_MSG_CHANNEL_FAILURE(100):RemoteID=1

*Jan 30 17:12:34:891 2008 Server SSH/7/Server_ERROR: SFTPS Error:

  Invalid sftp service or maximum sftp sessions exceeded.

对于只采用密码方式认证的用户,工作目录为通过AAA授权的工作目录。通过如下方法可以查看本地为用户配置的工作目录是否正确。

[Server-luser-test] display this

#

local-user test

 password simple 123

 authorization-attribute work-directory cf:/

 service-type ssh

#

return

如果工作目录配置错误,则需要通过在本地用户视图下执行authorization-attribute work-directory命令配置正确的工作目录。

如果AAA使用远程认证,则需要在远程认证服务器上修改用户的工作目录。

1.2  H3C设备作为服务器,用户使用公钥认证登录失败

1.2.1  故障描述

H3C设备作为服务器,SSH客户端配置无误,用户在SSH客户端以公钥认证方式登录服务器时失败。

1.2.2  故障处理流程

图1-2 H3C设备作为服务器,用户使用公钥认证无法登录服务器故障处理流程图

1.2.3  故障处理步骤

H3C设备作为服务器,用户使用公钥认证无法登录服务器与使用密码认证无法登录服务器的故障处理过程类似,二者的区别主要在于:

l              公钥认证利用RSADSA算法,采用数字签名的方法认证用户;密码认证采用密码比较的方式认证用户。因此,故障处理过程中的“1.1.3  7. 认证失败”有所不同。

l              公钥认证和密码认证用户使用的工作目录不同。只采用密码认证方式的用户,使用的工作目录为通过AAA授权的工作目录;采用公钥认证方式的用户,使用的工作目录为通过ssh user命令为该用户设置的工作目录。因此,故障处理过程中的“1.1.3  10. 检查SFTP工作目录配置是否正确”有所不同。

下面只说明与使用密码认证无法登录服务器故障处理过程不同的步骤,其他故障排除方法请参见“1.1.3  故障处理步骤”。

1. 公钥认证不成功

客户端使用公钥认证方式登录SSH服务器,认证失败,服务器端的调试信息如下:

*Jan 30 10:12:28:703 2008 Server SSH/7/Server_ERROR: VTY[0]:Process AuthPK Error:  Failed to vertify public key!

*Jan 30 10:12:28:703 2008 Server SSH/7/Server_EVENT: VTY[0]:LOGIN Failed:

SSH user user failed to login from 192.168.1.2(0000-5e28-b700) on VTY0.

*Jan 30 10:22:28:875 2008 Server SSH/7/Server_EVENT: VTY[0]:SSH user[user] have reached the max permit retry times[3].

出现这个问题可能的原因是:

(1)        服务器端配置的用户公钥错误

通过display ssh user-information命令在服务器端查看该用户对应的公钥名称。

<Server> display ssh user-information

 Total ssh users:1

 Username            Authentication-type  User-public-key-name  Service-type

 test1               publickey            user_key3             stelnet|sftp

通过display public-key peer命令查看用户公钥的详细信息。

<Server> display public-key peer name user_key3

=====================================

  Key Name  : user_key3

  Key Type  : RSA

  Key Module: 1024

=====================================

Key Code:

30819F300D06092A864886F70D010101050003818D0030818902818100E31EE84BB745DA6F9ACCF5B6CA7BC4C0599A45F65281BE869AD90A192D37BBCE5683F7A68F0C95A0399A3022C7F66EC52DE951630874CD8EE11AFA876ABE3937E86BF9A83EFC0C8E68144FE38DFAEDC12E48654F8D15703455C96E9BCE026A91A2435E675BB7420D5A4AB5CE2520A213405AFED986F8F59101B745D9BF9BBA4D0203010001

在客户端显示用户公钥的信息,与服务器端保存的用户公钥进行比较。如果不一致,则需要重新获取用户的公钥。获取方法为:将用户的公钥文件通过FTP/TFTP以二进制方式上传到服务器,通过public-key peer import sshkey命令从公钥文件中导入公钥,并通过ssh user命令指定与用户关联的公钥。

&  说明

不同SSH客户端显示用户公钥的方式不同,请以实际情况为准。

 

(2)        服务器端配置的用户公钥和用户使用的私钥不匹配

SSH客户端可能支持多种公钥算法,每种公钥算法对应不同的公钥和私钥对。只有服务器端保存的用户公钥类型与用户登录时使用的私钥类型一致时,用户认证才会成功。例如,服务器端为某用户配置了DSA类型的公钥,用户也持有与之相匹配的私钥,但是登录时用户使用的私钥类型为RSA,此时用户认证将会失败。

可以通过以下方法解决该问题:客户端登录服务器时使用的用户私钥类型与服务器上为用户配置的公钥类型保持一致。

&  说明

不同SSH客户端指定认证过程中使用的私钥的方式不同,有些客户端通过命令关键字指定私钥类型,有些客户端直接指定私钥文件,请以SSH客户端的实际情况为准。

 

2. 检查SFTP工作目录设置是否正确

SSH用户服务类型为SFTP时,如果服务器上设置的SFTP用户工作目录不正确,则用户不能成功登录。

服务器端打印如下调试信息时,登录失败的原因可能是工作目录设置错误。

Jan 30 17:12:34:891 2008 Server SSH/7/Server_MESSAGE: VTY[0]:SSH_Channel:

  Send Message SSH2_MSG_CHANNEL_FAILURE(100):RemoteID=1

*Jan 30 17:12:34:891 2008 Server SSH/7/Server_ERROR: SFTPS Error:

  Invalid sftp service or maximum sftp sessions exceeded.

采用公钥认证方式的用户,使用的工作目录为通过ssh user命令的work-directory关键字为该用户设置的工作目录。通过下面的方法查看工作目录设置是否正确:

<Server> display current-configuration | include ssh user

 ssh user test service-type sftp authentication-type publickey assign publickey test work-directory cf:/

如果工作目录设置错误,则需要通过ssh user命令指定正确的工作目录。

1.3  H3C设备作为客户端,用户使用密码认证登录失败

1.3.1  故障描述

H3C设备作为SSH客户端,SSH服务器配置无误,用户在SSH客户端输入登录命令,以密码认证方式登录服务器时失败。

1.3.2  故障处理流程

图1-3 H3C设备作为客户端,用户使用密码认证登录失败故障处理流程图

1.3.3  故障处理步骤

1. 检查网络连接是否畅通

在客户端ping服务器的IP地址,检查客户端和服务器端的网络是否可用,排除因网络故障导致SSH连接不能建立的可能性。

2. 检查版本是否匹配

客户端和服务器之间的版本协商失败,会导致连接无法建立。

设备作为SSH客户端时支持的版本为SSH2.0,如果服务器使用SSH1.5或更低的版本,则版本协商会失败。只有更改服务器的版本,使其支持SSH2.0,才能解决该问题。

3. 检查服务器公钥是否正确

为了防止“伪服务器欺骗”,客户端登录服务器端时,客户端通过数字签名的方法验证服务器的身份。如果客户端没有保存服务器的公钥或保存的服务器公钥不正确,则服务器身份验证将会失败,从而导致客户端无法登录服务器。

设备作为SSH客户端时支持首次认证功能,即SSH客户端首次访问服务器,而客户端没有配置服务器端的主机公钥时,用户可以选择继续访问该服务器,并在客户端保存该主机公钥,当用户下次访问该服务器时,就以保存的主机公钥来认证该服务器。如果配置SSH客户端支持首次认证功能,则不需要事先在客户端配置服务器的公钥;否则,需要在登录服务器之前,在客户端上配置正确的服务器的公钥。缺省情况下,客户端支持首次认证。

(1)        客户端不支持首次认证,但未提前在本地配置服务器公钥

客户端登录服务器时,输入用户名后马上退出:

<Client> ssh2 192.168.1.1

Username: test

Trying 192.168.1.1 ...

Press CTRL+K to abort

Connected to 192.168.1.1 ...

Connection closed.

这个问题可能是由于客户端配置了不支持首次认证,但是未提前在客户端手工配置服务器公钥造成的。

通过命令display current-configuration命令可以查看当前是否配置了undo ssh client first-time命令,从而确定客户端是否支持首次认证。如果配置了该命令,则客户端不支持首次认证。

可以通过两种方法解决上述问题:

l              将服务器端的公钥文件通过FTP/TFTP以二进制方式上传到客户端,通过public-key peer import sshkey命令从公钥文件中导入公钥,并通过ssh client authentication server命令在客户端手工配置服务器与公钥之间的关联;

l              通过ssh client first-time enable命令配置客户端支持首次认证。

  注意

如果配置了ssh client first-time enable命令,客户端本身无法保证连接的安全性。

 

(2)        客户端保存的服务器公钥与实际的服务器公钥不一致

客户端登录服务器时,提示如下信息:

<Client> ssh2 192.168.40.182

Username: test

Trying 192.168.40.182 ...

Press CTRL+K to abort

Connected to 192.168.40.182 ...

 

The server's host key does not match the local cached key. Either the server administrator has changed the host key, or you connected to another server pretending to be this server. Please remove the local cached key, before logging in!

Connection closed.

这个问题是由于客户端保存的服务器公钥和服务器的实际公钥不一致,导致客户端认证服务器身份失败。可以通过下述方法查看客户端保存的服务器公钥。

首先,显示客户端保存的该服务器公钥的名称。

<Client> display ssh server-info

Server Name(IP)                                   Server public key name

_________________________________________________________________________

192.168.40.182                                    server-key-name

其次,显示本地保存的服务器公钥的信息。

<Client> display public-key peer name server-key-name

最后,将显示的内容和服务器端本地显示的公钥进行比较,如果不一致则可以确定是该问题。

&  说明

l      不同SSH服务器显示用户公钥的方式不同,请以实际情况为准。

l      同时采用H3C设备作为SSH客户端和SSH服务器时,SSH客户端采用DSA算法认证SSH服务器端的身份,因此需要在SSH客户端上保存SSH服务器的DSA公钥。

 

为了解决这个问题,首先需要在客户端执行如下命令,取消服务器与错误公钥之间的关联:

[Client] undo ssh client authentication server 192.168.40.182 assign publickey

然后,可以通过以下两种方法重新获取服务器的公钥:

l              将服务器端的公钥文件通过FTP/TFTP以二进制方式上传到客户端,通过public-key peer import sshkey命令从公钥文件中导入公钥,并通过ssh client authentication server命令在客户端手工配置服务器与公钥之间的关联;

l              在客户端配置命令ssh client first-time enable,使能客户端首次认证功能,客户端再次登录服务器时,自动从服务器端获取公钥,并建立关联。

4. 检查用户名和密码是否正确

客户端登录服务器时,提示用户反复输入密码,但是认证都不成功。该问题的原因可能是用户输入的用户名和密码不正确。请获取正确的用户名和密码,再登录。

1.4  H3C设备作为客户端,用户使用公钥认证登录失败

1.4.1  故障描述

H3C设备作为SSH客户端,SSH服务器配置无误,用户在SSH客户端输入登录命令,以公钥认证方式登录服务器时失败。

1.4.2  故障处理流程

图1-4 H3C设备作为客户端,用户使用公钥认证登录失败

1.4.3  故障处理步骤

H3C设备作为客户端,用户使用公钥认证登录失败的故障处理流程与使用密码认证登录失败的故障处理流程类似。二者的区别主要在于:公钥认证利用RSADSA算法,采用数字签名的方法认证用户;密码认证采用密码比较的方式认证用户。因此,故障处理过程中的最后一步有所不同。下面只说明二者不同的步骤,其他故障排除方法请参见“1.3.3  故障处理步骤”。

1. 检查客户端指定的认证算法是否正确

H3C设备作为SSH客户端时,支持使用RSADSA两种类型的公钥算法认证客户端。服务器端保存的用户公钥类型与用户登录时指定的公钥认证算法(通过登录命令ssh2sftp中的identity-key关键字指定)一致时,认证才会成功。例如,服务器端为某用户配置了DSA类型的公钥,用户也持有与之相匹配的私钥,但是登录时用户指定公钥认证算法为RSA,此时用户认证将失败。

可以通过以下方法解决该问题:用户执行ssh2sftp命令登录服务器时,通过identity-key关键字指定的公钥认证算法与服务器上为用户配置的公钥类型保持一致。H3C设备作为SSH客户端,缺省情况下使用公钥认证算法为DSA

1.5  故障诊断命令

1.5.1  SSH服务器端命令

命令

说明

display local-user

显示本地用户的相关信息

display password-control blacklist

显示用户认证失败后,被加入黑名单中的用户信息

display public-key local

显示本地密钥对的公钥部分

display public-key peer

显示保存在本地的远端公钥信息

display ssh server status

SSH服务器端显示该服务器的状态信息

display ssh user-information

SSH服务器端显示SSH用户信息

debugging ssh server

打开SSH服务器的调试信息开关

 

1.5.2  SSH客户端命令

命令

说明

display public-key local

显示本地密钥对的公钥部分

display public-key peer

显示保存在本地的远端公钥信息

display ssh server-info

SSH客户端显示客户端保存的服务器端的主机公钥和服务器的对应关系

debugging ssh client

打开SSH客户端的调试信息开关

 

 

Copyright ©2008 杭州华三通信技术有限公司 版权所有,保留一切权利。

非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。

本文档中的信息可能变动,恕不另行通知。

附件下载

联系我们