跳转至主要内容

很多地方都强制要求你停止使用Telnet连接到系统,而使用SSH。其理由是更大的安全性。当你使用Telnet登录时,你的密码以及任何其他数据都会以清晰的文本发送。任何有网络分析仪的人都可以读取你发送的内容。而SSH则是将所有数据加密,使其无法读取。假设Telnet和SSH守护进程呈现出一种可互换的用户体验;这是不正确的。

首先,有许多不同的SSH和Telnet客户端。这些客户端有不同的用户界面,可能使用不同的终端类型。即使使用相同的终端类型,它们也可能表现不同,因为它们是在模拟终端,而模拟并不完美。但是,即使不考虑客户端软件的差异,连接到Telnet守护进程(telnetd或telnet_msd)的会话和连接到SSH守护进程的会话之间也有一些细微和不细微的差异。还有一些错误,我将会介绍这些错误。请记住,我使用的是Internet Security Pack (ISP)2.1.0k版本的SSH守护进程。这是我写这篇文章时的最新版本。

用户名称:

在你登录之前,Telnet和SSH处理你的用户名的方式是不同的。Telnet守护进程将允许你用你的用户名的任何独特的变化来登录,而且这个名字是不区分大小写的。给定用户名Noah_Davids,当使用Telnet时,我可以以Noah_D、noah_d、NoAh_D或NoAh_DaViDs的身份登录,但在SSH中唯一能用的是Noah_Davids。我的nd的别名也是这样的。在Telnet中,我可以使用nd、ND或nD,但在SSH中只有nd能用。

集团名称:

Telnet连接时出现的登录提示允许我指定一个 组名

telnet 164.152.77.217
试图...
连接到164.152.77.217。
转义字符是"^]"。

OpenVOS 17.1.0ax版本,模块%phx_vos#m17。
请登录 15:24:14
登录 nd。SysAdmin
密码?[在此输入密码]

Noah_Davids.SysAdmin于12-12-12 15:24:55 mst.登录%phx_vos#m17。
图1 - 使用组名Telnet登录

但SSH协议只允许输入用户名。如果我加入组名,它将被视为用户名的一部分,登录失败。

>system>openssl>bin>ssh nd.SysAdmin@164.152.77.217

nd.@164.152.77.217的密码:[在此输入密码]SysAdmin@164.152.77.217的密码:[在此输入密码] 。

权限拒绝,请重试。
nd.SysAdmin@164.152.77.217's password:
图2 - 用组名登录SSH

一旦你登录,你可以用一个子登录来改变你的组(但请看下面关于ssl-403的部分,以了解当前的限制)。

密码差异。

Telnet和SSH连接在密码处理上最大的区别是,SSH不需要密码来进行验证。你可以设置一个公钥/私钥对,跳过整个密码输入步骤。关于如何设置,请看Setting upStratus STCP SSH to use public key authentication的说明。

如果你使用的是密码,就必须要处理一些不同的问题。首先,密码过期的处理方式不同。使用Telnet,当你的密码即将过期时,登录提示会警告你,并允许你更改密码。

telnet 164.152.77.217
试图...
连接到164.152.77.217。
转义字符是"^]"。

OpenVOS 17.1.0ax版本,模块%phx_vos#m17。
请登录 14:04:40
登录 nd
密码?[此处输入当前密码]

您的密码将在5天后失效。
新密码(第一次输入)?
图3 - Telnet连接密码到期警告/提示

SSH会警告你,但你没有选择更改密码。你必须使用change_password命令使你的密码无效,这将迫使你在下次登录时更改密码。

ssh nd@164.152.77.217
nd@164.152.77.217的密码:[此处输入当前密码]

您的密码将在5天后失效。
Noah_Davids.CAC于13-01-09 13:06:35 mdt登录%phx_vos#m17。

欢迎你的到来

准备好了 13: 06: 35
更改密码
您的密码不再有效。您必须在下次登录时更改密码。
准备就绪 13:06:49
图4 - SSH连接密码到期警告
和change_password命令

一旦你的密码过期(或者你用change_password命令使其无效),你会被提示更改密码。与Telnet不同的是,这并不是可有可无的,你必须在此时更改你的密码。更改密码后,你会自动注销,必须重新登录。

ssh nd@164.152.77.217
nd@164.152.77.217 的密码。

警告:您的密码已过期。
您必须立即更改密码并重新登录!
当前密码?[此处输入当前密码]

新密码(第一次输入)?[在此输入新密码]

新密码(第二次输入)?[在此输入新密码]

164.152.77.217的连接已关闭。
图5 - 在SSH连接期间更改密码

另一个区别是,SSH连接不支持挑战-响应密码,而Telnet连接支持。

子系统:

当您第一次用Telnet连接到一个模块时,登录命令允许您选择一个新的模块。 子系统

OpenVOS版本17.1.0ax,模块%phx_vos#m17。
请登录 11:23:40
登录 -表格 -使用
 --------------------------------- login -------------------------------
 user_name:
 -privileged: as registered
 -password:
 -password: -change_password: no
 -优先级: -home_dir:
 -home_dir:
 -module:
 -子系统。
图6 - Telnet连接允许你指定一个子系统名称

ssh协议没有指定子系统名称的机制。如果在注册数据库条目中设置了must_use_subsystem标志,那么就会自动使用注册条目中指定的第一个子系统。如果该位没有设置,则不使用子系统。(请注意,在ISP 2.1.0j发布之前,即使没有设置must_use_subsystem位,第一个子系统也会被使用。)虽然在实际登录前,登录命令的参数中包含了指定子系统的方法(见图6),但一旦你登录后,该选项就不再可用了(见图7)。

登录 -表格 -使用
 --------------------------------- login -------------------------------
 集团名称:CAC
 -特权:是
 -优先级:
 -密码:
 -模块:
图7 - 子登录命令行参数

登录后进入子系统的唯一方法是Telnet回系统,再登录。

telnet 127.0.0.1
正在尝试...
连接到127.0.0.1。
转义字符是'^]'。

OpenVOS 17.1.0ax版本,模块%phx_vos#m17。
请登录 11:37:34
登录 nd -subsystem test_ss
密码?        

Noah_Davids.CAC于12-12-13 11:37:49 mst登录%phx_vos#m17。
这是测试子系统

11:37:49
图8 - Telnet到环回地址,再登录进入子系统。

 

访问控制;

Telnet和SSH连接都支持TCP Wrappers,允许你根据IP地址限制访问,但是Telnet守护进程的默认情况是不启用TCP Wrappers,你必须使用-tcpwrapper_check控制参数明确启用它。而在SSH守护进程中,TCP Wrappers是默认启用的,没有办法禁用它。你可以通过在TCP Wrappers hosts.allow配置文件中允许所有SSH连接来有效地禁用它。

telnetd -form -usage
 ------------------------------- telnetd ------------------------------
 -service_file。     服务文件: >system>stcp>telnetservice。
 -tcpwrapper_check: no
 -数字:是
图9 - 在telnetd守护进程中启用TCP封装器

 

telnet_msd -form -usage
 ------------------------------ telnet_msd ----------------------------
 -network_port:     24
 -max_sessions。     28
 -误差严重程度:2
 -separate_log: yes
 -log_dir:          >system>stcp>logs。
 -vterm_starname: telnet*。
 -vterm_login: yes
 -vterm_slave_id:
 -extension: 133
 -force_edit: yes
 -EC_十进制值:8
 -EL_decimal_value: 21。
 -tcpwrapper_check: no
 -数字:无
图10 - 在telnet_msd守护进程中启用TCP Wrappers。

sshd守护进程也支持sshd_config文件中的选项,允许你指定允许使用ssh访问的用户或组(AllowUsers和AllowGroups指令)或拒绝使用ssh访问的用户或组(DenyUsers和DenyGroups指令)。这些指令允许你指定用户名,或源域或组合。可以允许从corp.stratus.com访问noah_davids,但拒绝从az.stratus.com访问。

