跟阿铭学 Linux
李世明
前腾讯高级运维工程师
522 人已学习
立即订阅
跟阿铭学 Linux
15
15
1.0x
00:00/19:21
登录|注册

第 3 章 远程登录Linux系统

讲述:Alloy大小:4.43M时长:19:21
Linux 主要应用于服务器领域,而服务器不可能像 PC 机那样放在办公室,它们是放在 IDC 机房的,所以阿铭平时登录 Linux 系统都是通过网络远程登录的。
Linux 系统通过 sshd 服务实现远程登录功能。sshd 服务默认开启了 22 端口,当我们安装完系统时,这个服务已经安装,并且是开机启动的。所以,我们不需要额外配置什么就能直接远程登录 Linux 系统。sshd 服务的配置文件为 /etc/ssh/sshd_config,你可以根据需求修改这个配置文件,比如可以更改启动端口为 11587,注意这个数字不能超过 65535。
如果你安装的是 Windows 操作系统,则需要额外安装一个 Linux 远程登录的终端软件。目前比较常见的终端登录软件有 Xshell、SecureCRT、PuTTY、SSH Secure Shell 等。很多朋友喜欢用 SecureCRT,因为它的功能非常强大,但阿铭喜欢用 PuTTY,因为它小巧且显示的颜色漂亮。最近阿铭也在使用 Xshell,这个软件也非常不错,值得大家研究一下。但不管你使用哪一个客户端软件,最终的目的只有一个——远程登录到 Linux 服务器上。

3.1 安装 PuTTY

PuTTY 是一个免费的、开源的 SSH 客户端软件,它不仅有 Windows 版本,还有 Unix/Linux 版本。PuTTY 的操作和配置都非常简单、易用。

3.1.1 下载 PuTTY

网上曾经报道过,某个中文版的 PuTTY 被别有用心的黑客动了手脚,给植了后门。所以阿铭提醒各位,以后不管下载什么软件,尽量去官方站点下载。当然,你也可以通过阿铭在前言的反馈及服务中提供的途径去下载。打开下载页面后,我们可以看到有很多软件可供下载,如下所示:
PuTTY(SSH 和 telnet 客户端软件);
PSCP(SCP 客户端,用来远程复制文件);
PSFTP(SFTP 客户端软件,使用 SSH 协议传输文件);
PuTTYtel(一个只有 telnet 功能的客户端软件);
Plink(Windows 下的命令行接口,使用它可以在 cmd 下使用 PuTTY);
Pageant(SSH 的密钥守护进程,开启该进程后,密钥保存到内存中,连接时不再输入密钥的密码,PuTTY、PSCP、PSFTP 和 Plink 都可以使用它);
PuTTYgen(生成密钥对的工具,3.2.2 节会用到它)。
如果你只想用 PuTTY,那只需下载 putty.exe 即可,不过后面我们还会用到 PuTTYgen 和 PSFTP,所以阿铭建议你干脆下载安装包 putty-0.73-installer.msi(版本可能已经更新,下载最新版本即可),然后安装一下,这样所有的软件都全了。

3.1.2 安装

下载安装包后,双击 putty-0.73-installer.msi 进入安装界面,所有配置都保持默认设置,直接单击 Next 按钮,直至安装结束。安装完成后,在“开始”菜单中找到 PuTTY,单击即可打开这个软件。

3.2 远程登录

在第 2 章中,我们已经给 CentOS 设置了 IP 地址(192.168.72.128),并且这个 IP 地址是静态的,即使你的 VMware 重启过,它也不会变。设置 IP 地址的目的除了要使用 yum 工具外,另一个就是远程连接 Linux 操作系统了。

3.2.1 使用密码直接登录

打开 PuTTY 后,请按照如下步骤连接远程 Linux 服务器。
填写远程 Linux 的基本信息
填写 Linux 基本信息的对话框如图 3-1 所示,其中 Host Name(or IP address) 这一栏填写服务器 IP,即 192.168.72.128,Port 和 Connection type 这两栏采用默认设置即可。Saved Sessions 这一栏自定义一个名字,主要用来区分主机,因为将来你的主机会很多,写个简单的名字既方便记忆又能快速查找。
图 3-1 填写基本信息
 
