想要管理客户端和 Linux 服务器之间的安全远程通信?以下是一些用于管理远程连接的 Secure Shell (SSH) 工具。
Secure Shell 协议是通过客户端/服务器应用程序连接远程机器的常用方法。它利用 ssh、scp 和 sftp 等工具集来确保安全的身份验证过程和随后的加密通信。因此,这些工具取代了其他较旧的远程命令执行工具集,例如 telnet、rcp 和 rlogin。
在本指南中,您将学习如何在您的机器上安装和启用 OpenSSH 服务器/客户端服务。它还涵盖了访问和远程管理系统以及在两者之间传输文件所需的所有命令(SSH 工具)。
SSH 入门
默认情况下,大多数 Linux 系统都包含 ssh 客户端和服务器应用程序。在 RHEL 和 Fedora 发行版中包含 ssh 工具的软件包是 openssh、openssh-server 和 openssh-client。使用grep命令从已安装列表中获取 ssh 工具:
linuxmi@linuxmi:~/www.linuxmi.com$ yum list installed | grep openssh
虽然 Ubuntu 只包含一个 openssh-client 包,但它还包含一个 openssh 包。使用 grep 命令列出 Ubuntu 中的 openssh 包,如下:
linuxmi@linuxmi:~/www.linuxmi.com$ sudo dpkg --list | grep openssh
linuxmi@linuxmi:~/www.linuxmi.com$ sudo apt-get install openssh-server
启动/启用 SSH 服务
openssh 服务的管理可能因发行版而异,并且无论默认配置如何,它都不会自动启动。使用以下命令集确保服务在您的 Linux 机器上启动并运行:
linuxmi@linuxmi:~/www.linuxmi.com$ systemctl status sshd.service #对于 Fedora 和 RHEL
linuxmi@linuxmi:~/www.linuxmi.com$ systemctl status ssh #对于 Ubuntu
如果没有运行,检查服务状态如下:
linuxmi@linuxmi:~/www.linuxmi.com$ systemctl start sshd.service #对于 Fedora 和 RHEL
linuxmi@linuxmi:~/www.linuxmi.com$ systemctl ssh start #对于 Ubuntu
要在系统启动后立即启动 openssh-server:
linuxmi@linuxmi:~/www.linuxmi.com$ systemctl enable sshd.service
linuxmi@linuxmi:~/www.linuxmi.com$ systemctl ssh enable
如何使用 SSH 客户端工具
在使用SSH 协议进行 Linux 系统远程访问的许多其他工具中,最常用的是用于远程代码执行和登录的 ssh 命令,其中 scp 和 rsync 在客户端和服务器之间复制一个或多个文件时很有用。
本节详细介绍了上述用于有效远程管理的命令。
远程登录
SSH 是您最常用于远程配置运行 sshd 服务的 Linux 服务器的命令。使用 ssh 命令验证您是否可以登录到您的 Linux 服务器执行命令。
您可以使用另一台 Linux 机器登录到您的服务器,也可以通过在localhost上模拟它来了解它,如下所示:
远程登录到 192.168.1.108 的 linuxmi 帐户(其中 192.168.1.108 是远程设备的 IP 地址):
linuxmi@linuxmi:~/www.linuxmi.com$ ssh linuxmi@192.168.1.108
对于以本地用户身份远程登录:
linuxmi@linuxmi:~/www.linuxmi.com$ ssh localhost
如果您是第一次登录远程服务器,它会提示您确认连接系统,输入yes并输入用户帐户密码。
登录后,您可以继续执行远程命令,因为它类似于常规登录,唯一的区别是远程通信是加密的。
完成后,键入exit命令以终止会话并返回到本地系统。如果它无法关闭远程shell ~. 键也可以执行类似的任务并输出“Connection to X.X.X.X closed”。
远程执行
ssh 命令允许在远程系统上执行命令并在本地机器上返回输出。例如,
以下命令以用户ubuntu在远程服务器上运行并返回主机名:
linuxmi@linuxmi:~/www.linuxmi.com$ ssh linuxmi@192.168.1.108 hostname
要执行包含选项或标志的命令,请将其括在双引号中,如下所示:
linuxmi@linuxmi:~/www.linuxmi.com$ ssh linuxmi@192.168.1.108 "cat www.linuxmi.com.py"
上面的命令在本地屏幕上返回上述文件的内容。
您还可以通过在服务器上启用 X11 转发来运行多个命令,而无需每次都重新连接。打开/etc/ssh目录下的sshd_config文件,将X11 Forwarding设置为yes。
通过 scp 和 rsync 进行文件制
scp命令允许您将文件从远程传输/复制到本地系统,反之亦然。它的功能类似于 rcp 命令,但使用 RSA 加密通信。下面是一些例子。
将文件从远程机器的/home/linuxmi/demo目录复制到其/tmp文件夹,如下所示:
linuxmi@linuxmi:~/www.linuxmi.com$ scp -r linuxmi@192.168.1.108:/home/linuxmi/demo /tmp
这也启用了递归复制,这意味着您可以为命令提供一个目录,并将所有文件/文件夹沿层次结构复制到另一个本地目录。
linuxmi@linuxmi:~/www.linuxmi.com$ scp -r localhost:/home/linuxmi/web /tmp
您也可以使用 scp 命令备份文件和目录,但 rsync 是更好的备份实用程序,原因如下:
- scp 无法保留文件/目录权限和时间/日期。
- 它也无法识别已复制的文件和目录。
现在列出以上目录的内容,查看文件权限和创建时间,如下:
linuxmi@linuxmi:~/www.linuxmi.com$ ls -l /home/linuxmi/demo /tmp/demo
重复上面的 scp 命令并重新列出目录以检查它是否从其时间戳中替换了已复制的文件/目录:
scp 命令的-p 标志可能有助于保留时间戳或写入权限,但它仍会替换已复制的文件。为了克服这些缺点,使用 rsync 作为备份工具。首先删除/tmp目录中的文件以继续下面的示例。使用带有-a标志的 rsync 命令进行递归归档,使用-v选项表示详细,将/home/linuxmi/demo文件复制到/tmp目录,如下所示:
linuxmi@linuxmi:~/www.linuxmi.com$ rsync -av linuxmi@192.168.1.108:/home/linuxmi/demo /tmp
列出/tmp目录以注意它如何保存文件或目录的创建时间。
最后,重新运行rsync命令以验证它没有复制任何文件。
了解 SSH
本文是用于远程管理 Linux 服务器的最广泛使用的协议的指南。我们展示了如何使用最重要的 SSH 命令以及一些技巧和窍门来简化文件复制和管理任务。
开始了解 SSH 命令/工具及其功能可以改变您对系统/服务器管理的看法,因为它不仅解锁了 SSH 的功能,还解锁了 Linux 终端的功能。它是一个强大的工具,提供了相当大的安全性,以及更高级的功能。