AllowUsers *@*.stratus.com
DenyUsers *@*az.stratus.com
图11 - sshd_config中的AllowUsers和DenyUsers指令示例。
>system>openssl>bin>ssh nd@164.152.77.217
nd@164.152.77.217 的密码。

允许被拒绝,请重试。
nd@164.152.77.217 的密码。
图12 - 由于DenyUsers指令,从phxtest-m15.az.stratus.com登录被拒绝。

 

命令环境。

一旦登录Telnet连接,就会呈现出标准的VOS命令环境。SSH允许管理员指定标准命令环境或bash shell环境。这是根据端口号来完成的。

d sshservices

%phx_vos#m17_mas>opt>openssl>etc>sshservices 12-12-13 12:31:31 mst

ssh "window_term" "" "login" 1 1 s$pt_log.m16
ssh2200   "window_term" "-壳"   "bash" 1 1 s$pt_log.m16
图13 - sshservices文件,22端口是标准的VOS命令行。
2200端口是bash shell
>system>openssl>bin>ssh nd@164.152.77.217 -p 2200
nd@164.152.77.217 的密码。

欢迎你的到来

Sh-2.05美元
图14 - 使用2200端口连接SSH并获取bash shell

 

环境变量。

默认情况下,Telnet连接只设置了6个环境变量,而SSH连接则设置了12个。

环境
HOME=/SYSAdmin/Noah_Davids
LOGNAME=root
PATH=.:/system/command_library:/system/applications_library:/system/maint_librar。
+y:/system/nio/command_library:/system/tools_library:/opt/apache/bin:/opt/libxml。
+2/bin:/opt/php/bin:/opt/openssl/bin:/opt/mysql/bin:/system/stcp/command_library。
+:/system.17.1/gnu_library/bin
VOS_INCLUDE_PATH=.:/opt/apache/include:/opt/openssl/include:/opt/mysql/include/m。
+ysql:/system/stcp/include_library/compat:/system/include_library。
VOS_OBJECT_PATH=.:/opt/apache/lib:/opt/openssl/lib:/opt/mysql/lib/mysql:/system/。
+stcp/object_library/complib:/system/posix_object_library/thread:/system/posix_object_library。
+object_library:/system/c_object_library:/system/object_library。
TERM=vt100
图15 - Telnet连接中设置的环境变量

 

环境
HOME=/SYSAdmin/Noah_Davids
PATH=.:/system/command_library:/system/applications_library:/system/maint_librar。
+y:/system/nio/command_library:/system/tools_library:/opt/apache/bin:/opt/libxml。
+2/bin:/opt/php/bin:/opt/openssl/bin:/opt/mysql/bin:/system/stcp/command_library。
+:/system.17.1/gnu_library/bin
VOS_INCLUDE_PATH=.:/opt/apache/include:/opt/openssl/include:/opt/mysql/include/m。
+ysql:/system/stcp/include_library/compat:/system/include_library。
VOS_OBJECT_PATH=.:/opt/apache/lib:/opt/openssl/lib:/opt/mysql/lib/mysql:/system/。
+stcp/object_library/complib:/system/posix_object_library/thread:/system/posix_object_library。
+object_library:/system/c_object_library:/system/object_library。
TERM=vt100
TZ=mst+07:00:00
USER=Noah_Davids
LOGNAME=Noah_Davids(诺亚)
MAIL=/var/spool/mail/Noah_Davids。
SHELL=/bin/sh
SSH_CONNECTION=164.152.77.34 49573 164.152.77.217 22。
SSH_TTY=#s$pt_log.m16_3
图16 - 在SSH连接中设置的环境变量

 

设备类型:

