一、前言

默认情况下管理本地主机都是通过系统自带的mingetty程序,其可以启动一个login程序进行对用户进行认证,但mingetty程序没有负责远程管理用户登录的能力。而在机房中可能存在成千上万的主机,又不可能给每台主机配置显示器、键盘实现本地连接,所以要想对服务器进行管理的话,就需要服务器在本地启动一个服务程序,这个程序能够把对于本地的很多基于终端方式的请求映射到另一个主机的客户端程序上,二者之间使用某种特定协议来交换数据报文。早期的时候这种登录方式是使用telnet实现的,服务器端运行telnet server,客户端运行telnet client,二者通过telnet协议互相通信,telnet使用23/tcp端口。不过,telnet协议诞生的很早,那个时候懂得计算机的人都不多,更何况懂得网络了,所以设计时力求简单,其没有任何安全加密功能。对于现在的网络环境,已经相当不安全了。后来出现的ssh协议,它不但解决了远程登录安全加密功能,还解决了当初unix系统上的远程复制功能

二、openssh

1. ssh协议

ssh(Secure SHell protocol)是一个协议,而ssh协议的开源实现程序叫做openssl,监听在tcp的22端口,主要提供安全的远程登录。其还有一个在嵌入式环境比较出名实现叫做dropbear

2. 工作方式

  • 第一步:安全认证,在这一步中服务器会用自己的私钥加密一段数据发送给客户端,使得客户端认证服务器端,防止某个服务器冒充你的服务器,但是在实际的使用中,如果你第一次访问这个服务器,一般本地都没有服务器的公钥,那么就会弹出一段客户端的公钥信息让客户自己确认是否认可
  • 第二步:如果客户端认可这个公钥,那么就基于这个公钥完成秘钥交换、加密算法协商
  • 第三步:服务器端发送登录提示符至客户端,使得双方开始加密通信

3. ssh版本

v1版本:消息认证协议基于CRC-32做MAC(消息认证码),这个版本容易受到中间人攻击(man-in-middle)
v2版本:基于双方主机协商选择安全的MAC方式做消息摘要,基于DH算法做秘钥交换,基于RSA或DSA算法实现身份认证

4. 登录认证方式

  • password:基于账号密码的方式完成登录认证
  • 秘钥登录:在ssh登录认证过程中,互相发送的信息是加密传送的。虽然是加密传送的,但是用户账号密码还是在网络上传输了,别人还是可以拿到你的用户及密码数据包,安全风险虽然很低但也存在安全风险。于是就出现了秘钥认证方式,它需要客户端事先生成一对非对称秘钥,然后把公钥部分放置在需要登录用户家目录的一个文件中,以后这个服务端会使用这个公钥加密一段数据让客户端解密完成认证,这样登录的密码就不会在网络上传输了

5. 配置文件

  • 客户端配置文件:/etc/ssh/ssh_config
  • 服务器端:/etc/ssh/sshd_config
Port:端口
AddressFamliy:指定IPV4\6选择
ListenAddress:监听地址
KeyRegenerationInterval:会话的对称加密秘钥的有效时间
ServerKeyBits:主机秘钥长度
SysLogFacility:记录日志的方式
LoginGraceTime:登录等待时间
PermitRootLogin:是否允许root远程登录
StrictModes:是否使用严格检查模式
MaxAuthTries:最大尝试次数
MaxSessions:最大登录会话
AuthorizedKeysFile:公钥文件存放位置
PasswordAuthentication:是否允许口令认证
ChallengeResponseAuthentication:挑战式握手认证
Kerberos options:实现第三方集中统一认证的参数,用于大规模管理统一认证时使用
GSSAPIAuthentication:要不要支持GSSAPI认证
GSSAPICleanupCredentials
X11Forwarding:是否允许X11转发
Subsystem:是否支持sftp
UseDNS:DNS反解

6. 命令用法

(1)远程登录

命令格式:ssh [user@]hostname|IP ['COMMAND']

-l login_user:指明登录用户
-p # :指明端口
'Command':在目标主机上运行这个命令后直接退出

(2)远程复制

命令格式:scp [options] SRC… DEST

-r:递归复制
-p:保持原文件的属性信息
-q:静默模式
-P:端口

(3)秘钥认证

① 客户端生成秘钥对

ssh-keygen -t rsa:键入命令后,首先会问用户希望保存在哪个目录中,默认为当前用户家目录的.ssh/id_rsa,接着会询问用户是否对私钥进行加密,如果都采用默认一路按回车即可,默认生成长度为2048,如不满足需求可以使用-b #指定长度

② 将公钥传输至对应用户的家目录

ssh-copy-id -i .ssh/id_rsa.pub user@machine:将用户的公钥文件发送至远程主机的用户家目录下,你希望通过无秘钥方式登录哪个用户,就在此处指定哪个用户。需要注意的是,你在本地服务器中使用张三用户生成的秘钥对,那么也就将你的张三用户和远程的那个用户关联了,你用本地服务器的其他用户想使用无秘钥登录,还是需要重新进行秘钥传输的

(4)远程ftp

命令格式:sftp user@ip,进入后会显示sftp>登录符,使用help获取帮助

7. 安全注意事项

  • 不要使用默认端口
  • 禁止使用ssh version 1
  • 限制可登陆用户:通过AllowUsers、AllowGroups实现
  • 设定空闲会话超时时长
  • 利用防火墙设置ssh访问策略
  • 仅监听特定的IP地址
  • 基于口令认证时,使用强密码策略
  • 尽可能使用基于秘钥的验证
  • 禁止使用空密码
  • 禁止root用户直接登录
  • 限制ssh的访问频率和并发在线数量
  • 做好日志,经常做分析

三、telnet

1. 安装包

  • telnet-server:服务器程序包
  • telnet:客户端程序包

2. 超级守护进程和瞬时守护进程

有些服务可能访问量极低,但是为了能够随时响应就需要一直运行着并且监听着一个端口,这种情况会带来资源浪费。于是就出现了超级守护进程,超级守护进程可以帮助那些访问量较少的进程监听端口,一旦有人访问就立即将其启动起来响应请求,而被唤醒的就叫做瞬时守护进程

3. telnet启动方式

  • 使用 chkconfig telnet on
  • 执行 service xinetd restart
    telnet就会自动被xinetd这个超级守护进程管理