什么是远程连接服务器
远程连接服务器通过文字或图形接口方式来远程登陆系统,让你在远程登陆终端前登录Linux 主机以取得可操作主机接口(shell),登录后的操作就像是坐在系统前面一样
什么时候需要远程登陆
在疫情封控时期,我们需要居家办公,有时需要远程调试我们的服务器;在工作站和总公司 之间,当总公司需要调取资源的时候也需要远程登录等等
远程连接服务器的类型(以登录的连接界面来分类)
文字接口:SSH(Secure Shell Protocol,安全的壳程序协议)它可以通过数据包加密技术将等待传输的数据包加密后在传输到网络上。SSH本身提供两个服务器功能:一个类似telnet的远程登陆使用shell的服务器;另一个是类似于ftp的sftp-server,提供更安全的ftp服务
1.明文传输:Telnet,RSH等,因为不安全,少部分在用
2.加密传输:SSH为主,基本取代明文传输
.图形接口:XDMCP、VNC、XRDP等
上面提到了数据/连接加密,怎么加密?
现在主要分为三种加密方式:对称加密,非对称加密,对称加密与非对称加密相结合
1.对称加密
对称加密就是加密和解密都用同一个密钥,就像战争时使用的密码本一样
优点:算法简单,加解密简单,效率高,执行快
缺点:相对来说不安全,因为两把钥匙是一样的,如果密钥泄露,那么数据将变得不再安全
常见的对称加密算法:DES,AES,3DES
非对称加密
非对称加密引入了密钥对的概念,一个密钥对又分为公钥和私钥,公钥用于对外发布,私钥则自己保留;用公钥加密的数据只能用同一对的私钥解开,用私钥加密的数据只能用同一对\n\n 的公钥解开。
优点:安全,即使密文和公钥被拦截,但是由于无法获取到私钥,也就无法破译密
缺点:加密算法复杂,安全性依赖算法和密钥,且加解密效率低
常见的非对称加密:RSA,DSA,ECC
SSH协议版本协商阶段:客户端通过TCP三次握手与服务器的SSH端口建立TCP连接。服务器通过建立好的连接向客\n\n 户端发送一个包含SSH版本信息的报文,格式为\"SSH-\u003CSSH协议大的版本号>\u003CSSH协议小的\n\n 版本号>-\u003C软件版本号>\",软件版本号主要用于调试。(SSH分为SSH2和SSH1两个版本,且SSH2向下兼容SSH1。)客户收到版本号信息后,如果服务器使用的协议版本号比自己低,但是客户端可以向下兼容,则可以通信;如果是客户端的SSH版本号低于服务端的SSH版本,则不能够建立连接,因为只有主动连接的一方可以向下兼容密钥交换 服务端分别发送算法协商报文给对端,报文中包括自己支持的公钥算法列表、加密算法列表、MAC(Message Authentication Code,消息验证码)算法列表、压缩算法列表等;与版本协商阶段相似,服务端和客户端根据自己和对端支持的算法来决定最终要使用的各个算法。选择完以后,服务端将会在/etc/ssh目录下生成相关的公钥和私钥,自己的公钥将会明文传输过去,客户端收到公钥以后,将在客户端生成的密钥通过服务端的公钥加密传输过去,一下简称客户端生成的密钥为密钥认证阶段客户端向服务器发送认证请求,请求中包含用户名,认证方法,密码,这些将用密钥加密,服务端对客户端进行认证,认证失败,则向客户端发送失败消息,其中包含可以再次认证的方法列表。客户端再次使用支持的认证方法中的一种进行认证,知道达到认证次数上限被服务器中止连接,或者被服务器认证成功SSH支持的两种认证方式:
密码认证:客户端通过用户名/密码进行认证,将使用会话密钥加密后的用户名和密码发送给服务器,服务器解密后与系统保存的用户名和密码进行对比,并向客户端返回认证成功或失败的消息。
密钥认证(免密认证):采用数字签名来进行认证,目前可以通过RSA和DSA两种算法\n\n 实现数字签名,客户端通过用户名,明耀以及公钥算法等信息来与服务器完成验证。数据通信阶段客户端的指令将通过加密发送给客户端,服务端收到后,解密命令,执行结果加密返回客户端,客户端将返回结果解密后显示到终端上
SSH服务的搭建
.下载SSH安装包
.修改配置文件
ssh配置文件的路径:/etc/ssh/sshd_config\n\n
ssh默认配置文件中的重要字段\n\n
17 #Port 22 -- 监听端口,默认监听22端口[默认可修改]\n\n
18 #AddressFamily any -- ipv4和ipv6用哪个,any表示二者均有
19 #ListenAddress 0.0.0.0 -- 指明监听的地址,0.0.0.0表示本机的所有地址[默认可修改]
20 #ListenAddress :: -- 指明监听ipv6的所有地址格式
22 HostKey /etc/ssh/ssh_host_rsa_key -- rsa私钥认证[默认]
23 HostKey /etc/ssh/ssh_host_ecdsa_key -- dsa私钥认证
24 HostKey /etc/ssh/ssh_host_ed25519_key -- ed25519私钥认证
40 SyslogFacility AUTHPRIV -- 当有人使用ssh登陆系统的时候,ssh会记录信息,信息保存 在/var/log/sercure里卖弄
41 #LogLevel INFO -- 日志的等级
45 #LoginGraceTime 2m -- 登陆的宽限时间,默认两分钟没有输入密码,则自动断开连接
46 PermitRootLogin yes -- 是否允许管理员远程登录,yes代表允许
47 #StrictModes yes -- 是否让sshd去检查用户主目录或相关文件的权限数据
48 #MaxAuthTries 6 -- 最大认证尝试次数,最多可以尝试6次输入密码。之后需要等待某段时间后才能再次输入密码
49 #MaxSessions 10 -- 允许最大会话数
55 AuthorizedKeysFile .ssh/authorized_keys -- 选择基于密钥验证时,客户端生成一对公私钥之后,会将公钥放到.ssh/authorized_keys里面
71 #PasswordAuthentication yes -- 是否允许基于口令的认证
76 #ChallengeResponseAuthentication yes -- 是否允许使用键盘输入身份验证,也就是XShell的第三个登陆方式
124 #UseDNS no --是否反解DNS,如果想让客户端连接客户端快一点,可以改为no
125 #allowUser username -- 允许特定用户ssh登录,其他用户都无法登录
Linux如何让生成密钥
生成密钥,使用指令ssh-keygen -t rsassh-keygen -- 生成、管理和转换密钥 -t -- 知道类型生成的密钥将存放在/root/.ssh/下复制该公钥文件到服务端的家目录下的.ssh目录使用指令scp /root/.ssh/id_rsa.pub root@服务端ip:/root/.ssh/authorized_keys之后可以直接登录服务端使用指令:ssh 服务端ip或ssh -i /root/.ssh/id_rsa root@服务端ip\n\nsftp的用法
sftp的用法
(服务端ip为172.24.8.128)sftp下可以使用的指令:ls、mkdir、pwd、chgrp、chown、chmod、ln、rm、exit、bye、quit对于客户端可用的指令:lcd(切换目录)、lls、lpwd将文件由本机上传到远程主机:put [本机文件],文件会存储到当前远程主机的目录下将文件由本机下载到远程主机:get [远程主机文件文件],文件会存储到当前主机的目录下
实现虚拟机和虚拟机之间使用密钥进行登录
创建密钥对,使用命令ssh-keygen
复制该公钥文件到服务端的该目录下,使用命令scp /root/.ssh/authorized_keys
root@ServerAddres:/root/.ssh/authorized_keys
在本地服务器上登录到对端服务器
实现XShell使用密钥验证登陆
客户端:使用XShell工具的用户密钥管理生成公钥和私钥,然后将公钥上传至服务端将要登录的用户的家目录下的.ssh/下,并重命名为authorized_keys
服务端:通过修改配置文件取消使用密码进行远程登录并重启服务,并开启RSA认证登录,开启公钥认证登录,设置公钥文件的路径,具体配置如下图
.重启服务,使用命令systemctl restart sshd