1、ssh 远程管理服务

1.1 什么是 ssh

ssh 是 Secure Shell 的缩写,是一个建立在应用层上的安全远程管理协议。ssh 是目前较为可靠的传输协议,专为远程登录会话和其他网络服务提供安全性。利用 ssh 协议可以有效放置远程登录过程中的信息泄露问题。

ssh 可用于大多数 UNIX 和类 UNIX 操作系统中,能够实现字符界面的远程登录管理,它默认使用 22 端口,采用密文的形式在网络中传输数据,相对于通过铭文传输的 Telnet 协议,具有更高的安全性。

1.2 ssh 的登陆验证模式

ssh 提供了基于账户密码(口令)和密钥对两种登录验证方式,这两者都是通过密文传输数据的。

1.2.1 账户密码验证

在这里插入图片描述

账户密码登录认证过程中传输的是用户的账户名和密码,密码具有足够的复杂性才能具有更高的安全性。

Linux 主机之间的远程管理工具是 ssh 命令,所以我们直接使用 ssh 进行远程登录

格式:
	ssh 用户名@IP地址
	ssh [email protected] 
	
	ssh -p 端口(默认22) 用户名@IP地址
	ssh -p 22 [email protected] 

1.2.2 密钥对验证

在这里插入图片描述

1、首先需要在 Client 上创建一对密钥,并且需要把公钥放在需要访问的 Server 上

2、当 Client 需要连接 Server 时,Client 端的软件就会向 Server 端发出登录请求,请求使用密钥对中的公钥进行安全验证

3、Server 收到请求后,会在该用户的家目录下查询公钥文件,拿 Client 发送过来的公钥和自己家目录下的公钥进行比较

4、如果两个公钥一致,Server 就用公钥加密 challenge,并把它发送给 Client 软件,Client 收到加密内容之后,使用本地的私钥进行解密,再把解密结果发送给 Server 端,Server 端验证成功后,允许登录。

在这里插入图片描述

1.3 配置 ssh 服务

1.3.1 环境准备

准备好两台 Linux 操作系统的主机,配置好相关网络参数,实现可以正常通信。

主机名 IP root密码
test~1 (客户端) 192.168.117.130 123
test~2 (服务端) 192.168.117.131 123
#临时关闭防火墙:
	#清空防火墙规则
	[root@test1 ~]# iptables -F
	#临时关闭 selinux
	[root@test1 ~]# setenforce 0
#永久关闭防护功能(以下命令主机重启后生效)
	#防火墙开机不自启
	[root@test1 ~]# chkconfig iptables off
	#永久关闭 selinux
	[root@test1 ~]# sed -i 7s/enforcing/disabled/g /etc/selinux/config 

1.3.2 用户密码验证

Linux 主机之间的远程管理工具是 ssh 命令,所以我们直接在 test~1 主机上使用 ssh 远程登录 主机test~2

#登录成功
[root@test1 ~]# ssh [email protected]
The authenticity of host '192.168.117.131 (192.168.117.131)' can't be established.
ECDSA key fingerprint is SHA256:FSnhedHgvDzRZqf8jTh7IA0np36nwpFhmuA6/hfOkyM.
ECDSA key fingerprint is MD5:ca:22:75:78:99:9c:dd:02:aa:8e:5d:fb:ef:20:04:de.
Are you sure you want to continue connecting (yes/no)? yes
#根据提示输入:yes
Warning: Permanently added '192.168.117.131' (ECDSA) to the list of known hosts.
[email protected]'s password: 
#服务端root密码:123
Last login: Wed Oct  7 23:40:56 2020 from 192.168.117.130
[root@test2 ~]# 

1.3.3 密钥对验证

Linux 主机之间的密钥对登录验证

