文章目录
远程连接服务器
什么是远程连接服务器
远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录linux主机以取得可操作主机接口(shell),而登录后的操作感觉就像是坐在系统前面一样。
SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH
远程连接服务器的功能
- 分享主机运算能力
- 服务器类型有限度开放连接
- 工作站类型,只对内网开放
常见的远程管理工具方式
RDP(remote desktop protocal )协议,windows远程桌面管理(图形界面) 端口3389
telenet CLI界面下远程管理,几乎所有操作系统都有(内容明文传输) 端口23
ssh CLI界面下的远程管理,几乎所有操作系统都有(内容加密传输) 类unix系统下主要 端口22
远程管理方式(linux BSD Macos)
RFB (remote frame buffer) 图形化远程管理协议 VNC (Virtual Network Computing)使用的协议。(在linux unix Macos 下的图形界面远程管理工具) 端口5900
ssh
- SSH代表安全外壳(Secure Shell),它现在是通过互联网访问网络设备和服务器的唯一的主要协议
- SSH默认情况下通过端口22运行;不过很容易更改这个端口
- SSH是一种非常安全的协议,因为它共享并发送经过加密的信息,从而为通过互联网等不安全的网络访问的数据提供了机密性和安全性
- 一旦通讯的数据使用SSH经过加密,就极难解压和读取该数据,所以我们的密码在公共网络上传输也变得很安全
- SSH还使用公钥用于对访问服务器的用户验证身份,这是一种很好的做法,为我们提供了极高的安全性
- SSH主要用在所有流行的操作系统上,比如Unix、Solaris、Red-Hat Linux、CentOS和Ubuntu等
- ssh服务端由2部分组成: openssh(提供ssh服务) openssl(提供加密的程序)
- ssh的客户端可以用 XSHELL,Securecrt, Mobaxterm等工具进行连接
telnet
- Telnet是电信(Telecommunications)和网络(Networks)的联合缩写,这是一种在UNIX平台上最为人所熟知的网络协议
- Telnet使用端口23,它是专门为局域网设计的
- Telnet不是一种安全通信协议,因为它并不使用任何安全机制,通过网络/互联网传输明文格式的数据,包括密码,所以谁都能嗅探数据包,获得这个重要信息
- Telnet中没有使用任何验证策略及数据加密方法,因而带来了巨大的安全威胁,这就是为什么telnet不再用于通过公共网络访问网络设备和服务器
加密
ssl(Secure Socket Layer)/ tls (Transport Layer Security)
Secure Socket Layer,为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。一般通用之规格为40 bit之安全标准,美国则已推出128 bit之更高安全标准,但限制出境。只要3.0版本以上之I.E.或Netscape浏览器即可支持SSL。 Sslv3
当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。Ssh+ssl
ssl提供服务
1)认证用户和服务器,确保数据发送到正确的客户机和服务器; 握手协议
2)加密数据以防止数据中途被窃取; ssl记录协议
3)维护数据的完整性,确保数据在传输过程中不被改变。
加密技术:
对称密钥加密------共享密钥加密(对称密钥加密):加密和解密同用一个密钥。加密时就必须将密钥传送给对方,那么如何安全的传输呢 md5
核心是:加密类型
非对称密钥加密系统—公开密钥加密(非对称密钥加密):公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,一把叫做公开密钥。私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。使用此加密方式,发送密文的一方使用公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听盗走
核心是:算法RSA
区别:
1)非对称加密与对称加密的不同之处在于,为了在单个方向上发送数据,需要两个相关的一组密钥。其中一个密钥称为私钥,而另一个称为公钥。
2)非对称加解密的效率要远远小于对称加解密
3)非对称秘钥相比对称秘钥更加安全
ssh连接过程
1. Client将自己的公钥存放在Server上,追加在文件authorized_keys中。
2. Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey®
,然后将加密后信息发送给Client。
3. Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。
4. Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。
5. Server端会最后比较Digest1和Digest2是否相同,完成认证过程。
案例一:修改ssh端口
[root@localhost ~]# vim /etc/ssh/sshd_config
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl restart sshd
在xshell打开一个新窗口
直接ssh 192.168.72.130,默认端口是22,会连接不上
在ip后面指定端口为2222,就可以连接上
root用户登陆成功
在linux机上ssh,并且指定用户
[root@localhost ~]# ssh xiaobai@192.168.72.130 -p 2222 #xiaobai是指定的用户 @后指定登录的主机 -p指定端口
The authenticity of host '[192.168.72.130]:2222 ([192.168.72.130]:2222)' can't be established.
ECDSA key fingerprint is SHA256:BT6wnt247DlR2IjgIjU/g6i10wdLDThxJUT4p310264.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[192.168.72.130]:2222' (ECDSA) to the list of known hosts.
xiaobai@192.168.72.130's password:
Activate the web console with: systemctl enable --now cockpit.socket
This system is not registered to Red Hat Insights. See https://cloud.redhat.com/
To register this system, run: insights-client --register
Last login: Tue Aug 31 03:10:51 2021
[xiaobai@localhost ~]$ #xiaobai登录成功
案例二:不允许root用户远程登录
[root@localhost ~]# vim /etc/ssh/sshd_config
[root@localhost ~]# systemctl restart sshd
xshell打开一个新窗口
用普通用户xiaobia登录:
登陆成功
把之前改的配置改回原样
案例三:允许特定用户登录
[root@localhost ~]# vim /etc/ssh/sshd_config
[root@localhost ~]# systemctl restart sshd
xshell打开新窗口
测试完之后记得改回原配置哦
案例四:两台主机进行免密登陆
客户端 我的8.1当做客户端
[root@localhost ~]# ssh-keygen -t RSA
Generating public/private RSA key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #enter 跳过,不建议更改文件路径
Enter passphrase (empty for no passphrase): #enter 跳过,我没设置密码,也可以设置
Enter same passphrase again: #enter 跳过
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:J4EojqnHCnnr354Nj0C+lMyhA2s3S6xpZ24ztCZJq2M root@localhost.localdomain
The key's randomart image is:
+---[RSA 3072]----+
| |
| . . |
| . . . . |
| + . . |
|+ . o S . |
|.*.B o o |
|*.X=O . |
|+E=%o+ * |
|*=X+=.= o |
+----[SHA256]-----+
在服务端查看是否有.ssh文件 我的服务端是8.1克隆
没有就创建一个
[root@localhost ~]# mkdir .ssh
在客户端把公钥发送到服务端的/root/.ssh/下,并且重命名为authorized_keys
[root@localhost .ssh]# scp id_rsa.pub root@192.168.72.134:/root/.ssh/authorized_keys
The authenticity of host '192.168.72.134 (192.168.72.134)' can't be established.
ECDSA key fingerprint is SHA256:BT6wnt247DlR2IjgIjU/g6i10wdLDThxJUT4p310264.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes #第一次连接服务端,需要确认
Warning: Permanently added '192.168.72.134' (ECDSA) to the list of known hosts.
root@192.168.72.134's password:
id_rsa.pub 100% 580 63.8KB/s 00:00
然后客户端可以免密登录服务端:
[root@localhost .ssh]# ssh 192.168.72.134 # 连接134服务端
Activate the web console with: systemctl enable --now cockpit.socket
This system is not registered to Red Hat Insights. See https://cloud.redhat.com/
To register this system, run: insights-client --register
Last login: Thu Sep 2 13:59:04 2021 from 192.168.72.1
[root@localhost ~]# ip a
inet 192.168.72.134/24 brd 192.168.72.255 scope global dynamic noprefixroute ens160
#连接成功
不用在服务端上创建目录,也不用改文件名的方法:
在客户端:
[root@localhost .ssh]# ssh-copy-id -i id_rsa.pub 192.168.72.134
案例五:xshell密码验证登录
在服务端,把刚刚保存的文件传过来
[root@localhost .ssh]# rz
[root@localhost .ssh]# ll
total 8
-rw-r--r--. 1 root root 580 Sep 2 17:45 authorized_keys
-rw-r--r--. 1 root root 548 Sep 2 18:08 'id_rsa_3072 (2).pub'
[root@localhost .ssh]# mv id_rsa_3072\ \(2\).pub authorized_keys #改名
在xshell新开一个窗口,ssh 192.168.72.134
案例六:telnet连接
服务端:
[root@localhost ~]# mount /dev/sr0 /mnt/
[root@localhost ~]# yum install telnet.x86_64 -y
[root@localhost ~]# systemctl restart telnet.socket
在xshell新建窗口连接