5.1 Linux SSH 服务

1、Telnet

传统的远程连接管理基本上都采用telnet,但是telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的(只能采用口令验证),就是很容易受到中间人攻击。

中间人攻击就是中间人冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。这样服务器和你之间的数据传送会被中间人做手脚,会出现很严重的安全问题。

2、SSH 简介

SSH为Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 是建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

SSH是标准的网络协议,可用于大多数UNIX操作系统,能够实现字符界面的远程登录管理,它默认使用22号端口,采用密文的形式在网络中传输数据,它将客户端与服务端之间的消息通过加密保护起来,这样就无法被窃取或篡改了。

SSH 采用了多种认证加密方式 , 解决了传输中数据加密和身份认证等问题 , 比较有效的防止网络嗅探与IP欺骗等问题。相对于通过明文传输的Telnet,具有更高的安全性。

3、SSH 服务认证类型

SSH提供了口令和密钥两种用户验证方式,这两者都是通过密文传输数据。

a. 口令认证

基于口令的安全验证就是使用服务器中系统帐号和密码进行验证,只要知道服务器的SSH连接帐号、密码、服务器IP和端口号,就可以通过ssh客户端登录到这台远程主机。要求设置密码时具有足够的复杂度才能提高安全性。

口令认证会受到中间人攻击

b. 秘钥认证

密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数,多用于网络中,用来保护个人隐私等问题,维护网络使用安全。一般来说密钥加密的方法有三种类型:对称加密、非对称加密和Hash加密。

对称加密:只使用了一个密钥进行加密解密,也可以叫做单密钥加密。它对密钥本身没有特殊的要求,通信双方只要有一个相同的密钥就行,一个用户把自己需要发送的数据通过密钥加密成混乱的信息,接受方使用相同的密钥把接受到的信息还原成原始数据,这个方法可以在极短的时间内对大量信息进行加密解密。但是如果密钥在传输过程中就被截获,那么以后的加密过程就形同虚设。这个方法的优点是使用同一个密钥节省了加密解密所需的时间,缺点是无法保证密钥的安全性。

非对称加密:在加密和解密中使用了一对密钥,一个是公用密钥,它对外公开发布,另一个是私有密钥,由用户自己保存。从理论上讲,这种加密方式只要是用户的私有密钥没有丢失或者被窃,那么他们之间加密的信息是绝对不会被破解的。但是它的缺点也非常明显,就是加密速度非常缓慢。由于要进行大量的数学运算,即使加密少量的信息也需要花费大量的时间。

Hash加密:是通过数学运算,把不同长度的信息转化到128位编码中,形成Hash值,通过比较这个数值是否正确,来确定通信双方的合法性。这也可以说是数字签名,在数据传输后,可以通过比较Hash值来判断信息途中是否被截获修改,是否由合法的发送人发送或者合法的接收人接收等。用这种方法,可以防止密钥丢失的问题,具有不可抵赖性。很适用于商业信息的传递。

基于密钥认证

  • 1、为客户端创建一对密钥(公钥和私钥)
  • 2、把公钥放在需要访问的SSH服务器上,私钥存放在ssh客户端。
  • 3、客户端远程连接ssh服务器时,发送TCP连接请求,使用密钥进行安全验证。
  • 4、服务器收到请求之后,服务器查看自己的./ssh/authorized_keys中是否有用户的公钥。如果有,服务器使用用户公钥加密一段随机字符串,并发送给客户端。
  • 5、客户端使用本地的私钥解密后把解密字符串发送给服务器。
  • 6、服务器对比字符串是否一致,一致则允许登录。
4、SSH 服务安装

在RHEL或CENTOS系统中,OPENSSH服务由openssh、openssh-server、openssh-clients等软件包提供(默认已经安装)。

yum list all | grep "^openssh"

a. openssh 配置信息

官方站点

http://www.openssh.com

服务端主程序

/usr/sbin/sshd

客户端程序

/usr/bin/ssh

服务端主配置配置文件

/etc/ssh/sshd_config

客户端配置文件

/etc/ssh/ssh_config

b. /etc/ssh/sshd_config
#Port 22            					 		# 监听的端口(默认22),也可以使用多个Port
#ListenAddress 0.0.0.0				 	  # 监听的IP地址(默认监听所有IP)
SyslogFacility AUTHPRIV 				  # 当有人使用 SSH 登入系统的时候,SSH 会记录信息,这个信息要记录的类型为AUTHPRIV,日志存放目录/var/log/secure
#LogLevel INFO									  # 日志等级
#UseDNS yes        							  # dns反向解析,判断客户端来源是否正常合法,设定为 no 会让联连接速度比较快
#LoginGraceTime 2m						 		# 限制用户登录验证过程的时间(默认为2分钟)
#PermitRootLogin yes					 		# 允许ROOT用户远程登录
PermitRootLogin without-password  # 允许root在有秘钥主机登陆
#PermitEmptyPasswords no  				# 禁止密码为空的用户远程登录
#PubkeyAuthentication yes   			# 是否启用秘钥验证
#PasswordAuthentication yes 	 		# 是否启用密码验证
AuthorizedKeysFile      .ssh/authorized_keys   # 指定保存各用户公钥内容的数据文件位置,默认保存用户公钥信息的文件位于用户宿主目录
#PrintMotd yes			  			# 登入后是否显示出一些信息,即打印出 /etc/motd这个文档的内容
#PrintLastLog yes           # 显示上次登入的信息,如上次登入的时间、地点等
X11Forwarding yes		  			# 是否允许用户使用 X 程序
Subsystem   sftp    /usr/libexec/openssh/sftp-server  # 是否允许用户使用sftp

