嵌入式技术
Linux主要应用于服务器领域,而服务器不可能像PC机那样放在办公室,它们是放在IDC机房的,所以阿铭平时登录Linux系统都是通过网络远程登录的。
Linux系统通过SSHD服务实现远程登录功能。这个SSHD服务默认开启了22端口,当我们安装完系统时,该服务已经安装,并且是开机启动的。所以,我们不需要额外配置什么就能直接远程登录Linux系统。SSHD服务的配置文件为/etc/ssh/sshd_config,你可以根据需求修改这个配置文件,比如我们可以更改启动端口为11587,但这个数字不要超过65535。
如果你安装的是Windows操作系统,则需要额外安装一个Linux远程登录的终端软件。目前比较常见的终端登录软件有MobaXterm、Xshell、SecureCRT、PuTTY等。很多朋友喜欢用SecureCRT,因为它的功能非常强大,而阿铭喜欢用PuTTY,因为它小巧且显示的颜色漂亮。最近阿铭也在使用Moba Xterm,也非常不错,值得大家研究一下。但不管你使用哪一个客户端软件,最终的目的只有一个 —— 远程登录到Linux服务器上。下面章节阿铭会带着大家学习并使用MobaXterm工具。
4.1 安装MobaXterm
MobaXterm有免费版和收费版,其中免费版有session数量限制,如果你所管理的服务器数量很大,建议购买收费版。MobaXterm内置了SFTP、FTP、Telnet、VNC客户端,非常实用。
4.1.1 下载MobaXterm
前些年网上曾报道过,某个中文版的PuTTY被别有用心的黑客动了手脚,给植了后门,像这种SSH客户端软件被植入后门,后果会非常严重。所以阿铭提醒各位小伙伴,以后不管你下载什么软件,尽量去该软件的官方站点下载,如果不知道地址,可以到百度或者bing搜一下。MobaXterm的官方下载地址为https://mobaxterm.mobatek.net/download.html。打开下载页面后,我们可以看到有Home Edition和Professional Edition两个版本,其中Home Edition为免费版,但是最多只支持12个session,对于我们学习来说足够了。
点击Download now按钮进入下载页,此时可以看到它又分成了Portable edition和Installer edtion,其中Portable edition为免安装版本,建议大家下载个Installer editon。
4.1.2 安装
下载MobaXterm的安装包后,双击MobaXterm_Installer_v22.1.zip,然后再双击MobaXterm_installer_22.1.msi进入安装界面。
直接单击Next按钮,勾选I accept the terms in theLicense Agreement,继续点Next按钮和Install按钮即可完成安装。
4.2 远程登录
在上一章中,我们已经给Rocky设置了IP地址(192.168.195.101),并且这个IP地址是静态的,即使你的VMware重启过,它也不会变。设置IP地址的目的除了要使用yum工具外,另一个作用就是远程连接Linux操作系统了。
4.2.1 使用密码直接登录
打开MobaXterm后,请按照如下步骤连接远程Linux服务器。
1) 创建session
填写Linux基本信息的对话框如下图所示,
其中Host Name(or IP address)这一栏填写服务器IP为192.168.195.101,Specify Username用来定义要登录的用户名,因为我们要登录root用户,所以这里写root,Port这栏采用默认设置即可。Bootmark settings用来定义session的名字,这里你可以自定义,主要用来区分主机,因为将来你的主机会很多,写个简单的名字既方便记忆又能快速查找。
点确认后,即可进入到登录界面,此时需要输入密码
输入密码后回车,弹出是否需要保存密码的提示,如果想要保存密码,就点Yes。
然后继续定义Master Password
然后再点击OK,终于进入Linux系统了。
4.2.2 使用密钥认证
SSH服务支持一种安全认证机制,即密钥认证。所谓密钥认证,实际上是使用一对加密的字符串:其中一个称为公钥(public key),用于加密,任何人都可以看到其内容;另一个称为私钥(privatekey),用于解密,只有拥有者才能看到其内容。通过公钥加密过的密文,使用私钥可以轻松解密,但根据公钥来猜测私钥却十分困难。SSH的密钥认证就是使用了这一特性。
服务器和客户端都各自拥有自己的公钥和私钥,MobaXterm可以使用密钥认证登录Linux,具体的操作步骤如下。
1)生成密钥对
在菜单中找到Tools,然后选择MobaKeyGen单击。
单击Generate,注意,这里要来回动一动鼠标,否则生成密钥会很慢。
其中红框里面的内容就是公钥,这部分内容可以直接用鼠标选中,然后按Ctrl c复制,等会要粘贴到Linux里面去。
你还可以定义密钥的密码,如下图红框所示,也可以留空,即密钥不设置密码。
2)保存私钥
点击Save Private Key保存私钥,请把它保存到一个比较安全的地方,谨防丢失或被其他人看到。然后就可以关闭该窗口啦。
3)复制公钥到Linux
下面我们把刚复制的公钥粘贴到Linux的文件中。下面请跟着阿铭一起来操作,运行如下命令:
# mkdir /root/.ssh //创建/root/.ssh目录,因为这个目录默认是不存在的 # chmod 700 /root/.ssh //更改这个目录的权限 # vi /root/.ssh/authorized_keys//把公钥内容粘贴到文件/root/.ssh/authorized_keys里
关于mkdir和chmod这两个命令,阿铭会分别在下一章节中详细介绍。在vi命令之后直接回车,输入i进入编辑模式,然后单击鼠标右键,它会弹出一个提示框,我们选择下面的选项,意思是点击右键直接粘贴,这是MobaXterm工具非常方便的一个功能。
粘贴后,按Esc键,然后输入:wq并回车,保存并退出该文件。
4)关闭SELinux
关于SELinux,上一章我们也提到过,它是Rocky的一种安全机制,它的存在虽然让Linux系统安全了很多,但也产生了不少麻烦。这里如果不关闭SELinux,使用密钥登录会提示 Server refused our key,从而导致不能成功。需要运行如下命令来关闭SELinux:
# setenforce 0
这只是暂时关闭,下次重启Linux后,SELinux还会开启。若要永久关闭,必须运行如下命令:
# vi /etc/selinux/config
回车后,把光标移动到SELINUX=enforcing这一行,输入i进入编辑模式,修改为SELINUX= disabled。按Esc键,然后输入:wq并回车,最后重启系统。
5)设置通过密钥登录
找到刚才保存的session,右键单击,选择Edit Session。
单击Advanced SSH settings,找到下面的Use private key勾选上,然后选择刚刚保存的私钥文件
6)使用密钥验证登录Linux
点击ok后,双击刚才的session,就可以自动登录了,但是这还不能确定是否使用了密钥,毕竟我们刚才的密码也被保存到了MobaXterm里,也不用输入密码就能登录,你可以通过下面的命令查看日志:
# jounal -u sshd
如果有看到Accepted publickeyfor root字眼就说明密钥认证成功了。如果先前生成密钥时你有设置密码,则在登录时需要输入密钥密码才可以登录系统。有很多朋友在做密钥认证的时候会失败,只要你注意这几点就一定可以成功:
/root/.ssh目录权限为700;
SELinux要关闭;
/root/.ssh/authorized_keys文件名要写对;
文件内容要粘贴对。
假如你还有一台机器要使用密钥验证登录Linux,你学会如何设置了吗?MobaXterm的设置方法是一样的,使用同样的私钥,不需要你再次生成密钥对了。另外,把192.168.195.101上的文件/root/.ssh/authorized_keys复制一份到另一台机器就可以了。请注意,这个文件的名字是固定的。
在本例中,阿铭教大家的是直接使用密钥登录root用户,但在工作中很多朋友登录的是普通用户,而不是root。那普通用户的密钥认证如何设置呢?原理肯定是一样的,同样要先有密钥对,然后把公钥放到服务器上,不过并不是/root/.ssh目录下面了,而是普通用户家目录下面的.ssh目录下。那普通用户家目录在哪里?第6章讲到用户管理时,阿铭会详细介绍,在这里阿铭举一个例子,比如你登录的普通用户为aming,那么aming用户的家目录为/home/aming。还有一点大家要注意,在Linux机器上所做的操作(如创建.ssh目录)也必须以aming用户身份操作才可以。
4.3 两台Linux相互登录
既然可以在Windows上安装一个客户端软件(比如MobaXterm)去登录远程的Linux,那么在Linux上是否也可以登录另一台Linux呢?当然,在Linux上也需要安装一个客户端软件。Rocky自带的客户端软件叫作openssh-clients。
检测是否安装,需要运行如下命令:
# ssh -V OpenSSH_8.0p1, OpenSSL 1.1.1kFIPS 25 Mar 2021
这样会显示出OpenSSH的版本信息。如果没有显示类似的信息,请运行如下命令安装:
# yum install -yopenssh-clients
4.3.1 克隆Rocky
要完成本实验,还需要有一台Linux机器,你可以按照2.2节再安装一台Rocky。但阿铭觉得那样做太浪费时间,其实还有一个更好的方法 —— 克隆虚拟机。
首先,关闭正在运行的Rocky,正确的关机命令是shutdown -hnow或者init 0。然后在左侧对应的虚拟机名字上单击鼠标右键,选择“管理”,再选择“克隆”,如下图所示。
此时会出现“克隆向导”界面。直接点击“下一步”按钮,再点击“下一步”按钮,会出现“克隆类型”对话框,这里采用默认值即可,即选择“创建链接克隆”,这种类型会节省空间,比较方便。继续点击“下一步”按钮,你可以设定克隆虚拟机的名称和保存的路径。接着点击“完成”和“关闭”按钮,最终完成Rocky 8的克隆。此时,不管是在左侧“我的电脑”下面还是在右侧“选项卡”,都多出来一个克隆后的Rocky 8虚拟机。
把两台Rocky8全部启动。先登录克隆的虚拟机,使用3.2章节的方法给这台Rocky 8也配置一个静态IP地址。
为了容易区分两台Rocky 8,下面阿铭教你设置主机名。我们不妨给第一台起个名字aminglinux-01,第二台叫作aminglinux-02。请在第一台Rocky 8上运行如下命令:
# hostnamectl set-hostname aminglinux-01
可以使用快捷键Ctrl+D退出当前终端,然后再登录一次,就会发现命令行左边的前缀有所变化了。使用同样的方法,也将第二台Rocky 8的主机名设置为aminglinux-02。
4.3.2 使用密码登录
使用前面的方法,通过PuTTY远程登录aminglinuxlinux-02,然后在这台机器上执行如下命令:
# ssh root@192.168.195.102 //第一次登录对方机器,有一个提示 The authenticity of host '192.168.195.102(192.168.195.102)' can't be established. ECDSA key fingerprint is 26:e3e7ae33aa5f0efa. Are you sure you want to continue connecting (yes/no)
这里我们输入yes,然后回车,又出现一个如下的警告,它的意思是保存了192.168.195.102这台机器的信息:
Warning: Permanently added '192.168.195.102' (ECDSA) to the list of known hosts. root@192.168.195.102's password:
然后输入192.168.195.102的root密码后,成功登录aminglinux-02。
这里符号@前面的root表示要以远程机器哪个用户的身份登录。我们可以省略root@,即写成ssh 192.168.195.102,它也表示以root用户身份登录。这个并不是固定的,它取决于当前系统的当前用户是谁。我们可以使用如下命令查看当前用户:
# whoami root
也可以写成:
# who am i root pts/1 2022-09-17 07:06 (192.168.195.101)
从这两个命令的显示结果可以看出它们的区别:一个是简单显示,一个是复杂显示。后者不仅可以显示username,还可以显示登录的终端、登录时间以及从哪里登录。
4.3.3 使用密钥登录
既然MobarXterm支持使用密钥验证的方式登录Linux机器,那么Linux下的客户端软件也是支持的。下面请跟着阿铭一步一步来操作。
1)客户端生成密钥对
假如aminglinux-01为客户端(以下简称01),aminglinux-02为要登录的机器(以下简称02)。首先,把刚刚登录的02退出来,直接使用Ctrl+D快捷键即可。然后在01上执行如下命令:
# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa):
这个命令用来生成密钥对。首先,它让我们定义私钥的存放路径,默认路径为/root/.ssh/ id_rsa。这里采用默认值即可,直接回车,此时会显示如下信息:
Enter passphrase (empty for no passphrase):
然后它让我们定义私钥的密码,可以留空,直接回车即可,此时会显示如下信息:
Enter same passphrase again:
此时它让我们再一次输入密码,然后回车,此时会显示如下信息:
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: 57:15d6ed83fc215b83 root@aminglinux-01 The key's randomart image is: +--[ RSA 2048]----+ | ++o. | | . .. | | o.. | | ..o. . | | S....o+ | | .o.++o. | | ooooo.| | Eoo. .| | .. | +-----------------+
最终生成了密钥对,你可以在/root/.ssh/目录下找到公钥(id_rsa.pub)和私钥(id_rsa)。
2)把公钥复制到要登录的机器上
首先,我们查看01上公钥的内容,此时运行如下命令:
# cat /root/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDiAUXQihX9pa1oxml6xRjZhjTRCU+QMHUGXU34Q6gBeK/8Qm0hUqPfyASXbV2y6hKH4MHfX4zQcpnkeTgyeIFuKAxoEX98mx8r4owB7X490CH+H8JCRsM9FYlAsbH+kvdIa+sNTMqD5jEY5dh+gNINDDNJiw250cYG9Pe8Y+5slazPYrC0tjWz+AnXhJ1//r9z077rxEMJ1jHZdEn62hIou46i8xny+znJScSeW0uJHTgeX5EbXrArgSUOXyubtsGrov83dSUa39Kfyk4HvXU0azYI8S3h6ZxUOed0dYmic4EMd5VxYPnrgNEgTCRlP3hx/sOCCr0HSWtv+MvREkGd root@aminglinux-01
将这些字符串全部复制,然后粘贴到02上的文件/root/.ssh/authorized_keys里。若之前已经创建过这个文件,并且已经粘贴过MobaXterm的公钥,则需要另起一行粘贴01的公钥。在02上执行如下命令:
# vi /root/.ssh/authorized_keys
如果有内容,可以按字母G把光标定位到文件末尾,然后输入o进入编辑模式(这里使用的命令和之前有所不同,请先跟着阿铭操作)。单击鼠标右键即可粘贴01的公钥。然后按Esc键,输入:wq,再回车。如果你之前并没有设置MobaXterm的公钥,请继续执行以下命令:
# chmod 600 /root/.ssh/authorized_keys
3)登录Linux
在01上执行如下命令:
# ssh 192.168.195.102
此时就不再提示我们输入密码,就可以直接登录到02了。这样就可以实现Linux通过密钥验证的方式登录Linux。如果你在生成密钥对时设置了密码,那么这里也会提示你输入密钥密码。为了方便跨机器执行命令,这里我们特意不设置密钥的密码(后面会用到)。
4)使用ssh-copy-id
Linux系统里还有一种更方便做密钥认证的方法。这次阿铭要让02通过密钥认证登录01。在02上执行如下命令:
# ssh-keygen # ssh-copy-id root@192.168.195.101
它会提示让我们输入01的root密码,只要输入对了对方服务器的密码就完成了密钥认证。再次尝试ssh登录01,此时就不再提示我们输入密码,可以直接登录到01了。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !