Secure Shell (SSH) 是一种提供到网络设备的安全远程访问连接的协议。在 SSH 版本 1 和 SSH 版本 2 中,客户端与服务器之间的通信是加密的。如有可能,请实施 SSH 版本 2,因为它采用的安全加密算法更强。
本文档讨论如何在运行支持 SSH 的 Cisco IOS® 软件版本的 Cisco 路由器或交换机上配置和调试 SSH。本文档包含有关特定版本和软件映像的详细信息。
使用的Cisco IOS映像必须是k9(加密)映像才能支持SSH。例如c3750e-universalk9-tar.122-35.SE5.tar是k9(加密)映像。
本文档中的信息基于 Cisco IOS 3600 软件 (C3640-IK9S-M) 版本 12.2(2)T1。
SSH已引入到以下Cisco IOS平台和映像中:
SSH版本1.0(SSH v1)服务器是在从Cisco IOS软件版本12.0.5.S开始的一些Cisco IOS平台和映像中引入的。
从Cisco IOS软件版本12.1.3.T开始,SSH客户端在一些Cisco IOS平台和映像中引入。
从Cisco IOS软件版本12.2.2.T开始,在某些Cisco IOS平台和映像中引入了SSH终端线路访问(也称为反向Telnet)。
从Cisco IOS软件版本12.1(19)E开始,在某些Cisco IOS平台和映像中引入了SSH版本2.0(SSH v2)支持。
有关不同 Cisco IOS 软件版本和不同平台支持的功能集的完整列表,请参阅 Software Advisor(仅限注册用户)。
本文档中的信息都是基于特定实验室环境中的设备创建的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您在使用任何命令前已经了解其潜在影响。
有关文档规则的详细信息,请参阅 Cisco 技术提示规则。
请使用Cisco Software Advisor(仅限注册客户),以帮助您找到代码版本,并为SSH v1或SSH v2提供适当支持。
首先在不使用 SSH 的情况下测试身份验证,以确保在您添加 SSH 之前,路由器 Carter 的身份验证工作正常。身份验证可以使用本地用户名和密码,也可以使用运行TACACS+或RADIUS的身份验证、授权和记帐(AAA)服务器。(使用SSH无法通过线路密码进行身份验证。) 本示例说明了本地身份验证,本地身份验证允许您使用用户名“cisco”和口令“cisco”通过 Telnet 登录路由器。
!--- The aaa new-model command causes the local username and password on the router !--- to be used in the absence of other AAA statements. aaa new-model username cisco password 0 cisco line vty 0 4 transport input telnet !--- Instead of aaa new-model, you can use the login local command.
为了在使用 SSH 的情况下测试身份验证,必须添加之前的语句,才能在 Carter 上启用 SSH 并从 PC 和 UNIX 工作站测试 SSH。
ip domain-name rtp.cisco.com !--- Generate an SSH key to be used with SSH. crypto key generate rsa ip ssh time-out 60 ip ssh authentication-retries 2
此时,show crypto key mypubkey rsa命令必须显示生成的密钥。在添加 SSH 配置后,请测试从 PC 和 UNIX 工作站访问路由器的能力。如果不能进行访问,请参阅本文档的调试部分。
如果要阻止非 SSH 连接,请在语句行的下面添加 transport input ssh 命令,将路由器限制为只能使用 SSH 连接。直接(非 SSH)Telnet 将被拒绝。
line vty 0 4 !--- Prevent non-SSH Telnets. transport input ssh
进行测试以确保非 SSH 用户不能通过 Telnet 登录路由器 Carter。
在Cisco IOS路由器上启用SSH支持需要四个步骤:
配置 hostname 命令。
配置 DNS 域。
生成要使用的 SSH 密钥。
对虚拟类型终端 (vty) 启用 SSH 传输支持。
如果要让一台设备充当另一台设备的 SSH 客户端,可以在称为 Reed 的第二台设备上添加 SSH。然后,这些设备将处于客户端服务器布局中,其中 Carter 充当服务器,而 Reed 充当客户端。Reed上的Cisco IOS SSH客户端配置与Carter上的SSH服务器配置所需的配置相同。
!--- Step 1: Configure the hostname if you have not previously done so. hostname carter !--- The aaa new-model command causes the local username and password on the router !--- to be used in the absence of other AAA statements. aaa new-model username cisco password 0 cisco !--- Step 2: Configure the DNS domain of the router. ip domain-name rtp.cisco.com !--- Step 3: Generate an SSH key to be used with SSH. crypto key generate rsa ip ssh time-out 60 ip ssh authentication-retries 2 !--- Step 4: By default the vtys' transport is Telnet. In this case, !--- Telnet is disabled and only SSH is supported. line vty 0 4 transport input SSH !--- Instead of aaa new-model, you can use the login local command.
从Cisco IOS SSH客户端(Reed)向Cisco IOS SSH服务器(Carter)发出以下命令进行SSH以测试:
SSH V1:
ssh -l cisco -c 3des 10.13.1.99
SSH V2:
ssh -v 2 -c aes256-cbc -m hmac-sha1-160 -l cisco 10.31.1.99
要配置SSH服务器以执行基于RSA的身份验证,请完成以下步骤。
指定主机名。
Router(config)#hostname
定义默认域名。
Router(config)#ip domain-name
生成RSA密钥对。
Router(config)#crypto key generate rsa
为用户和服务器身份验证配置SSH-RSA密钥。
Router(config)#ip ssh pubkey-chain
配置SSH用户名。
Router(conf-ssh-pubkey)#username
指定远程对等体的RSA公钥。
Router(conf-ssh-pubkey-user)#key-string
指定SSH密钥类型和版本。(可选)
Router(conf-ssh-pubkey-data)#key-hash ssh-rsa
退出当前模式并返回特权EXEC模式。
Router(conf-ssh-pubkey-data)#end
注:有关详细信息,请参阅Secure Shell Version 2 Support。
如果需要进行出站 SSH 终端线路身份验证,可以配置并测试通过 Carter(充当 Philly 的通信服务器)进行出站反向 Telnet 的 SSH。
ip ssh port 2001 rotary 1 line 1 16 no exec rotary 1 transport input ssh exec-timeout 0 0 modem In Out Stopbits 1
如果 Philly 连接到 Carter 的端口 2,则可以在 Reed 中使用以下命令配置通过 Carter 以 SSH 方式登录 Philly:
SSH V1:
ssh -c 3des -p 2002 10.13.1.99
SSH V2:
ssh -v 2 -c aes256-cbc -m hmac-sha1-160 -p 2002 10.31.1.99
在 Solaris 上,可以使用以下命令:
ssh -c 3des -p 2002 -x -v 10.13.1.99
您需要限制与特定子网的SSH连接,在该子网外部IP的所有其他SSH尝试都应该被丢弃。
您可以使用以下步骤来完成相同的操作:
定义允许来自该特定子网的流量的访问列表。
使用access-class限制对VTY线路接口的访问。
这是一个配置示例。在本示例中,仅允许对10.10.10.0 255.255.255.0子网的SSH访问,拒绝其他任何访问。
Router(config)#access-list 23 permit 10.10.10.0 0.0.0.255 Router(config)#line vty 5 15 Router(config-line)#transport input ssh Router(config-line)#access-class 23 in Router(config-line)#exit
注意:锁定SSH访问的相同步骤也适用于交换机平台。
配置 SSH V1:
carter(config)#ip ssh version 1
配置 SSH V2:
carter(config)#ip ssh version 2
配置 SSH V1 和 SSH V2:
carter(config)#no ip ssh version
注意:使用SSHv1时,您会收到以下错误消息:
%SCHED-3-THRASHING: Process thrashing on watched message event.
注意:针对此问题,已提交Cisco Bug ID CSCsu51740(仅注册客户)。解决方法是配置SSHv2。
使用 Telnet 和不同版本的 SSH 连接时,banner 命令的输出会有所不同。下表说明了不同的 banner 命令选项如何处理各种类型的连接。
Banner 命令选项 | Telnet | 仅 SSH V1 | SSH V1 和 SSH V2 | 仅 SSH V2 |
---|---|---|---|---|
banner login | 在登录设备之前显示。 | 不显示。 | 在登录设备之前显示。 | 在登录设备之前显示。 |
banner motd | 在登录设备之前显示。 | 在登录设备之后显示。 | 在登录设备之后显示。 | 在登录设备之后显示。 |
banner exec | 在登录设备之后显示。 | 在登录设备之后显示。 | 在登录设备之后显示。 | 在登录设备之后显示。 |
SSH 版本 2 支持登录标语。如果 SSH 客户端在向 Cisco 路由器发起 SSH 会话时发送用户名,则会显示登录标语。例如,当使用Secure Shell SSH 客户端时,会显示登录标语。使用 PuTTY SSH 客户端时,不会显示登录标语。这是因为默认情况下Secure Shell SSH 发送用户名,而 PuTTY 不发送用户名。
Secure Shell SSH 客户端需要用户名来发起到启用了 SSH 的设备的连接。如果不输入主机名和用户名,则不会启用 Connect 按钮。以下屏幕截图表明当Secure Shell SSH 连接到路由器时会显示登录标语。然后,会显示登录标语口令提示。
PuTTY 客户端不需要用户名来发起到路由器的 SSH 连接。以下屏幕截图表明当 PuTTY 客户端连接到路由器时会提示输入用户名和口令。它不显示登录标语。
此屏幕截图显示,当PuTTY配置为将用户名发送到路由器时,会显示登录标语。
在发出此处说明和演示的 debug 命令之前,请参阅有关 Debug 命令的重要信息。命令输出解释程序工具(仅限注册用户)支持某些 show 命令,使用此工具可以查看对 show 命令输出的分析。
debug ip sshâ 显示SSH的调试消息。
show sshâ 显示SSH服务器连接的状态。
carter#show ssh Connection Version Encryption State Username 0 1.5 DES Session started cisco
show ip ssh — 显示SSH的版本和配置数据。
版本 1 连接,没有版本 2
carter#show ip ssh SSH Enabled - version 1.5 Authentication timeout: 60 secs; Authentication retries: 2
版本 2 连接,没有版本 1
carter#show ip ssh SSH Enabled - version 2.0 Authentication timeout: 120 secs; Authentication retries: 3
版本 1 和版本 2 连接
carter#show ip ssh SSH Enabled - version 1.99 Authentication timeout: 120 secs; Authentication retries: 3
注意:由于空间考虑因素,这些良好的调试输出中有些包含在多行中。
00:23:20: SSH0: starting SSH control process 00:23:20: SSH0: sent protocol version id SSH-1.5-Cisco-1.25 00:23:20: SSH0: protocol version id is - SSH-1.5-1.2.26 00:23:20: SSH0: SSH_SMSG_PUBLIC_KEY msg 00:23:21: SSH0: SSH_CMSG_SESSION_KEY msg - length 112, type 0x03 00:23:21: SSH: RSA decrypt started 00:23:21: SSH: RSA decrypt finished 00:23:21: SSH: RSA decrypt started 00:23:21: SSH: RSA decrypt finished 00:23:21: SSH0: sending encryption confirmation 00:23:21: SSH0: keys exchanged and encryption on 00:23:21: SSH0: SSH_CMSG_USER message received 00:23:21: SSH0: authentication request for userid cisco 00:23:21: SSH0: SSH_SMSG_FAILURE message sent 00:23:23: SSH0: SSH_CMSG_AUTH_PASSWORD message received 00:23:23: SSH0: authentication successful for cisco 00:23:23: SSH0: requesting TTY 00:23:23: SSH0: setting TTY - requested: length 24, width 80; set: length 24, width 80 00:23:23: SSH0: invalid request - 0x22 00:23:23: SSH0: SSH_CMSG_EXEC_SHELL message received 00:23:23: SSH0: starting shell for vty
注意:此输出在Solaris计算机上捕获。
rtp-evergreen.rtp.cisco.com#ssh -c 3des -l cisco -v 10.31.1.99 rtp-evergreen#/opt/CISssh/bin/ssh -c 3des -l cisco -v 10.13.1.99 SSH Version 1.2.26 [sparc-sun-solaris2.5.1], protocol version 1.5. Compiled with RSAREF. rtp-evergreen: Reading configuration data /opt/CISssh/etc/ssh_config rtp-evergreen: ssh_connect: getuid 0 geteuid 0 anon 0 rtp-evergreen: Allocated local port 1023. rtp-evergreen: Connecting to 10.13.1.99 port 22. rtp-evergreen: Connection established. rtp-evergreen: Remote protocol version 1.5, remote software version Cisco-1.25 rtp-evergreen: Waiting for server public key. rtp-evergreen: Received server public key (768 bits) and host key (512 bits). rtp-evergreen: Host '10.13.1.99' is known and matches the host key. rtp-evergreen: Initializing random; seed file //.ssh/random_seed rtp-evergreen: Encryption type: 3des rtp-evergreen: Sent encrypted session key. rtp-evergreen: Installing crc compensation attack detector. rtp-evergreen: Received encrypted confirmation. rtp-evergreen: Doing password authentication. cisco@10.13.1.99's password: rtp-evergreen: Requesting pty. rtp-evergreen: Failed to get local xauth data. rtp-evergreen: Requesting X11 forwarding with authentication spoofing. Warning: Remote host denied X11 forwarding, perhaps xauth program could not be run on the server side. rtp-evergreen: Requesting shell. rtp-evergreen: Entering interactive session.
以下部分列出了几种不正确的配置导致的调试输出示例。
rtp-evergreen#/opt/CISssh/bin/ssh -c des -l cisco -v 10.13.1.99 SSH Version 1.2.26 [sparc-sun-solaris2.5.1], protocol version 1.5. Compiled with RSAREF. rtp-evergreen: Reading configuration data /opt/CISssh/etc/ssh_config rtp-evergreen: ssh_connect: getuid 0 geteuid 0 anon 0 rtp-evergreen: Allocated local port 1023. rtp-evergreen: Connecting to 10.13.1.99 port 22. rtp-evergreen: Connection established. rtp-evergreen: Remote protocol version 1.5, remote software version Cisco-1.25 rtp-evergreen: Waiting for server public key. rtp-evergreen: Received server public key (768 bits) and host key (512 bits). rtp-evergreen: Host '10.13.1.99' is known and matches the host key. rtp-evergreen: Initializing random; seed file //.ssh/random_seed rtp-evergreen: Encryption type: des rtp-evergreen: Sent encrypted session key. cipher_set_key: unknown cipher: 2
00:24:41: SSH0: Session terminated normally 00:24:55: SSH0: starting SSH control process 00:24:55: SSH0: sent protocol version id SSH-1.5-Cisco-1.25 00:24:55: SSH0: protocol version id is - SSH-1.5-1.2.26 00:24:55: SSH0: SSH_SMSG_PUBLIC_KEY msg 00:24:55: SSH0: SSH_CMSG_SESSION_KEY msg - length 112, type 0x03 00:24:55: SSH: RSA decrypt started 00:24:56: SSH: RSA decrypt finished 00:24:56: SSH: RSA decrypt started 00:24:56: SSH: RSA decrypt finished 00:24:56: SSH0: sending encryption confirmation 00:24:56: SSH0: Session disconnected - error 0x07
00:26:51: SSH0: starting SSH control process 00:26:51: SSH0: sent protocol version id SSH-1.5-Cisco-1.25 00:26:52: SSH0: protocol version id is - SSH-1.5-1.2.26 00:26:52: SSH0: SSH_SMSG_PUBLIC_KEY msg 00:26:52: SSH0: SSH_CMSG_SESSION_KEY msg - length 112, type 0x03 00:26:52: SSH: RSA decrypt started 00:26:52: SSH: RSA decrypt finished 00:26:52: SSH: RSA decrypt started 00:26:52: SSH: RSA decrypt finished 00:26:52: SSH0: sending encryption confirmation 00:26:52: SSH0: keys exchanged and encryption on 00:26:52: SSH0: SSH_CMSG_USER message received 00:26:52: SSH0: authentication request for userid cisco 00:26:52: SSH0: SSH_SMSG_FAILURE message sent 00:26:54: SSH0: SSH_CMSG_AUTH_PASSWORD message received 00:26:54: SSH0: password authentication failed for cisco 00:26:54: SSH0: SSH_SMSG_FAILURE message sent 00:26:54: SSH0: authentication failed for cisco (code=7) 00:26:54: SSH0: Session disconnected - error 0x07
00:39:26: SSH0: starting SSH control process 00:39:26: SSH0: sent protocol version id SSH-1.5-Cisco-1.25 00:39:26: SSH0: protocol version id is - SSH-1.5-W1.0 00:39:26: SSH0: SSH_SMSG_PUBLIC_KEY msg 00:39:26: SSH0: SSH_CMSG_SESSION_KEY msg - length 112, type 0x03 00:39:26: SSH0: Session disconnected - error 0x20
如果收到此错误消息,则可能是由于域名或主机名的任何更改而导致的。要解决此问题,请尝试以下解决方法。
将RSA密钥归零并重新生成密钥。
crypto key zeroize rsa label key_name crypto key generate rsa label key_name modulus key_size
如果以前的解决方法不起作用,请尝试以下步骤:
将所有RSA密钥归零。
重新启动设备。
为SSH创建新的标记密钥。
已提交Cisco Bug ID CSCsa83601(仅注册客户)以解决此行为。
如果 SSH 配置命令被作为非法命令拒绝,则说明您没有成功地为路由器生成 RSA 密钥对。请确保指定了主机名和域。然后,使用 crypto key generate rsa 命令生成 RSA 密钥对并启用 SSH 服务器。
配置 RSA 密钥对时,可能会遇到下列错误消息:
No hostname specified
此时,必须使用 hostname 全局配置命令为路由器配置一个主机名。
No domain specified
此时,必须使用 ip domain-name 全局配置命令为路由器配置一个主机域。
允许的 SSH 连接数受为路由器配置的 vty 的最大数目限制。每个 SSH 连接使用一个 vty 资源。
SSH 使用本地安全协议或通过路由器上的 AAA 配置的安全协议进行用户身份验证。配置 AAA 时,必须通过在全局配置模式下应用关键字来禁用控制台上的 AAA,确保控制台不在 AAA 系统下运行。
No SSH server connections running.
carter#show ssh %No SSHv2 server connections running. %No SSHv1 server connections running.
此输出表明 SSH 服务器被禁用或未正确启用。如果已经配置了 SSH,建议您在设备中重新配置 SSH 服务器。完成下列步骤在设备上重新配置 SSH 服务器。
删除 RSA 密钥对。在删除 RSA 密钥对后,SSH 服务器将自动禁用。
carter(config)#crypto key zeroize rsa
注意:启用SSH v2时,生成至少具有768位大小的密钥对非常重要。
注意:保存配置后,此命令无法撤消,并且RSA密钥被删除后,您无法使用证书或CA或参与与其他IP安全(IPSec)对等体的证书交换,除非您通过重新生成RSA密钥、获取CA证书并再次请求您自己的证书来重新配置CA互操作性。请参阅crypto key zeroize -Cisco IOS安全命令参考,版本12.3,以了解有关此命令的详细信息。
重新配置设备的主机名和域名。
carter(config)#hostname hostname carter(config)#ip domain-name domainname
为路由器生成 RSA 密钥对,这将自动启用 SSH。
carter(config)#crypto key generate rsa
有关此命令用法的详细信息,请参阅 crypto key generate rsa - Cisco IOS 安全命令参考 12.3 版。
注意:您可以收到SSH2 0:Unexpected mesg type received,这是因为路由器无法理解接收到的数据包。要解决此问题,请在生成用于 SSH 的 RSA 密钥时增加密钥长度。
配置 SSH 服务器。要为SSH服务器启用和配置Cisco路由器/交换机,可以配置SSH参数。如果不配置 SSH 参数,将使用默认值。
ip ssh {[timeout seconds] | [authentication-retries integer]}carter(config)# ip ssh
有关此命令用法的详细信息,请参阅 ip ssh - Cisco IOS 安全命令参考 12.3 版。
版本 | 发布日期 | 备注 |
---|---|---|
1.0 |
10-Sep-2001 |
初始版本 |