最后,这其实不是Telnet和SSH的区别,而是telnetd和sshd守护进程和telnet_msd守护进程的区别。telnetd和sshd都使用window_term设备,而telnet_msd使用vterm设备。vterms和window_term设备在处理命令行中的一些功能键(如cancel)和处理原始屏幕输出的方式上有一些不同。一些创建了自己的窗体并且没有更新为使用新的s$control OP_CODES的应用程序在使用window_term设备时不能正确地呈现这些窗体。处理这些应用程序的第二种最好的方法是使用SSH隧道连接到系统,然后将隧道配置为连接到telnet_msd守护进程。当然,处理应用程序的最好方法是更新它,使其使用新的OP_CODES。

 

除了以上Telnet和SSH固有的差异外,还有一些bug会在未来的版本中修复。

ssl-403可用组。

当使用Telnet连接时,所有在你的注册条目中指定的组都可用于子登录,但使用ssh时只有前5个组可用。

鉴于我注册的组,CAC,SysAdmin,Group_3,Group_4,Group_5,Group_6。我可以通过Telnet连接使用任何一个组进行子登录。

telnet 164.152.77.217
试图...
连接到164.152.77.217。
转义字符是"^]"。

OpenVOS 17.1.0ax版本,模块%phx_vos#m17。
请登录 15:38:02
登录 nd
密码?[此处输入当前密码]

Noah_Davids.CAC于12-12-12 15:38:08 mst登录%phx_vos#m17。

登录组_5

Noah_Davids.Group_5 于 12-12-12 15:39:39 mst.登录 %phx_vos#m17。
准备就绪 15:39:39
登出

登录组_6

Noah_Davids.Group_6 于 12-12-12 15:40:13 mst.登录 %phx_vos#m17。
准备就绪 15:40:13
图17 - 使用Telnet连接的子登录。

然而,在使用ssh时,当我尝试使用Group_6时,我得到一个错误。

>system>openssl>bin>ssh nd@164.152.77.217
nd@164.152.77.217 的密码。

Noah_Davids.CAC于12-12-12 15:41:02 mst.登录%phx_vos#m17。
准备就绪 15:41:02

登录组_5

Noah_Davids.Group_5 于 12-12-12 15:41:24 mst.登录 %phx_vos#m17。
准备就绪 15:41:24
登出

登录组_6
登录。参数中的无效格式。group_name不允许使用group_6。
准备 15:41:59
图18 - 使用SSH连接的子登录。

 

ssl-418 - 子进程级。

通过Telnet登录的子进程级别为0,而通过SSH登录的子进程级别为3。

telnet 164.152.77.217
试图...
连接到164.152.77.217。
转义字符是"^]"。

OpenVOS 17.1.0ax版本,模块%phx_vos#m17。
请登录 14:15:34
登录 nd
密码?[此处输入当前密码]

Noah_Davids.CAC于12-12-13 14:15:39 mst.登录%phx_vos#m17。
准备就绪 14:15:39
display_line (process_info sub_process_level)
0 
准备好了 14: 15: 49
图19 - Telnet连接中设置的子进程级别

 

>system>openssl>bin>ssh nd@164.152.77.217
nd@164.152.77.217 的密码:[此处输入当前密码]

Noah_Davids.CAC于12-12-13 14:12:23 mst.登录%phx_vos#m17。
准备就绪 14:12:23
display_line (process_info sub_process_level)
3 
准备好了 14: 12: 37
图20 - SSH连接中设置的子进程级别

2013年1月14日更新。结果发现这是一个功能,而不是一个错误。当start_process启动监听进程时,sshd进程第一次被分叉,第二次是在sshd接受连接时,第三次是在创建用户登录进程时。Telnet使用不同的机制来启动用户进程,不会导致任何分叉进程。

时区问题。

最后我想说的是,在夏令时和标准时间之间的改变,或者更普遍的只是改变时区时,出现了一些相关问题。通过SSH登录的会话不能反映新的默认值。这些问题应该在最新的版本(2.1.0k)中都得到了解决。

© 2020 Stratus Technologies.