定义字符集
计算机的字符集是最麻烦的,尤其是 Linux,搞不好就会乱码。阿铭在第 2 章中教你安装 CentOS 时已经安装了中文语言,所以安装好的系统支持中文。在 PuTTY 这里也要设置支持中文,单击左侧的 Window→Translation,查看右侧的 Character set translation,选择 UTF-8,如图 3-2 所示。再单击左侧的 Session,然后单击右侧的 Save 按钮。
图 3-2 定义字符集
 
远程连接你的 Linux
保存 Session 后,单击最下方的 Open 按钮。初次登录时,都会弹出一个友情提示,它的意思是要打开的 Linux 还未在本机登记,问我们是否要信任这个 Linux。如果是可信任的,则单击“是”按钮在该主机登记;否则单击“否”按钮或者“取消”按钮。这里我们单击“是”按钮,弹出如下登录提示:
login as: root
root@192.168.72.128's password:
Last login: Thu Dec 26 08:13:39 2019
输入用户名和密码后,就可以登录 Linux 系统。登录后,会提示至目前最后一次登录系统的时间和地点。然后,我们就可以在 PuTTY 里面进行操作了,这和在 VMware 终端上操作没有区别。而且它还有一个好处,就是可以随意复制、粘贴。之前在终端的窗口里,我们没有办法复制内容,更不能粘贴文本信息。使用 PuTTY,我们还可以通过鼠标滚轮翻查之前显示的历史信息。

3.2.2 使用密钥认证

SSH 服务支持一种安全认证机制,即密钥认证。所谓密钥认证,实际上是使用一对加密的字符串:其中一个称为公钥(public key),用于加密,任何人都可以看到其内容;另一个称为私钥(private key),用于解密,只有拥有者才能看到其内容。通过公钥加密过的密文,使用私钥可以轻松解密,但根据公钥来猜测私钥却十分困难。SSH 的密钥认证就是使用了这一特性。
服务器和客户端都各自拥有自己的公钥和私钥,PuTTY 可以使用密钥认证登录 Linux,具体的操作步骤如下。
生成密钥对
关于密钥对的工作原理,如果感兴趣,可以到网上查一查,阿铭在此不过多介绍。在“开始”菜单中找到 PuTTYgen,单击打开它,如图 3-3 所示。然后单击 Generate 按钮,这样就开始生成密钥了,请来回拨动鼠标,这样有助于快速生成密钥对,大约几秒钟就完成了。图 3-3 中的 Key comment 可以保持不变,也可以自定义,它是对该密钥的简单介绍。Key passphrase 用于给你的密钥设置密码,此项可以留空,但阿铭建议你设置一个,这样安全一些。Confirm passphrase 需要再输入一遍刚刚设置的密码。
图 3-3 生成密钥对
 
保存私钥
单击 Save private key 按钮,选择一个存放路径并定义名称,单击“保存”按钮。这个就是私钥,请把它保存到一个比较安全的地方,谨防丢失或被其他人看到。
 
复制公钥到 Linux
返回刚才生成密钥对的窗口,在 Key 的下方有一个长字符串,这个字符串就是公钥的内容。把整个公钥字符串复制下来,粘贴到 Linux 的文件中。下面请跟着阿铭一起来操作,运行如下命令:
# mkdir /root/.ssh // 创建/root/.ssh目录,因为这个目录默认是不存在的
# chmod 700 /root/.ssh // 更改这个目录的权限
# vi /root/.ssh/authorized_keys // 把公钥内容粘贴到文件/root/.ssh/authorized_keys里
关于mkdirchmod这两个命令,阿铭会分别在 4.1.2 节和 4.6.3 节中详细介绍。在vi命令之后直接回车,输入i进入编辑模式,然后单击鼠标右键就可以粘贴了,这是 PuTTY 工具非常方便的一个功能。粘贴后,按 Esc 键,然后输入:wq 并回车,保存并退出该文件。
 
关闭 SELinux
关于 SELinux,在第 2 章中我们也提到过,它是 CentOS 的一种安全机制,它的存在虽然让 Linux 系统安全了很多,但也产生了不少麻烦。这里如果不关闭 SELinux,使用密钥登录时会提示Server refused our key,从而导致不能成功。需要运行如下命令来关闭 SELinux:
# setenforce 0
这只是暂时关闭,下次重启 Linux 后,SELinux 还会开启。若要永久关闭,必须运行如下命令:
# vi /etc/selinux/config
按回车后,把光标移动到SELINUX=enforcing这一行,输入i进入编辑模式,修改为SELINUX= disabled。按 Esc 键,然后输入:wq 并回车,最后重启系统。
 