其他限制(需要在位置文件添加):
DenyUsers 用户名         				# 拒绝指定用户远程登录系统,其他均允许
AllowUsers用户名		 						 	# 允许指定用户远程登录系统
AllowUsers 用户名 @ip_address  	# 允许指定某个账户来自指定的IP登录
c. 添加ssh登录信息
echo 'Warning! From now on,all of your operation has been record!' > /etc/motd
5、SSH_Client 远程连接

通过ssh命令可以远程登录sshd服务,为用户提供一个安全的shell环境,以便对服务器进行管理和维护。

a. ssh 命令
  • 描述:远程登录
  • 语法:ssh 用户名@服务器地址

-p 指定sshd服务端口

# 方式1: 
ssh 用户名@服务器地址
#方式2: 
ssh -l 用户名  服务器地址
#方式3: 缺省时会尝试以当前的本地用户名进行登录
ssh  服务器地址

当用户第一次使用SSH连接到ssh服务器时,必须接受服务器发来的公钥(根据提示输入yes)后才能继续验证。接收的公钥信息将保存到~/.ssh/known_hosts文件中

# 查看公钥信息
cat ~/.ssh/known_hosts

b. sshd 访问控制列表

/etc/hosts.allow和/etc/hosts.deny是tcpd服务器的配置文件,tcpd服务器可以控制外部IP对本机服务的访问。

/etc/hosts.allow

sshd:192.168.137.252:allow     	#允许 192.168.137.252 ip连接sshd服务
# sshd:192.168.137.*:allow      #允许 192.168.137.0	网段连接sshd服务

/etc/hosts.deny

sshd:all:deny				# 拒绝了所有sshd远程连接,:deny可以省略
  • 当 hosts.allow 和 host.deny 相冲突时,以hosts.allow设置为准。
c. 重启 tcpd 服务

Xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器,常用来管理多种轻量级Internet服务。

yum install -y xinetd
systemctl restart xinetd
d. scp 命令
  • 描述:远程复制文件/目录
  • 语法:scp [选项] 本地文件/目录 用户名@服务器地址:目标路径

-r:递归复制整个目录

-p:留原文件的修改时间,访问时间和访问权限。

-P:port 注意是大写的P, port是指定数据传输用到的端口号

-q:不显示传输进度条

# 从客户端拉取文件至当前目录下
scp root@192.168.137.6:/opt/test_ssh.txt .

# 将文件推送至客户端
scp 999.sh root@192.168.137.6:/opt
  • 以上操作均在服务端完成
6、SSH_Client 密钥登录
a. ssh-keygen 命令
  • 描述:为当前用户创建密钥对文件,可用的加密算法为RSA或DSA
  • 语法:ssh-keygen [选项]

-t 指定算法类型,默认使用RSA算法

# 在客户端生成密钥
ssh-keygen -t rsa

# 查看密钥对
ll /root/.ssh

  • id_rsa是私钥文件,权限默认为600,对于私钥文件必须妥善保管,不能泄露给他人。
  • id_rsa.pub是公钥文件,用来提供给ssh服务器。
b. ssh-copy-id 命令
  • 描述:上传公钥到服务器
  • 语法:ssh-copy-id [选项] 用户名@服务器地址

-i 选项指定公钥文件

-p 选项指定端口号

# 上传公钥到服务器
ssh-copy-id -i root@192.168.137.253

# 测试密钥登录
ssh 192.168.137.253

7、SSH 服务防止暴力破解
  • 密码足够的复杂最好大于20位。密码要尽可能有数字、大小写字母和特殊符号混合组成。
  • 修改默认端口号
  • 不允许root账号密码登录,只能通过认证的秘钥来登录系统
  • 添加普通账号,授予root的权限,不允许密码登录,只能通过认证的秘钥来登录系统。
a. 服务端创建admin并提权
# 服务端创建admin用户
useradd admin
echo "admin:123456" | chpasswd

# 给admin提权
vim /etc/sudoers

b. 客户端admin提交公钥
# 创建admin账户
useradd admin
su - admin

# 生成密钥
ssh-keygen -t rsa

# 提交公钥至服务器
ssh-copy-id -i root@192.168.137.253

# 测试
ssh admin@192.168.137.253			# admin 密码123456
c. SSH 服务器安全优化设置
# 修改端口为2222
Port 2222
# 修改监听IP为内网ip            					 		
ListenAddress 192.168.137.253				 	  			  
# 关闭DNS反向解析									 
UseDNS no        							  
# 不允许 root 在没有密钥的主机上登录						 		
PermitRootLogin without-password					 		
# 启用密钥验证 				
PubkeyAuthentication yes
# 关闭密码验证   			
PasswordAuthentication no 	
# 重启 sshd 服务
systemctl restart sshd

# 查看 sshd 端口
netstat -antup | grep sshd

d. 使用密钥登录
# 使用admin秘钥登陆
ssh admin@192.168.137.253 -p 2222

# 使用root密钥登录
ssh root@192.168.137.253 -p 2222

e. Windows 测试密钥登录

分别使用admin账号和root账号远程登录,登录均被拒绝

f. XShell 测试密钥链接
# 安装lrzsz文件传输工具
yum install -y lrzsz

# 将公钥下载到windows桌面
sz /root/.ssh/id_rsa

新建XShell连接

  • 20
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值