一、远程登录服务概述
1. 概念
远程登录服务就像是一个神奇的桥梁,它让你能够跨越物理距离,通过网络连接到另一台计算机上进行操作。无论你身在何处,只要有网络连接,你就可以像坐在目标计算机前一样进行各种操作。
2. 功能
-
分享主机的运算能力:通过远程登录,你可以利用远程计算机的强大运算能力来完成复杂的任务,就像是拥有了一个远程的超级大脑。
-
有限度开放连接:服务器类型可以根据需要有限度地开放连接,既保证了安全性,又能让特定用户访问所需资源。
-
只对内网开放:工作站类型通常只对内网开放,就像是给你的计算机加了一层保护墙,只允许内部网络中的用户访问。
3. 分类
文字接口
-
明文传输:Telnet、RSH等早期的远程登录方式,虽然能实现远程操作,但数据传输是明文,安全性极低,就像是在公共场所大声说出你的秘密,很容易被别人窃取。
-
加密传输:SSH(Secure Shell Protocol)是目前主流的远程登录方式,它通过加密技术保护数据传输,就像是给你的数据穿上了盔甲,安全又可靠。
图形接口
XDMCP、VNC、XRDP等图形接口远程登录方式,就像是给你戴上了虚拟现实眼镜,你可以直接看到远程计算机的桌面,进行图形化操作,就像是在操作本地电脑一样。
二、SSH加密技术
1. 加密技术简介
SSH使用非对称密钥系统来处理加密与解密。就像是你有一对钥匙,一把是公钥,可以公开给任何人;另一把是私钥,只有你自己保存。别人用你的公钥加密数据,只有你能用私钥解密。
2. 密钥解析
-
公钥(public key):提供给远程主机进行数据加密,所有人都可以获取你的公钥,就像是你家的门牌号,可以告诉别人。
-
私钥(private key):用于解密远程主机加密的数据,只有你自己拥有,就像是你家的钥匙,必须妥善保管。
三、SSH工作过程
1. 版本号协商阶段
服务器端和客户端就像是初次见面的两个人,先互相介绍自己支持的SSH协议版本,通过协商确定使用哪个版本进行通信。
2. 密钥和算法协商阶段
双方根据各自支持的算法列表,协商出最终使用的加密算法等参数,就像是商量好用哪种暗语进行交流,确保数据传输的安全性。
3. 认证阶段
SSH客户端向服务器端发起认证请求,服务器端对客户端进行认证。有两种认证方法:
-
基于口令的认证:客户端将用户名和密码加密后发送给服务器,服务器解密后与保存的信息进行比对。
-
基于密钥的认证:客户端将公钥传给服务器,服务器验证公钥后,生成随机字符串并加密发送给客户端,客户端解密后返回,服务器验证返回的字符串是否正确。
4. 会话请求阶段
认证通过后,客户端向服务器端发送会话请求,就像是告诉服务器“我们可以开始正式交流了”。
5. 交互会话阶段
服务器端和客户端开始正式的数据交互,所有传输的数据都被加密,保证了数据的安全性。
四、SSH服务配置
1. 安装SSH
在Linux系统中,安装SSH服务非常简单,只需要一条命令就可以完成。例如,在基于Red Hat的系统中,可以使用以下命令安装SSH服务器:
[root@server ~]# yum install openssh-server
2. 配置文件分析
SSH的主配置文件通常位于/etc/ssh/sshd_config(服务端)
。这个文件就像是SSH服务的工作手册,里面规定了各种参数,例如监听的端口、允许登录的用户等。以下是一些常见的配置参数:
-
Port
:指定SSH服务监听的端口号,默认是22端口,可以根据需要修改为其他端口,以增加安全性。 -
ListenAddress
:指明SSH服务监听的IP地址,可以限制只监听特定的IP地址。 -
PermitRootLogin
:控制是否允许root账户远程登录,可设置为yes
(允许)、no
(禁止)等。 -
AllowUsers
:指定允许远程登录的用户列表,增强安全性。 -
PasswordAuthentication
:控制是否允许使用密码进行认证。 -
PubkeyAuthentication
:控制是否允许使用公钥认证。
21.#Port 22 # 默认监听22端口,可修改
22.#AddressFamily any # IPV4和IPV6协议家族用哪个,any表示二者均有
23.#ListenAddress 0.0.0.0 # 指明监控的地址,0.0.0.0表示本机的所有地址(默认可修改)
24.#ListenAddress :: # 指明监听的IPV6的所有地址格式
26.#HostKey /etc/ssh/ssh_host_rsa_key # rsa私钥认证,默认
27.#HostKey /etc/ssh/ssh_host_ecdsa_key # ecdsa私钥认证
28.#HostKey /etc/ssh/ssh_host_ed25519_key # ed25519私钥认证
34 #SyslogFacility AUTH # ssh登录系统的时会记录信息并保存在/var/log/secure
35.#LogLevel INFO # 日志的等级
39.#LoginGraceTime 2m # 登录的宽限时间,默认2分钟没有输入密码,则自动断开连接
40 PermitRootLogin yes # 允许管理员root登录
41.#StrictModes yes # 是否让sshd去检查用户主目录或相关文件的权限数据
42.#MaxAuthTries 6 # 最大认证尝试次数,最多可以尝试6次输入密码。之后需要等待某段时间后才能再次输入密码
43.#MaxSessions 10 # 允许的最大会话数
49.AuthorizedKeysFile .ssh/authorized_keys # 选择基于密钥验证时,客户端生成一对公私钥之后,会将公钥放到.ssh/authorizd_keys里面
65 #PasswordAuthentication yes # 登录ssh时是否进行密码验证
66 #PermitEmptyPasswords no # 登录ssh时是否允许密码为空
……
123.Subsystem sftp /usr/libexec/openssh/sftp-server #支持 SFTP ,如果注释掉,则不支持sftp连接
AllowUsers user1 user2 #登录白名单(默认没有这个配置,需要自己手动添加),允许远程登录的用户。如果名单中没有的用户,则提示拒绝登录
1. /etc/ssh/sshd_config
-
用途:这是 SSH 服务端(即 SSH 守护进程,sshd)的配置文件。
-
功能:用于配置 SSH 服务端的行为,包括监听的端口、认证方式、权限控制、日志记录等。这些设置影响所有通过 SSH 连接到该服务器的用户。
2. /etc/ssh/ssh_config
-
用途:这是 SSH 客户端的配置文件。
-
功能:用于配置 SSH 客户端的行为,这些设置影响从该客户端发起的所有 SSH 连接。用户可以在这里设置默认的连接选项,如用户名、端口号、使用的密钥文件等。
五、SSH实验
实验1:修改SSH端口号
-
服务端操作:编辑SSH配置文件,将默认的22端口修改为你想要的端口,例如2222。
[root@server ~]# vim /etc/ssh/sshd_config
# 修改后的配置文件中,将Port 22改为Port 2222
-
重启SSH服务:修改配置文件后,需要重启SSH服务使更改生效。
[root@server ~]# systemctl restart sshd
-
客户端操作:在客户端使用新的端口号进行连接。
[root@node1 ~]# ssh -p 2222 root@服务器IP地址
实验2:拒绝root账户远程登录
-
修改配置文件:在SSH配置文件中,将
PermitRootLogin
参数设置为no
,禁止root账户远程登录。
[root@server ~]# vim /etc/ssh/sshd_config
PermitRootLogin no
-
重启SSH服务:使配置更改生效。
[root@server ~]# systemctl restart sshd
-
客户端测试:尝试使用root账户远程登录,应该会被拒绝。
[root@node1 ~]# ssh root@服务器IP地址
实验3:允许特定账户进行SSH登录
-
服务端添加新账户:创建一个新的用户账户,例如
test
。
[root@server ~]# useradd test
[root@server ~]# passwd test
-
修改配置文件:在SSH配置文件中,添加
AllowUsers test
,只允许test
用户远程登录。
[root@server ~]# vim /etc/ssh/sshd_config
AllowUsers test
-
重启SSH服务:重启服务使配置生效。
[root@server ~]# systemctl restart sshd
-
客户端测试:使用
test
用户进行远程登录,应该可以成功;而使用其他账户登录则会被拒绝。
[root@node1 ~]# ssh test@服务器IP地址
实验4:实现密钥登录(免密登录)
-
客户端生成公私钥对:在客户端使用
ssh-keygen
命令生成公私钥对。
[root@node1 ~]# ssh-keygen -t rsa
-
上传公钥到服务器:使用
ssh-copy-id
命令将客户端的公钥上传到服务器端指定用户账户下。
[root@node1 ~]# ssh-copy-id root@服务器IP地址
-
客户端测试:再次连接服务器时,无需输入密码即可登录,实现免密登录。
[root@node1 ~]# ssh root@服务器IP地址
实验5:xshell使用密钥登录
-
服务器端准备:确保服务器端的
/root/.ssh/authorized_keys
文件存在,并具有正确的权限。 -
xshell操作:
-
新建密钥:在xshell中,选择新建用户密钥。
-
生成公钥:按照提示生成公钥,并保存。
-
上传公钥:将生成的公钥内容复制到服务器端的
/root/.ssh/authorized_keys
文件中。 -
配置连接:在xshell中新建会话,选择使用公钥认证方式进行连接。
-
-
连接测试:使用配置好的密钥连接服务器,无需输入密码即可登录,方便又安全。
通过以上实验,可以深入理解SSH服务的配置和使用,掌握如何通过修改配置文件和使用密钥认证来增强远程登录的安全性。