设置 PuTTY 通过密钥登录
当系统重新启动后,打开 PuTTY 软件,在右侧 Saved Sessions 下面找到刚刚保存的 session,单击选中它,然后再单击右侧的 Load 按钮。在左下方单击 SSH 前面的 +,然后选择 Auth,查看右侧 Private key file for authentication 下面的长条框,目前为空。单击 Browse 按钮,找到我们刚刚保存好的私钥,单击“打开”按钮。此时这个长条框里就有了私钥的地址(当然,你也可以自行编辑这个路径),如图 3-4 所示。最后,再回到左侧,单击最上面的 Session,再单击右侧的 Save 按钮。
图 3-4 设置密钥
 
使用密钥验证登录 Linux
保存好 Session 后,单击右下方的 Open 按钮,会出现登录界面,此时你会发现,登录提示内容和原来的有所不同,如下所示:
login as: root
Authenticating with public key "rsa-key-20191227"
Passphrase for key "rsa-key-20191227":
Last login: Fri Dec 27 06:42:50 2019 from 192.168.72.1
这里不再是输入 root 密码,而是需要输入密钥的密码。如果先前生成密钥对时你没有设置密码,输入 root 后会直接登录系统。有很多朋友在做密钥认证的时候会失败,但只要注意这几点就一定可以成功:
/root/.ssh 目录权限为 700;
SELinux 要关闭;
/root/.ssh/authorized_keys 文件名要写对;
文件内容要粘贴对。
假如你还有一台机器需要使用密钥验证登录 Linux,你学会如何设置了吗?PuTTY 的设置方法是一样的,使用同样的私钥,不需要你再次生成密钥对了。另外,把 192.168.72.128 上的文件 /root/.ssh/authorized_keys 复制一份到另一台机器就可以了。请注意,这个文件的名字是固定的。
在本例中,阿铭教大家的是直接使用密钥登录 root 用户,但在工作中很多朋友登录的是普通用户,而不是 root。那普通用户的密钥认证如何设置呢?原理肯定是一样的,同样要先有密钥对,然后把公钥放到服务器上,不过不是在 /root/.ssh 目录下面了,而是普通用户家目录下面的.ssh 目录下。那普通用户家目录在哪里?第 5 章讲到用户管理时,阿铭会详细介绍,在这阿铭举一个例子,比如你登录的普通用户为 aming,那么 aming 用户的家目录为 /home/aming。还有一点大家要注意,在 Linux 机器上所做的操作(如创建.ssh 目录)也必须以 aming 用户身份操作才可以。

3.3 两台 Linux 相互登录

既然可以在 Windows 上安装一个客户端软件(比如 PuTTY)去登录远程的 Linux,那么在 Linux 上是否也可以登录另一台 Linux 呢?当然可以,只是在 Linux 上也需要安装一个客户端软件。CentOS 自带的客户端软件叫作 openssh-clients。
要想检测 Linux 上是否已安装客户端软件,需要运行如下命令:
# ssh -V
OpenSSH_7.8p1, OpenSSL 1.1.1 FIPS 11 Sep 2018
如果已安装,则会显示 OpenSSH 的版本信息。如果没有显示类似的信息,请运行如下命令安装:
# yum install -y openssh-clients

3.3.1 克隆 CentOS

要完成本实验,还需要有一台 Linux 机器,你可以按照 2.2 节再安装一台 CentOS。但阿铭觉得那样做太浪费时间,其实还有一个更好的方法——克隆虚拟机。
首先,关闭正在运行的 CentOS,正确的关机命令是shutdown -h now或者init 0。然后在左侧对应的虚拟机名字上单击鼠标右键,选择“管理”,再选择“克隆”,如图 3-5 所示。
图 3-5 克隆
此时会出现“克隆向导”界面。直接单击“下一步”按钮,再单击“下一步”按钮,会出现“克隆类型”对话框,这里采用默认值即可,即选择“创建链接克隆”,这种类型会节省空间,比较方便。继续单击“下一步”按钮,你可以设定克隆虚拟机的名称和保存的路径。接着单击“完成”和“关闭”按钮,最终完成 CenOS 8 的克隆。此时,不管是在左侧“我的电脑”下面还是在右侧“选项卡”,都多出来一个克隆后的 CentOS 8 虚拟机。
把两台 CentOS 7 全部启动。先登录克隆的虚拟机,输入命令dhclient,让这台新克隆的 CentOS 8 也自动获取一个 IP 地址。再运行ip addr命令,可以看到获取到的 IP 地址为 192.168.72.129,使用 2.3.2 节的方法给这台 CentOS 8 也配置一个静态 IP 地址。
为了便于区分两台 CentOS 8,下面阿铭教你如何设置主机名。我们不妨给第一台起个主机名为 aminglinux-128,第二台为 aminglinux-129。请在第一台 CentOS 8 上运行如下命令:
# hostnamectl set-hostname aminglinux-128
可以使用快捷键 Ctrl+D 退出当前终端,然后再登录一次,就会发现命令行左边的前缀有所变化了。使用同样的方法,将第二台 CentOS 8 的主机名设置为 aminglinux-129。