客户端生成密钥对文件
[root@test1 ~]# ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
#默认回车即可
Enter passphrase (empty for no passphrase): 
#默认回车即可
Enter same passphrase again: 
#默认回车即可
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:m6qvXR6LdNKy50s6riTch2wwBc9O7Hm708P99gkkxVI root@test1
The key's randomart image is:
+---[RSA 2048]----+
|  .         E    |
|   =       o     |
|    *     . o    |
|   = .     o     |
|  o + . S . .    |
| . = o o o o     |
|  o * *oO.  .    |
|   + +o&=o. .. . |
|    +*X==o o..o  |
+----[SHA256]-----+
# -t:指定加密类型(rsa/dsa等)
# -b:指定密码对加密长度
#询问1:执行过程中会询问保存位置,一般默认保存在当前用户家目录下的 .ssh/ 下。
#询问2:是否对密钥文件进行加密
		#加密:在调用密钥文件时需要先验证密钥的密码,密码正确才能使用密钥文件
		#不加密:密钥文件可以直接被调用,整个登录验证过程无需输入任何密码,即为免密登录
将公钥文件上传至服务器端
[root@test1 ~]# ssh-copy-id [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password: 
#服务端root密码:123
Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
客户端免密登录服务端
[root@test1 ~]# ssh [email protected]
Last login: Wed Oct  7 23:42:11 2020 from 192.168.117.130
[root@test2 ~]# 

1.3.4 禁止使用密码登录服务端

生产环境下将服务端账户密码登录功能关闭

#关闭服务端密码登录功能
[root@test2 .ssh]# vim /etc/ssh/sshd_config 
PasswordAuthentication yes	# yes 改为 no
#重启 sshd 服务
[root@test2 ~]# systemctl restart sshd
#客户端尝试使用密码远程登录服务端失败
[root@test1 ~]# ssh [email protected]
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

1.3.5 禁止使用 root 用户登录服务端

一般在远程登录管理上我们会禁止直接使用 root 用户登录

#禁止 root 用户远程登录
[root@test2 ~]# vim /etc/ssh/sshd_config 
#PermitRootLogin yes	#取消注释,并将 yes 改为 no
#重启 sshd 服务
[root@test2 ~]# systemctl restart sshd
##客户端尝试,使用root用户远程登录服务端失败
[root@test1 ~]# ssh [email protected]
[email protected]'s password: 
#服务端root密码:123
Permission denied, please try again.
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

1.3.6 修改 默认端口、限制 ssh 监听 IP

修改默认端口

ssh作为一个用来远程管理服务器的工具,需要特别的安全,默认情况下使用 TCP 的 22 端口,若不进行修改,很容易被利用遭到攻击,所以我们一般都会修改端口,尽量修改一个高位端口

修改服务端 ssh 服务端口
[root@test2 ~]# vim /etc/ssh/sshd_config 
#Port 22	#取消注释,将默认 22 端口修改为 2323
#重启 ssh 服务
#注:selinux 如果没有关闭,重启 sshd 会报错
[root@test2 ~]# systemctl restart sshd
#客户端尝试使用 2323端口 远程登录服务端
#注:selinux 如果没有关闭,远程登录会报错
[root@test1 ~]# ssh -p 2323 [email protected]
[email protected]'s password: 
Last login: Thu Oct  8 00:16:15 2020 from 192.168.117.130
[root@test2 ~]# 
限制 ssh 监听 IP

有些服务器安全级别更高一些,不允许使用外网直接登录,只有通过局域网才能登录,我们可以设置其中一台能够被外网远程连接,其他的主机都通过这个机器进行远程连接即可

#添加监听IP
[root@test2 ~]# vim /etc/ssh/sshd_config 
#ListenAddress 0.0.0.0	
#取消注释,将 0.0.0.0 替换为 192.168.117.131,这样只允许远程机器通过ssh连接本机的192.168.117.131来进行登陆
#客户端登录成功
[root@test1 ~]# ssh [email protected]
[email protected]'s password: 
Last login: Thu Oct  8 13:44:52 2020 from 192.168.117.130
[root@test2 ~]# 

猜你喜欢

转载自blog.csdn.net/Tiamon_/article/details/108952341