远程连接服务器简介
SSH是如何工作的?
认证阶段
ssh修改配置文件
配置文件注释
练习
试验1
实验2
测试
远程连接服务器简介
1、什么是远程连接服务器
远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录linux主机以取得可操作主机接口(shell),而登录后的操作感觉就像是坐在系统前面一样。2、远程连接服务器的功能
分享主机的运算能力
服务器类型:有限度开放连接
工作站类型:只对内网开放
3、远程连接服务器的类型(以登录的连接界面来分类)
文字接口
明文传输:Telnet、RSH等,目前非常少用
加密传输:SSH为主,已经取代明文传输
图形接口:XDMCP、VNC、XRDP等
4、文字接口连接服务器
SSH(Secure Shell Protocol,安全的壳程序协议)它可以通过数据包加密技术将等待传输的数据包加密后再传输到网络上。ssh协议本身提供两个服务器功能:一个是类似telnet的远程连接使用shell的服务器;另一个就是类似ftp服务的sftp-server,提供更安全的ftp服务。
例如Telnet、FTP,使用明文传输数据,存在很多的安全隐患。随着人们对网络安全的重视,这些方式已经慢慢不被接受。SSH协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的登录和其他安全网络服务。作为Telnet和其他不安全远程shell协议的安全替代方案,目前SSH协议已经被全世界广泛使用,大多数设备都支持SSH功能。
5.SSH端口号是什么?
当SSH应用于STelnet,SFTP以及SCP时,使用的默认SSH端口都是22。当SSH应用于NETCONF时,可以指定SSH端口是22或者830。SSH端口支持修改,更改后当前所有的连接都会断开,SSH服务器开始侦听新的端口。
SSH是如何工作的?
SSH由服务器和客户端组成,在整个通信过程中,为建立安全的SSH通道,会经历如下几个阶段:
- 连接建立
SSH服务器在指定的端口侦听客户端的连接请求,在客户端向服务器发起连接请求后,双方建立一个TCP连接。
- 版本协商
SSH协议目前存在SSH1.X(SSH2.0之前的版本)和SSH2.0版本。SSH2.0协议相比SSH1.X协议来说,在结构上做了扩展,可以支持更多的认证方法和密钥交换方法,同时提高了服务能力。SSH服务器和客户端通过协商确定最终使用的SSH版本号。
- 算法协商
SSH支持多种加密算法,双方根据各自支持的算法,协商出最终用于产生会话密钥的密钥交换算法、用于数据信息加密的加密算法、用于进行数字签名和认证的公钥算法以及用于数据完整性保护的HMAC算法。
- 密钥交换
服务器和客户端通过密钥交换算法,动态生成共享的会话密钥和会话ID,建立加密通道。会话密钥主要用于后续数据传输的加密,会话ID用于在认证过程中标识该SSH连接。
- 用户认证
SSH客户端向服务器端发起认证请求,服务器端对客户端进行认证。SSH支持以下几种认证方式:
- 密码(password)认证:客户端通过用户名和密码的方式进行认证,将加密后的用户名和密码发送给服务器,服务器解密后与本地保存的用户名和密码进行对比,并向客户端返回认证成功或失败的消息。
- 密钥(publickey)认证:客户端通过用户名,公钥以及公钥算法等信息来与服务器进行认证。
- password-publickey认证:指用户需要同时满足密码认证和密钥认证才能登录。
- all认证:只要满足密码认证和密钥认证其中一种即可。
- 会话请求
认证通过后,SSH客户端向服务器端发送会话请求,请求服务器提供某种类型的服务,即请求与服务器建立相应的会话。
- 会话交互
会话建立后,SSH服务器端和客户端在该会话上进行数据信息的交互。
文章来源地址https://uudwc.com/A/Lakox
认证阶段
SSH提供两种认证方法:
- 基于口令的认证(password认证):客户端向服务器发出password认证请求,将用户名和密码加密后发送给服务器,服务器将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败消息。
- 基于密钥的认证(publickey认证):客户端产生一对公共密钥,将公钥保存到将要登录的服务器上的那个账号的家目录的.ssh/authorizedkeys文件中。认证阶段:客户端首先将公钥传给服务器端。服务器端收到公钥后会与本地该账号家目录下的authorizedkeys中的公钥进行对比,如果不相同,则认证失败;否则服务端生成一段随机字符串,并先后用客户端公钥和会话密钥对其加密,发送给客户端。客户端收到后将解密后的随机字符串用会话密钥发送给服务器。如果发回的字符串与服务器端之前生成的一样,则认证通过,否则,认证失败。
- :服务器端对客户端进行认证,如果认证失败,则向客户端发送认证失败消息,其中包含可以再次认证的方法列表。客户端从认证方法列表中选取一种认证方法再次进行认证,该过程反复进行。直到认证成功或者认证次数达到上限,服务器关闭连接为止
ssh修改配置文件
ssh配置文件:/etc/ssh/sshd_config
配置文件注释
修改配置文件
ssh配置文件:/etc/ssh/sshd_config
ssh默认配置文件
17.#Port 22 #监听端口,默认监听22端口 【默认可修改】
18.#AddressFamily any #IPV4和IPV6协议家族用哪个,any表示二者均有
19.#ListenAddress 0.0.0.0 #指明监控的地址,0.0.0.0表示本机的所有地址 【默认可修改】
20.#ListenAddress :: #指明监听的IPV6的所有地址格式
22.# The default requires explicit activation of protocol 1
23.#Protocol 2 #使用SSH第二版本
25.# HostKey for protocol version 1 #一版的SSH支持以下一种秘钥形式
26.#HostKey /etc/ssh/ssh_host_key
27.# HostKeys for protocol version 2 #使用第二版本发送秘钥,支持以下四种秘钥认证的存放位置
28.HostKey /etc/ssh/ssh_host_rsa_key # rsa私钥认证 【默认】
29.#HostKey /etc/ssh/ssh_host_dsa_key # dsa私钥认证
30.HostKey /etc/ssh/ssh_host_ecdsa_key # ecdsa私钥认证
31.HostKey /etc/ssh/ssh_host_ed25519_key # ed25519私钥认证
35.#ServerKeyBits 1024 #主机秘钥长度
40.# Logging
41.# obsoletes QuietMode and FascistLogging
42.#SyslogFacility AUTH
43.SyslogFacility AUTHPRIV #当有人使用ssh登录系统的时候,SSH会记录信息,信息保存在/var/log/secure里面
44.#LogLevel INFO #日志的等级
45.# Authentication:
48.#LoginGraceTime 2m #登录的宽限时间,默认2分钟没有输入密码,则自动断开连接
49.#PermitRootLogin yes #是否允许管理员远程登录,'yes'表示允许
50.#StrictModes yes #是否让sshd去检查用户主目录或相关文件的权限数据
51.#MaxAuthTries 6 #最大认证尝试次数,最多可以尝试6次输入密码。之后需要等待某段时间后才能再次输入密码
52.#MaxSessions 10 #允许的最大会话数
59.AuthorizedKeysFile .ssh/authorized_keys #选择基于密钥验证时,客户端生成一对公私钥之后,会将公钥放到.ssh/authorizd_keys里面
79.PasswordAuthentication yes #是否允许支持基于口令的认证
83.ChallengeResponseAuthentication no #是否允许使用键盘输入身份验证,也就是xshell的第三个登录方式
129.#UseDNS yes #是否反解DNS,如果想让客户端连接服务器端快一些,这个可以改为no
146.Subsystem sftp /usr/libexec/openssh/sftp-server #支持 SFTP ,如果注释掉,则不支持sftp连接
154.AllowUsers user1 user2 #登录白名单(默认没有这个配置,需要自己手动添加),允许远程登录的用户。如果名单中没有的用户,则提示拒绝登录
练习
实验1.两台机器:第一台机器作为客户端,第二台机器作为服务器,在第一台使用rhce用户免密登录第二台机器
第1步:创建目录
mkdir /etc/.ssh
第2步:在客户端,生成公钥和私钥
在Linux上使用的ssh-keygen的命令:ssh-key-generate: 生成ssh的密钥
ssh-keygen -t rsa -b 2048
第3步:使用本地可用的密钥授权远程计算机上的登录
ssh-copy-id -i root@192.168.233.233(服务器的IP)
尝试在第一台机器登录第二台机器(登录成功)
实验2.禁止root用户远程登录和设置三个用户sshuser1, sshuser2, sshuser3, 只允许sshuser3登录,不允许sshuser1, sshuser2登录
第1步(创建三个用户,并且配置密码123456)
[root@fanshun /]# useradd sshuser1
[root@fanshun /]# useradd sshuser2
[root@fanshun /]# useradd sshuser3
[root@fanshun /]# echo "123456"|passwd --stdin sshuser1
Changing password for user sshuser1.
passwd: all authentication tokens updated successfully.
[root@fanshun /]# echo "123456"|passwd --stdin sshuser2
Changing password for user sshuser2.
passwd: all authentication tokens updated successfully.
[root@fanshun /]# echo "123456"|passwd --stdin sshuser3
Changing password for user sshuser3.
passwd: all authentication tokens updated successfully
文章来源:https://uudwc.com/A/Lakox
第2步(禁止root用户远程登录,只允许sshuser3登录,不允许sshuser1, sshuser2登录)
AllowUsers sshuser3
PermitRootLogin no
第3步(重启sshd服务)
systemctl restart sshd
第4步(测试root是否可以远程连接,sshuser3可否登录,sshuser1可否登录)
root测试
sshuser3测试
sshuser1测试