3.3.2 使用密码登录

使用前面的方法,通过 PuTTY 远程登录 aminglinux-128,然后在这台机器上执行如下命令:
# ssh root@192.168.72.129 // 第一次登录对方机器,有一个提示
The authenticity of host '192.168.188.129 (192.168.72.129)' can't be established.
ECDSA key fingerprint is 26:e3:97:e7:bb:ae:17:33:ea:aa:0c:5f:37:0e:9e:fa.
Are you sure you want to continue connecting (yes/no)
这里我们输入 yes,然后回车,又出现一个如下的警告,它的意思是保存了 192.168.72.129 这台机器的信息:
Warning: Permanently added '192.168.72.129' (ECDSA) to the list of known hosts.
root@192.168.72.129's password:
然后输入 192.168.72.129 的 root 密码后,成功登录 aminglinux-129。
命令中符号@前面的root表示要以远程机器哪个用户的身份登录。我们可以省略root@,即写成ssh 192.168.72.129,它也表示以 root 用户的身份登录。这个并不是固定的,取决于当前系统的当前用户是谁。我们可以使用如下命令查看当前用户:
# whoami
root
也可以写成:
# who am i
root pts/1 2019-12-27 07:06 (192.168.72.128)
从这两个命令的显示结果可以看出它们的区别:一个是简单显示,一个是复杂显示。后者不仅可以显示当前用户名,还可以显示登录的终端、登录时间以及从哪里登录。

3.3.3 使用密钥登录

既然 PuTTY 支持使用密钥验证的方式登录 Linux 机器,那么 Linux 下的客户端软件也是支持的。下面请跟着阿铭一步一步来操作。
客户端生成密钥对
假如 aminglinux-128 为客户端(以下简称 128),aminglinux-129 为要登录的机器(以下简称 129)。首先,把刚刚登录的 129 退出来,直接使用 Ctrl+D 快捷键即可。然后在 128 上执行如下命令:
# 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:15:10:d6:8a:ed:79:83:0b:fc:d7:21:52:5b:ba:83 root@aminglinux-128
The key's randomart image is:
+--[ RSA 2048]----+
| ++o. |
| . .. |
| o.. |
| ..o. . |
| S....o+ |
| .o.++o. |
| ooooo.|
| Eoo. .|
| .. |
+-----------------+
最终生成了密钥对,你可以在 /root/.ssh/ 目录下找到公钥(id_rsa.pub)和私钥(id_rsa)。
 
把公钥复制到要登录的机器上
首先,我们查看 128 上公钥的内容,此时运行如下命令:
# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDiAUXQihX9pa1oxml6xRjZhjTRCU+QMHUGXU34Q6gBeK/8Qm0hUqPfyASXbV2y6hKH4MHfX4zQcpnkeTgyeIFuKAxoEX98mx8r4owB7X490CH+H8JCRsM9FYlAsbH+kvdIa+sNTMqD5jEY5dh+gNINDDNJiw250cYG9Pe8Y+5slazPYrC0tjWz+AnXhJ1//r9z077rxEMJ1jHZdEn62hIou46i8xny+znJScSeW0uJHTgeX5EbXrArgSUOXyubtsGrov83dSUa39Kfyk4HvXU0azYI8S3h6ZxUOed0dYmic4EMd5VxYPnrgNEgTCRlP3hx/sOCCr0HSWtv+MvREkGd root@aminglinux-128
将这些字符串全部复制,然后粘贴到 129 上的文件 /root/.ssh/authorized_keys 里。若之前已经创建过这个文件,并且已经粘贴过 PuTTY 的公钥,则需要另起一行粘贴 128 的公钥。在 129 上执行如下命令:
# vi /root/.ssh/authorized_keys
如果有内容,可以按字母键 G 把光标定位到文件末尾,然后输入 o 进入编辑模式(这里使用的命令和之前有所不同,请先跟着阿铭操作)。单击鼠标右键即可粘贴 128 的公钥。然后按 Esc 键,输入:wq,再回车。如果你之前并没有设置 PuTTY 的公钥,请继续执行以下命令:
# chmod 600 /root/.ssh/authorized_keys
登录 Linux
在 128 上执行如下命令:
# ssh 192.168.72.129
此时不再提示我们输入密码,就可以直接登录到 129 了。这样就可以实现 Linux 通过密钥验证的方式登录 Linux。如果你在生成密钥对时设置了密码,那么这里也会提示你输入密钥密码。为了方便跨机器执行命令,这里我们特意不设置密钥的密码(后面会用到)。
 
