这一篇将会给大家介绍一下一些关于工具的使用、jdk 的自定义安装、免密登录的配置、网卡文件的配置等等,经过上一篇的了解,大家应该不会怀疑我写出来的不够详细吧,但是有一些问题可能大家会遇上,但是我这边是没有的,所以有的话请大家私信我或者私信老师或者上网搜索,有问题欢迎一起讨论,篇幅较长,座椅目录我就放在下面,大家可以自行选取。
环境搭建
一、工具介绍
如果大家还记得一些计算机网络的知识,应该对 SSH
这个名词并不陌生,忘了也没事;SSH(Secure Shell)是一种加密的网络协议,用于通过不安全的网络(如互联网)安全地连接和传输数据。它通常用于远程登录到计算机系统并执行命令,也可以用于安全地传输文件。例如:XShell
、SecureCRT
和 XTerminal
;除了 SSH,还有传输时候会用到的工具,比如:XFTP
等;其中 XTerminal
,集成了传输的功能。
1. XShell
XShell 是一款功能强大的SSH客户端,专为Windows平台设计。它提供了一个直观的用户界面,支持多个会话窗口、分组管理、快捷键配置等功能。XShell支持多种身份验证方法,包括密码、公钥和基于证书的身份验证。它也支持文件传输和端口转发等功能。XShell是商业软件,但也有免费版本可供个人和非商业使用。
这里关于这个软件,有着业界最强大的SSH客户机之称,但是缺点是并不免费,但有一个优点是学生免费,但是需要进行学生认证,在我看来并不麻烦,很容易通过。这个软件给我最大的感觉就是:稳定;这玩意儿实在是太稳定了,很多的终端都会存在有波动导致终端卡顿的影响,比如我们大数据解压一个 100G 的图片压缩包的时候,不小心加了一个查看进度的选项,就会打印大量的文件名称输出,导致控制台一下子负荷过大,后面打印完了,也会卡顿,这里并不是说它不会卡,它也会,好处是,卡的没别的严重,比其他的终端快一些,所以还是比较建议大家下一个的。
2. XFTP
这个工具单纯用于传输文件,有着轻松地通过网络传文件的宣传,至少在虚拟机里面,我觉得它的宣传没有问题,到了服务器就不好说了,懂的都懂,但有个最大的优点,那就是跟 XShell
的互通性特别强。
3. XTerminal
这个工具是我现在最常用的工具了;缺点不少,比起 XShll
来说不够稳定,这玩意儿真的是网络波动稍微大那么一些都会卡顿;传输的时候感觉也没有 XFTP
稳定;其他方面的问题其实影响来说并没有想象中那么好;既然如此为什么我还要用呢?因为它的优点真的让我不得不抛弃掉对它的这一点点意见啊!!!
首先,它是免费的,而且不需要认证!!!当然人家也得吃饭,所以会有付费面板,但是免费完全够用!!!
其次,就是我最爱的优点,监控面板,以前都要打开一个终端窗口输入命令来监控,而且还不是实时的,现在有这玩意儿,我直接哭死!!!(如下图)
最后就是没什么优势的小优点,支持国产,它是深圳市罗湖一家公司进行开发和维护的软件,我只能说,这个真的做的很用心,让我这破大数据的都心动了,本来终端就只是为了打命令而已,是它让我看到了终端的其他可能。
4.总结
如果大家不嫌麻烦的话,可以选择 XShell + XFTP
的组合,会比较稳定,但是在快捷键上,可能跟 Windows 的使用上还是会有一定的区别,需要一定时间进行适应,并且无法直接打开文件进行编辑,有一定的学习周期,但是熟练之后会用的很舒畅;如果大家是小白,啥都不懂,啥都想简单一些,嫌麻烦的,请看过来,我给 XTerminal
浅浅地打个广告,它就是国产的骄傲,它就是好用,它可以直接打开文件进行编辑,并且适应 Windows 的快捷键习惯,全部集成,无需切换软件,经典多个愿望一次满足,唯一的缺点就是项目开展的时间短,所以稳定性不够高。
二、环境配置
本来这部分应该要给大家讲一下一些基本的 Linux
的命令的,但后面觉得大家好像学过这门课了,故这里只讲一些可能需要用到的软件包和安装的介绍,以及连接虚拟机的方法,免密登录,防火墙的关闭等等。
1. SSH 连接
SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。传统远程登录和文件传输方式,例如Telnet、FTP,使用明文传输数据,存在很多的安全隐患。随着人们对网络安全的重视,这些方式已经慢慢不被接受。SSH协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的网络服务。作为Telnet和其他不安全远程shell协议的安全替代方案,目前SSH协议已经被全世界广泛使用,大多数设备都支持SSH功能。
再次介绍一下有关 SSH 的知识,下面仅教大家如何实用工具进行连接,其它更深入的知识,各位如果有兴趣可以自行学习。
再次提醒,进行以下操作之前,请先打开虚拟机,开启虚拟机中的机器,否则操作将无效!!!
(1) XShell
首先是使用 XShell 进行连接,这里不对 XShell 的功能进行更多的讲解,毕竟说那么多都不如自己上手体验,如果大家有兴趣可以自己摸索一下功能,还是很多好玩的。
-
打开 XShell,开启后会有一个小的会话窗口,会话窗口的左上角有一个新建按钮,点击新建按钮新建会话(我这里原本已经有了会话,是之前就弄好的,大家新使用应该是什么都没有的)
-
点击新建后就可以配置该会话的属性了,刚点开就是左边类别中的连接这一类,左边类别中的每一个选项都是可以点击进行配置的,连接也是一个配置模块。在这里需要设置会话的名称、会话连接的机器的 IP,还有连接的端口号,如果大家对 Linux 有一定的理解,就会明白端口号的端倪;在 Linux 中,SSH 连接不一定是绑定在 22 号端口上,也有可能是别的端口,默认时候会是 22。配置完后请点击
用户身份验证
-
用户身份验证部分,需要大家配置登录虚拟机的用户名和密码,配置好后就可以点击
连接
,即可连接到虚拟机,如果只是配置不用连接,就点击确定即可退出。 -
第一次连接会有安全警告,需要接受主机秘钥,如果一次性连接,以后就不用了,可以点击
一次性接受(O)
,如果需要多次连接,可以点击接受并保存(S)
。 -
连接成功就会如下图所示,其它就跟 Linux 的终端一模一样了,大家可以先熟悉一下操作。
(2) XTerminal
XTerminal 的连接也是,只跟大家稍微讲述连接,不多做其它的更多的说明,大家尽量学习一下使用,这个软件对于虚拟机学习来说,缺点上不会那么明显,但对于服务器,还是最好使用 XShell。当然,毕竟是一个新的终端软件,所以肯定不会有 XShell 来的这么稳定,在使用中也发现隧道功能也没有 XShell 的稳定,所以不建议用来连接服务器。可能付费的话会更好,不太确定,毕竟我还没买,如果大家想使用付费功能并且有购买的欲望,在购买的时候有一个邀请码的地方,如果大家可以的话,能不能拜托大家填填我的邀请码HeZaoCha
,为方便大家复制,我单列一行出来。最后在提醒一下各位,适当消费,他这个终端基础版已经够用了,没必要说一定要买,真有使用需求酌情尝试,支持的前提是能吃饱饭兄弟们。
HeZaoCha
下面回归正题,我们开始连接使用
-
我已经不太记得启动的界面是什么样子的了,如果大家并不是类似我这样子的,可以看下图,点击
SSH
模块打开连接面板,然后再点击+服务器
。 -
点击之后,会出现一个配置连接的窗口,这个跟 XShell 看起来会有一些区别,详情请看下图,如果配置完了就可以点击
创建
来创建一个会话,如果不确定是否能连上,可以点击左下角测试连接
来测试连接情况。 -
如果配置没有问题,则测试连接的效果如下图
-
创建成功后,就会多出一个新的连接,如下图所示,然后点击
连接
,即可连接上虚拟机 -
连接成功效果如下图
-
下图是对界面的一些说明,大家可以查看一下,可以方便各位了解和使用该软件。
(3) XFTP
这是搭配 XShell 的一个传输文件的软件,如果想使用 XShell 的话,就需要使用该软件搭配进行传输。下面就浅浅说一下连接的事项
-
启动也是有一个会话窗口,在会话窗口中点击**
新建
**进入会话配置窗口 -
按照下图进行配置,然后再该窗口上方有一个
常规、选项
的按钮,点击选项
。 -
如果有中文安装的同学们,请在这边将编码改成
utf8
,不然会出现乱码的情况,完成后即可点击连接
。 -
然后,左边是主机界面,右边是虚拟机的文件目录了,单个文件传输双击待传输即可,多个文件传输先选中需要传输的文件然后拖动即可,文件夹也可以传输的。
2. 网络配置
这部分主要是因为 ip 地址会有租用期,如果到期了就会被释放掉,也就是 ip 地址改变的情况,所以我们需要为其设定一个固定的 ip 地址。首先我们需要用 XShell
或者 XTerminal
连接到虚拟机。然后进行下面的操作。
下载 vim
编辑器,这个不是刚需,使用 vi
也是可以的。
sudo yum install -y vim
下载 net-tools
工具,这个是查看网络信息的,比如使用 ifconfig
指令就需要先安装这个
sudo yum install -y net-tools
这里输出的信息说明该工具已经存在,无需下载。
使用 ifconfig
指令来查看基本的网络配置信息
ifconfig
192.168.17.132
为当前分配的 IP
地址,255.255.255.0
为当前的子网掩码。本来在安装的时候是 192.168.17.131
的,后面因为 ip 跳了,变成了 132,所以这里显示的就是 132 了。
编辑网卡文件,这里路径差不多的,但要注意最后一个网卡文件的文件名 ifcfg-en32
,这里可能会有所不同,有的是 ifcfg-en33
或者一些别的什么,根据自己情况进行修改。
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens32
修改 BOOTPROTO
属性为 static
,添加 IPADDR 和 NETMASK
。
IPADDR
设置为与虚拟网卡同一网段即可,可以在虚拟网络编辑器中找到子网,我这里可以设置为 192.168.17.2 ~ 192.168.17.254
,具体设置为多少根据情况而定,也可以在修改为之前使用 ifconfig
指令查看到的 IP
地址。
NETMASK
设置为 255.255.255.0
即可,如果集群很大,可以根据具体情况进行调整。
GATEWAY
设置为虚拟网络编辑器中 NAT设置
的网关,我这里是 192.168.17.2
,视具体情况进行调整。
各位还可以自行配置 DNS
地址,请视具体情况而定。
修改如下:
BOOTPROTO="static"
ONBOOT="yes"
IPADDR="192.168.17.132" # 虚拟机的 ip 地址
NETMASK="255.255.255.0"
GATEWAY="192.168.17.2" # 虚拟机的网关,与 ip 地址保持同一网关
DNS1="223.5.5.5" # 阿里云公共 DNS
DNS2="114.114.114.114" # 腾讯云公共 DNS
如下图所示:
重启网络
sudo systemctl restart network
没有报错即为成功,sudo
本应该需要输入密码,我这做了免密配置,所以没有输入密码的提示。
然后我们尝试 ping
一下百度,查看网络是否连通,这里我们直接 ping
百度的域名,顺便检测我们的 DNS
是否正常。
ping baidu.com
出现上图的结果就代表我们成功了。
3. 软件包安装
这一部分将给大家介绍我们将会用到的几个软件包,大家安装的虚拟机中不一定会有,所以这里给大家写一遍,让大家印象深刻一些,当然,如果不想用也可以,能找到替代的自然也很好。接下来的指令都会在命令行中进行操作,大家可以提前连接上虚拟机进行操作。
下面我们将会用到几个工具,有 wget
、vim
、net-tools
、openssh-server
(1) wget
wget
是一个常用的命令行工具,用于从网络上下载文件。它支持通过 HTTP、HTTPS 和 FTP 协议下载文件,并且具有很多有用的功能和选项。在本篇目中我们将用其来下载许多的安装包
我们可以通过输入 wget
来判断是否有下载该该工具
wget
出现 command not found
则说明找不到该命令,也就是说没有下载该工具
如下图所示则是说明已经下载了该工具
如未下载则需要输入下面命令安装该工具。
sudo yum install -y wget
出现有 Complete
说明该工具安装成功
该工具用途广泛,各位可以通过输入 wget --help
自行进行探索,下面也基本差不了多少,后续几个软件不再进行图片说明。
基本用法
-
下载文件:你可以使用 wget 命令下载文件。例如,要下载一个文件,可以运行以下命令:
wget <URL>
其中
<URL>
是要下载文件的网址。 -
断点续传:wget 支持断点续传,即在下载中断后可以从中断处继续下载而不是重新开始。这对于大文件或不稳定的网络连接非常有用。使用
-c
或--continue
选项启用断点续传。例如:wget -c <URL>
-
限速下载:你可以使用
--limit-rate
选项限制下载速度。这在需要控制网络带宽的情况下很有用。例如,要限制下载速度为1MB/s
,可以运行以下命令:wget --limit-rate=1m <URL>
-
递归下载:wget 可以递归下载一个网站的所有文件,并保持相对目录结构。这对于备份整个网站或下载某个目录的所有内容非常有用。使用
-r
或--recursive
选项进行递归下载。例如:wget -r <URL>
-
后台下载:你可以使用
-b
或--background
选项将下载任务放到后台运行,这样你可以继续使用终端。例如:wget -b <URL>
-
用户名和密码验证:如果下载需要用户名和密码进行验证,可以使用
--user
和--password
选项提供凭据。例如:wget --user=<username> --password=<password> <URL>
除了这些,各位还可以使用 wget --help
对 wget
工具一些基本选项的查看,如果大家想深入了解该工具,可以输入 man wget
查看该工具的文档
man wget
(2) vim
Vim
(Vi Improved)是一种功能强大的文本编辑器,它是 Vi
编辑器的改进版本。Vim
被广泛用于 Unix
、Linux
和类 Unix
系统上,也可在 Windows
和 Mac
等其他平台上运行。Vim
的设计理念是高效、可定制和面向程序员的。下面是对Vim的详细介绍:
- 模式:
Vim
有三种基本的工作模式:命令模式(Command mode)、插入模式(Insert mode)和可视模式(Visual mode)。
- 命令模式:启动Vim后进入的默认模式,可以执行各种命令,例如移动光标、复制粘贴、搜索替换等。
- 插入模式:在命令模式下按下插入命令(如i、o、a等)进入插入模式,可以输入和编辑文本。
- 可视模式:在命令模式下按下可视命令(如v、V等)进入可视模式,可以选择文本进行复制、粘贴或其他操作。
- 快捷键和命令:
Vim
提供了丰富的快捷键和命令,可以大大提高编辑效率。例如:
- 光标移动:h(左)、j(下)、k(上)、l(右)等。
- 复制粘贴:yy(复制一行)、dd(删除一行)、p(粘贴)等。
- 搜索替换:/(搜索)、😒/old/new/g(替换)等。
- 撤销和重做:u(撤销)、Ctrl + r(重做)等。
- 可定制性:
Vim
非常可定制,用户可以根据自己的需求进行配置。可以编辑Vim的配置文件(.vimrc)来设置自定义的快捷键、颜色方案、插件等。Vim还支持脚本语言,如Vim脚本(Vim script)和Python等,使得用户可以编写自己的扩展功能和插件。- 插件和扩展:
Vim
支持各种插件和扩展,可以增加额外的功能和特性。有许多流行的插件,如语法高亮、代码补全、文件资源管理器等,可以通过插件管理工具(如Vundle、Pathogen、vim-plug等)轻松安装和管理。- 强大的编辑功能:
Vim
提供了丰富的编辑功能,包括块操作、宏录制、折叠文本、多窗口编辑等。这些功能使得处理大文件和代码编辑更加高效和便捷。- 远程编辑:
Vim
支持通过网络远程编辑文件。使用Vim的远程编辑功能,可以通过SSH
连接到远程主机,并在本地使用Vim
编辑远程文件,方便远程开发和协作。
下载指令
sudo yum install vim -y
基本用法
- 打开文件:在命令行中输入
vim
命令,后跟要编辑的文件名,例如vim filename.txt
。如果文件不存在,Vim将创建一个新文件。 - 基本操作模式:
- 命令模式(Command mode):打开Vim后进入的默认模式。在此模式下,可以执行各种命令。例如,使用
h
、j
、k
、l
键进行光标移动,使用yy
复制一行,使用dd
删除一行等。 - 插入模式(Insert mode):在命令模式下按下
i
、o
、a
等键进入插入模式。在插入模式中,可以输入和编辑文本。 - 可视模式(Visual mode):在命令模式下按下
v
、V
等键进入可视模式。在可视模式中,可以选择文本并执行操作,如复制、剪切、删除等。
- 命令模式(Command mode):打开Vim后进入的默认模式。在此模式下,可以执行各种命令。例如,使用
- 保存和退出:
- 在命令模式下,输入
:w
保存文件。 - 输入
:q
退出Vim。 - 输入
:wq
保存并退出。 - 输入
:q!
强制退出并放弃对文件的修改。
- 在命令模式下,输入
- 光标移动:
h
:向左移动一个字符。j
:向下移动一行。k
:向上移动一行。l
:向右移动一个字符。gg
:跳转到文件的开头。G
:跳转到文件的末尾。0
:跳转到当前行的开头。$
:跳转到当前行的末尾。
- 文本编辑:
i
:在光标前插入文本。a
:在光标后插入文本。o
:在当前行下方插入新行。dd
:删除当前行。yy
:复制当前行。p
:粘贴剪贴板中的内容。u
:撤销上一步操作。Ctrl + r
:重做撤销的操作。
- 搜索和替换:
/pattern
:搜索指定模式的文本。按下n
跳转到下一个匹配项。:s/old/new/g
:替换当前行中所有的old
字符串为new
字符串。:%s/old/new/g
:替换整个文件中所有的old
字符串为new
字符串。:%s/old/new/gc
:替换整个文件中所有的old
字符串为new
字符串,并在替换前请求确认。
- 分割窗口:
:split
:水平分割窗口。:vsplit
:垂直分割窗口。Ctrl + w
,然后按下h
、j
、k
、l
切换焦点。
- 定位行号:
- 输入行号+
G
:跳转到指定行号。 :n
:跳转到指定行号。
- 输入行号+
(3) net-tools
net-tools
是一组用于网络配置和监控的命令行工具集合,常用于 Unix
、Linux
系统。它提供了许多命令,可以帮助用户查看和配置网络接口、路由表、网络连接等信息。下面是对 net-tools
的详细介绍:
ifconfig
:ifconfig
命令用于查看和配置网络接口的信息。通过ifconfig
,可以获取到网络接口的IP
地址、子网掩码、MAC
地址等信息。此外,ifconfig
还可以启用或禁用网络接口,配置网络接口的参数,例如设置IP
地址、子网掩码、广播地址等。route
:route
命令用于查看和配置系统的路由表。路由表是记录数据包传输的规则和路径的表格。通过route
命令,可以查看当前系统的路由表,包括目的网络、网关、接口和跃点数等信息。同时,route
还可以添加、删除或修改路由表的条目,从而改变数据包的传输路径。netstat
:netstat
命令用于查看系统的网络连接和网络统计信息。通过netstat
,可以获取到系统当前的网络连接状态,包括正在监听的端口、已建立的连接、连接的状态等。netstat
还可以显示网络接口的统计信息,如接收和发送的数据包数量、错误信息等。arp
:arp
命令用于查看和操作系统的ARP
(地址解析协议)缓存表。ARP
用于将IP
地址解析为MAC
地址。arp
命令可以显示当前系统的ARP
缓存表,包括IP地址和对应的MAC
地址。此外,arp
还可以手动添加或删除ARP缓存表的条目。iptunnel
:iptunnel
命令用于创建和管理IP
隧道。IP隧道是一种将IP
数据包封装在其他协议中进行传输的技术。通过iptunne
l命令,可以创建和配置IP
隧道,例如设置隧道的本地和远程端点、隧道的传输协议等。hostname
:hostname
命令用于查看和设置系统的主机名。主机名是唯一标识网络中计算机的名称。通过hostname
命令,可以获取当前系统的主机名,也可以修改系统的主机名。
下载指令
sudo yum install net-tools -y
基本用法
ifconfig
:用于查看和配置网络接口的信息。ifconfig
:显示当前系统上所有网络接口的信息。ifconfig eth0
:显示指定网络接口(例如eth0)的详细信息。ifconfig eth0 up
:启用指定网络接口。ifconfig eth0 down
:禁用指定网络接口。ifconfig eth0 192.168.0.100 netmask 255.255.255.0
:为指定网络接口配置IP地址和子网掩码。
route
:用于查看和配置系统的路由表。route
:显示当前系统的路由表。route -n
:以数字格式显示路由表,而不解析IP地址和主机名。route add default gw 192.168.0.1
:添加默认网关。route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.1
:添加静态路由。
netstat
:用于查看系统的网络连接和网络统计信息。netstat
:显示当前系统的网络连接状态。netstat -tuln
:显示TCP和UDP监听端口。netstat -r
:显示路由表。netstat -s
:显示网络统计信息,如接收和发送的数据包数量、错误信息等。netstat -p
:显示与进程关联的网络连接。
arp
:用于查看和操作系统的ARP(地址解析协议)缓存表。arp
:显示当前系统的ARP缓存表。arp -a
:以IP地址的格式显示ARP缓存表。arp -d 192.168.0.1
:从ARP缓存表中删除指定IP地址的条目。arp -s 192.168.0.1 00:11:22:33:44:55
:手动添加指定IP地址和MAC地址的ARP条目。
iptunnel
:用于创建和管理IP隧道。iptunnel add mytunnel mode ipip remote 192.168.1.2 local 192.168.1.1
:创建一个IP隧道。iptunnel del mytunnel
:删除指定的IP隧道。iptunnel list
:显示当前系统上的IP隧道列表。
这里需要特别注明一下,因为 CentOS 7
即将停止维护了,所以,有些东西不一定说还是一成不变,比如 net-tools
在别的操作系统例如:Debain
、Ubuntu
中可能不会有,但是会有 ip
这个工具存在,你妹看错,这工具就叫 ip
,如果想查看 IP 地址的朋友们可以试试 ip a
,当然这是一个快捷施法,他的完整版是 ip address
(4) Openssh-server
OpenSSH
是一个用于安全远程登录和文件传输的开源工具套件,而 OpenSSH
服务器(OpenSSH Server)则是 OpenSSH
的服务器端组件。OpenSSH
服务器提供了安全的远程访问和管理机制,使得用户可以通过 SSH
协议远程连接到服务器,并进行安全的命令行操作和文件传输。下面是对 OpenSSH
服务器的介绍:
- 安全远程登录:
OpenSSH
服务器允许用户通过SSH
(Secure Shell)协议安全地远程登录到服务器。SSH
通过加密和身份验证机制保护登录过程的安全性,可以有效地防止密码被窃听和中间人攻击。用户可以使用SSH
客户端工具连接到OpenSSH
服务器,输入用户名和密码(或使用密钥认证),并在远程服务器上执行命令。- 加密通信:
OpenSSH
服务器提供了端到端的加密通信,保护了用户和服务器之间的数据传输。所有通过OpenSSH
服务器进行的远程会话、文件传输和端口转发等操作都经过加密处理,使得数据在传输过程中不容易被窃听和篡改。- 身份验证机制:
OpenSSH
服务器支持多种身份验证机制,包括密码认证、公钥认证和证书认证。密码认证是最常见的方式,用户需要提供用户名和密码来登录。公钥认证使用密钥对,用户将公钥存储在服务器上,私钥用于身份验证。证书认证使用数字证书,由可信的证书颁发机构签发。- 文件传输:除了远程登录,
OpenSSH
服务器还支持安全的文件传输功能。用户可以使用SCP
(Secure Copy)或SFTP
(SSH File Transfer Protocol)等工具,在客户端和服务器之间进行文件的上传和下载。这些文件传输操作都经过加密处理,保护了文件的机密性和完整性。- 端口转发和隧道:
OpenSSH
服务器支持端口转发和隧道功能。通过端口转发,用户可以在本地和远程主机之间建立安全的通信通道,实现本地端口的映射和远程访问。这对于远程访问内部网络资源或建立安全的远程服务非常有用。- 配置和安全性:
OpenSSH
服务器提供了灵活的配置选项,可以根据实际需求进行定制。管理员可以通过修改配置文件(通常是sshd_config
)来调整服务器的行为,包括监听端口、身份验证方法、访问控制和安全选项等。通过适当的配置和安全措施,可以增强OpenSSH服务器的安全性,例如限制用户访问、禁用密码认证、限制SSH
协议版本等。
下载指令
sudo yum install openssh-server -y
基本用法
- 安装OpenSSH服务器:
- 在Debian/Ubuntu上,使用以下命令安装OpenSSH服务器:
sudo apt-get install openssh-server
- 在Red Hat/CentOS上,使用以下命令安装OpenSSH服务器:
sudo yum install openssh-server
- 在Debian/Ubuntu上,使用以下命令安装OpenSSH服务器:
- 启动和停止OpenSSH服务器:
- 在Systemd系统上,使用以下命令启动OpenSSH服务器:
sudo systemctl start sshd
- 在Systemd系统上,使用以下命令停止OpenSSH服务器:
sudo systemctl stop sshd
- 在SysV Init系统上,使用以下命令启动OpenSSH服务器:
sudo service sshd start
- 在SysV Init系统上,使用以下命令停止OpenSSH服务器:
sudo service sshd stop
- 在Systemd系统上,使用以下命令启动OpenSSH服务器:
- 远程登录:
- 使用SSH客户端连接到OpenSSH服务器:
ssh username@hostname
- 例如,使用用户名为"username"和主机名为"example.com"的SSH连接:
ssh username@example.com
- 如果使用默认的SSH端口(22),则可以省略端口号:
ssh username@hostname
- 使用SSH客户端连接到OpenSSH服务器:
- 配置文件:
- OpenSSH服务器的配置文件为
/etc/ssh/sshd_config
。 - 可以使用文本编辑器(如vim)编辑配置文件:
sudo vim /etc/ssh/sshd_config
。 - 在配置文件中,可以设置各种选项,如监听端口、身份验证方法、访问控制等。
- 修改配置文件后,需要重新启动OpenSSH服务器使更改生效。
- OpenSSH服务器的配置文件为
- 密钥认证:
- OpenSSH服务器支持公钥认证,提供更安全的登录方式。
- 生成密钥对(公钥和私钥):
ssh-keygen -t rsa
- 将公钥复制到OpenSSH服务器上的
~/.ssh/authorized_keys
文件中,以实现无密码登录。
- 文件传输:
- 使用SCP(Secure Copy)命令从本地系统上传文件到远程系统:
scp localfile username@hostname:remotefile
- 使用SCP命令从远程系统下载文件到本地系统:
scp username@hostname:remotefile localfile
- 使用SCP(Secure Copy)命令从本地系统上传文件到远程系统:
- 端口转发:
- OpenSSH服务器支持端口转发功能,用于建立安全的通信通道。
- 本地端口转发:
ssh -L local_port:destination:destination_port username@hostname
- 远程端口转发:
ssh -R remote_port:destination:destination_port username@hostname
- 登录访问控制:
- 在OpenSSH服务器的配置文件中,可以设置允许或拒绝登录的用户或IP地址。
- 可以使用
AllowUsers
选项限制允许登录的用户列表。 - 可以使用
AllowGroups
选项限制允许登录的用户组列表。 - 可以使用
DenyUsers
选项限制禁止登录的用户列表。 - 可以使用
DenyGroups
选项限制禁止登录的用户组列表。
4. 新建用户(选做)
这一部分,主要做一个小拓展,因为我是觉得,新不新建一个用户都可以的,这个其实大差不差的,就算是真正的生产开发环境也就只有一个账户给到我们,所以我觉得我们更需要学习如何在普通用户的环境下搭建属于我们自己的环境,而不是有问题就想着切换用户。这里新建用户部分我们只作了解,大家也可以使用该用户进行部署和实验,这个与我们一开始建立的用户并无区别,后面我也会使用刚开始的用户来进行部署操作。
新建一个用户名为 hadoop
的新用户,这个步骤最主要是为了让大家养成一个良好的习惯,以下是创建新用户的一些作用:
- 访问控制和安全性:通过创建新用户,可以实现访问控制和安全性。每个用户都有独立的用户名和密码,这样可以确保只有授权的用户可以登录系统。每个用户拥有自己的用户目录(Home Directory),并且对其他用户的文件和系统文件具有有限的访问权限。这种分离和控制的机制有助于防止未经授权的访问和滥用系统资源。
- 多用户环境:
Linux
是一个多用户操作系统,支持多个用户同时使用系统。通过创建新用户,可以为每个用户提供独立的工作环境和个人配置。每个用户可以自定义自己的Shell
环境、环境变量、别名和命令历史等。这种分离的用户环境有助于提高用户之间的隔离性和工作效率。- 文件和目录权限管理:
Linux
系统中的文件和目录都有访问权限。通过创建新用户,可以为每个用户分配适当的文件和目录权限。这样可以确保用户只能访问他们需要的文件和目录,并限制对系统关键文件的访问。通过正确设置权限,可以保护系统的安全性和数据的机密性。- 进程管理和资源限制:每个用户在
Linux
系统中运行的程序和进程都属于该用户。通过创建新用户,可以实现进程管理和资源限制。管理员可以为每个用户设置进程和资源限制,例如限制最大进程数、最大内存使用量、最大文件打开数等。这有助于防止用户滥用系统资源,并提高系统的稳定性和可靠性。- 审计和日志跟踪:创建新用户还有助于审计和日志跟踪。每个用户的活动和操作都可以被跟踪并记录,包括登录时间、执行的命令、文件访问等。这些日志和审计信息对于故障排除、安全审计和合规性要求非常重要。
在生产过程中,通过为每个用户分配独立的账户,可以实现对用户活动的有效控制和跟踪,从而确保系统的稳定性、安全性和高效性。
创建用户时,我们需要使用 sudo
或者使用 root
用户进行创建,因为普通用户是没有权限创建新用户的,会显示 Permission denied
和 cannot lock /etc/passwd; try again later
这样的标识。这里我们以普通用户使用 sudo
命令进行新用户的创建,如果不想使用 sudo
,可以先进入 root
用户然后再创建。
sudo useradd hadoop # 创建一个新用户,用户名为 hadoop
sudo passwd hadoop # 设置 hadoop 用户的密码
但是此时新建的用户是无法使用 sudo
命令的,我们还必须将其配置到 sudoers
文件中去
(1) 拓展
在使用 hadoop
集群过程中我们是不需要使用到 root
权限的,所以我们可以在部署完成后使用该用户进行使用。如果需要为其添加管理员权限,是需要在 /etc/sudoers
,这个文件中进行配置的,需要将用户名加入到 root
用户的下面。
sudo vim /etc/sudoers
这里需要注意的就是缩进和空格,我是严格按照上面 root
用户的缩进和空格进行输入的,所以希望大家输入的时候也参照一下自己文件里面的输入,因为不知道会发生什么别的错误。
用户名 ALL=(ALL) ALL
输入完成,然后就可以保存并退出了,然后我们在新用户下尝试一下编辑 /etc
目录下的文档,就可以查看自己是否有 root
权限了
sudo vim /etc/sudoers
如需新用户使用 sudo
时不用输密码,把最后一个 ALL
改为 NOPASSWD:ALL
即可。
之后的部署我还是采用带有 sudo
权限的普通用户,因为仅仅是学习用途,大家稍微了解一下即可。
5. 防火墙关闭
在部署环境的过程中,我们需要将防火墙进行关闭,以下是关闭防火墙的目的:
应用程序需要特定的网络连接: 某些应用程序可能需要通过特定的端口或协议进行网络通信。防火墙的默认配置可能会阻止这些连接,因此关闭防火墙可以确保应用程序能够正常建立所需的网络连接。
简化网络配置和故障排除: 在某些情况下,防火墙的配置可能会很复杂,特别是当你有多个网络规则和端口需要管理时。关闭防火墙可以简化网络配置,减少可能的故障,并简化故障排除过程。
测试和开发环境的需要: 在测试和开发环境中,通常需要频繁地安装、配置和测试各种应用程序和服务。关闭防火墙可以简化这些环境的设置,避免网络连接问题对开发和测试造成的干扰。
本篇为学习用途,所以可以放心将虚拟机的防火墙关闭,如果是在实际生产环境中,个人还是不建议关闭防火墙的。
防火墙在 CentOS
中一般有两种,一种是原生态的 firewalld
,另一种是 iptables
。下面我来对这两个防火墙进行一下说明
firewalld:
- 用途:
firewalld
是一个动态的防火墙管理工具,旨在提供简化的管理界面和配置选项。它支持在运行时动态更新防火墙规则,并提供了更高级的功能,如服务管理、区域管理和网络接口管理。- 不同点:
firewalld
基于网络区域的概念,可以为每个区域(如公共、内部、DMZ)定义不同的安全策略。它还支持通过 D-Bus 接口进行远程管理,并具有良好的日志和审计功能。- 优势:
firewalld
的优势在于其动态性和可管理性。它可以在运行时更改防火墙规则,无需重启服务或断开连接。它还提供了一套高级的管理工具和接口,使配置和管理更加简单和灵活。iptables:
- 用途:
iptables
是Linux
系统上的一个经典防火墙工具,用于配置和管理内核的网络数据包过滤规则。它通过定义不同的规则链和规则来控制网络流量,实现网络安全策略的实施。- 不同点:
iptables
是一个底层的、静态的防火墙配置工具。它的配置是基于预定义的表、链和规则的,需要手动更新配置文件或使用命令行工具进行修改。iptables
对于高级网络过滤和路由设置提供了更大的灵活性和细粒度的控制。- 优势:
iptables
的优势在于其灵活性和可定制性。它提供了丰富的规则选项,可以根据特定的需求定义复杂的网络过滤和转发规则。iptables
还具有广泛的社区支持和文档资源。
比较两者的优劣性是一个复杂的问题,因为它们有不同的设计目标和适用场景,所以我们只进行一些最初始的比较,这并不能作为衡量二者好坏的依据,请大家根据实际情况进行选择使用。
动态性和可管理性:
firewalld
在动态性和可管理性方面具有优势,可以在运行时动态更改配置,提供更高级的管理界面和选项。而 iptables 的配置是静态的,需要手动编辑配置文件或使用命令行工具进行修改。灵活性和定制性:
iptables
在灵活性和定制性方面具有优势,可以提供更细粒度的网络过滤和路由控制。它允许用户根据具体需求定义复杂的规则和链。社区支持和成熟度:
iptables
是一个经过时间验证的工具,具有广泛的社区支持和文档资源。firewalld
是较新的工具,虽然也有一定的社区支持,但相对而言可能没有iptables
那么成熟。
可以使用指令来查看是否有安装 firewalld
和 iptables
防火墙
systemctl status firewalld # 查看 firewalld 服务运行状态
systemctl status iptables # 查看 iptables 服务运行状态
根据图中情况,我这里只有 firewalld
防火墙。
输入下面指令进行防火墙的关闭并且对其进行禁用。
sudo systemctl stop firewalld # 关闭 firewalld
sudo systemctl disable firewalld # 禁用 firewalld
关闭的时候需要输入两次密码,如果遇到 Permission denied
则是因为权限不足,此时请在开头加上 sudo
提升权限再进行关闭禁用。请注意,禁用的意思是指不会随着系统启动而自动启动,但是手动启动并不受影响。
最后我们在查看一下防火墙的运行情况
systemctl status firewalld
以下两个标识即为我们需要的状态了。
6. 免密登录
首先给大家科普一下 SSH 免密的具体过程,SSH服务器和客户端通过密钥交换算法,动态生成共享的会话密钥和会话ID,建立加密通道。会话密钥主要用于后续数据传输的加密,会话ID用于在认证过程中标识该SSH连接。在该阶段也会完成客户端对服务器的身份认证,服务器先使用服务器私钥对消息进行签名,客户端再使用服务器公钥验证签名,从而完成客户端对服务器的身份认证。由于SSH服务器和客户端需要持有相同的会话密钥用于后续的对称加密,为保证密钥交换的安全性,SSH使用一种安全的方式生成会话密钥,由SSH服务器和客户端共同生成会话密钥,利用数学理论巧妙地实现不直接传递密钥的密钥交换,无需通过不安全通道传送该密钥,具体过程如下图所示。
在用户认证上,SSH用户认证最基本的两种方式是密码认证和密钥认证。密码认证的基本原理是SSH客户端使用对称密钥对密码进行加密,SSH服务器使用对称密钥解密后验证密码的合法性,这种认证方式比较简单,且每次登录都需要输入用户名和密码。而密钥认证可以实现安全性更高的免密登录,基本原理是SSH客户端使用客户端私钥对消息进行签名,服务器再使用客户端公钥验证签名,这是一种广泛使用且推荐的登录方式。
具体就是,我们需要在客户端,生成秘钥和公钥,发送到服务器端进行存储,在登陆的时候,选择验证密钥认证而非密码认证的方式进行登录,客户端会通过用户名、公钥以及公钥算法等信息来与服务器进行认证,认证通过即可实现登录,无需密码。下面我们开始实操
-
在配置免密之前,需要大家先查看自己的主机名称,然后设置主机名称为小写,否则在后续部署中会出现问题,输入下面指令查看主机名称
hostname
这里我的主机名称存在大写字母,后续在部署上会出问题,所以需要修改
-
输入指令
hostnamectl set-hostname 主机名称
,验证当前用户密码,密码无误即可更改主机名称,这里我改为hadoop
,各位可以酌情自行修改。hostnamectl set-hostname hadoop
-
最后我们再次查看主机名称,确认无误再进行免密配置
hostname
-
在终端输入
ssh-keygen -t rsa
,创建公钥和私钥,遇到提示按下回车即可,然后需要将密钥拷贝到authorized_keys
文件中,我们使用cat
命令,新建并且追加文件内容,最后需要确保.ssh
目录的目录权限是700
,也就是rwx------
,以及authorized_keys
文件的权限是600
,也就是rw-------
,下面命令跟图会有一点不太一样,我加上了~/
,这表示的是当前的用户目录,因为我们可能会使用cd
命令进入了其他的目录中,为了减少大家出错的概率,我就加上了;当然,如果大家切换了切换了用户,然后后续部署的时候又不用那个用户,那么就算做好了免密也没用,因为免密是对于某个用户登录某个机器而言的,请大家注意不要走错用户。下面我用有一些注释写在了代码框中,这个是不影响大家的复制黏贴的,命令行中#
后面跟着的内容会被识别成注释的,所以大家不用担心。ssh-keygen -t rsa # 生成公钥和私钥 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 将密钥内容追加到 authorized_keys 文件中 chmod 600 ~/.ssh/authorized_keys # 修改 authorized_keys 文件的权限为 rw------- chmod 700 ~/.ssh/ # 修改 .ssh 目录的权限为 rwx------
-
大家可以通过
ls -l
命令查看文件或者目录的权限,下面指令中带有grep
命令,是一个筛选命令,大家也可以了解学习一下该命令,也是 Linux 中的常用命令。ll -a | grep .ssh # 查看名称中带有 .ssh 的目录或文件的权限 ll .ssh/ | grep au # 查看名称中带有 au 的目录或文件的权限
-
最后我们重启一下
ssh
的服务,然后测试是否可以免密登录,这里的localhost
是指代当前使用的机器,也就是虚拟机,不是指主机。然后第一次使用ssh
连接自己会有连接的确认,输入yes
然后回车即可。sudo systemctl restart sshd.service # 重启 ssh 服务 ssh localhost # 使用当前用户名连接当前机器
可以看见,上面直接就登录进去了,完全不需要密码,这就说明我们成功了,如果连接自己还需要输入密码则说明我们的免密登录没有做好,需要重新进行配置。
三、总结
这一篇主要是为大家在部署前作最后的保障,这个时候可能各位已经部署完成了,也就是说我这一篇其实也没什么必要,但是生怕大家在未来的环境中又出现问题,所以我还是写了,希望大家能更加便捷的完成这一课程,感谢各位能看到这里,也希望大家考研考公四六级教资等考试一切顺利。