使用 ssh-copy-id
Linux 系统里还有一种更方便实现密钥认证的方法。这次阿铭要让 129 通过密钥认证登录 128。在 129 上执行如下命令:
# ssh-keygen
# ssh-copy-id root@192.168.72.128
它会提示让我们输入 128 的 root 密码,只要输入对了对方服务器的密码就完成了密钥认证。再次尝试 ssh 登录 128,此时就不再提示我们输入密码,可以直接登录到 129 了。

3.4 课后习题

(1) 远程连接 Linux 服务器,需要 Linux 服务器开启 sshd 服务,那么 sshd 服务默认监听哪个端口?这个端口是否可以自定义呢?如果可以,如何自定义呢?
(2) 常用的远程连接 Linux 的终端工具有哪些?
(3) 手动配置 IP 需要修改哪个配置文件?更改默认的配置文件需要修改哪些地方?
(4) 重启网络服务的命令是什么?
(5) 如何临时关闭 SELinux?如何永久关闭 SELinux?
(6) 查看 Linux 有几块网卡用什么命令?查看网卡 IP 用什么命令?
(7) 我们为什么要使用密钥登录 Linux 呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了如何通过远程登录Linux系统,主要使用了sshd服务和PuTTY软件。文章包括了sshd服务的配置、远程登录软件的选择、PuTTY的安装和远程登录操作。此外,还介绍了使用密码直接登录和使用密钥认证两种方式。对于使用密钥认证,文章详细介绍了生成密钥对、保存私钥和复制公钥到Linux的操作步骤。另外,还提到了关闭SELinux和设置PuTTY通过密钥登录的方法。总的来说,本文内容详细、实用,适合初学者快速了解远程登录Linux系统的方法和技巧。文章还包含了一些课后习题,可以帮助读者巩固所学知识。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《跟阿铭学 Linux》
立即购买
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • 无咎
    实际运维中有修改改配置的运用吗?原因是什么? --- (1) 远程连接 Linux 服务器,需要 Linux 服务器开启 sshd 服务,那么 sshd 服务默认监听哪个端口?这个端口是否可以自定义呢?如果可以,如何自定义呢? sshd 服务默认监听的是 TCP 端口 22。这个端口是可以自定义的,如果需要更改默认端口,可以通过编辑 /etc/ssh/sshd_config 配置文件来实现。 以下是更改 sshd 监听端口的步骤: 打开 /etc/ssh/sshd_config 文件: sudo nano /etc/ssh/sshd_config 找到 #Port 22 这一行(默认情况下,端口 22 是被注释掉的,即以 # 开头)。 取消注释(如果有的话),并更改端口号为你想要的端口号,例如: Port 2222 保存并关闭文件。 重启 sshd 服务以使更改生效: sudo systemctl restart sshd 或者,如果你使用的是旧版本的 Linux,可能需要使用以下命令来重启 sshd: sudo service ssh restart 或者 sudo /etc/init.d/ssh restart 请注意,更改端口号后,你将需要使用新端口来连接服务器。同时,确保新的端口号没有被其他服务占用,并且没有被网络策略或防火墙阻止。
    2024-02-23归属地:天津
收起评论
大纲
固定大纲
3.1 安装 PuTTY
3.1.1 下载 PuTTY
3.1.2 安装
3.2 远程登录
3.2.1 使用密码直接登录
3.2.2 使用密钥认证
3.3 两台 Linux 相互登录
3.3.1 克隆 CentOS
3.3.2 使用密码登录
3.3.3 使用密钥登录
3.4 课后习题
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部