Linux 中最常见的 SSH 命令用法和配置
简介:在本指南中,我们将讨论 SSH 的常见用例。我们还将讨论可在日常生活中使用的常用 SSH 配置,以提高您的工作效率。
Secure Shell (SSH) 是一种广泛采用的网络协议,它允许我们以安全的方式与远程主机交互。它通过加密它们之间的所有通信来提供安全性。
如何在 Linux 中使用 SSH 命令
在本节中,我们将讨论 SSH 协议的一些流行用例。
连接到远程 Linux 主机
使用 telnet、ftp、netcat 等协议与远程 Linux 主机交互的方式有很多种。但是,由于缺乏加密,这些方式并不安全。我们可以使用 SSH 协议来允许主机之间进行安全通信。
我们必须使用 SSH 客户端与远程主机进行交互。有大量可用于 Linux 的基于 GUI 和 CLI 的客户端。但是,在本指南中,我们将使用名为 ssh 的命令行实用程序。默认情况下,大多数 Linux 发行版都提供 ssh 实用程序。
SSH命令的语法如下:
ssh [OPTIONS] [COMMANDS] [ARGS]
这里,方括号 ([])
表示可选参数,而尖括号 (<>)
表示强制参数。
让我们使用 ssh 客户端连接到远程主机:
ssh -l root 192.168.19.130
在此示例中,我们使用 -l
选项指定登录名,目标为 192.168.19.130。输入正确的密码后,SSH 连接建立。现在,我们可以像在本地系统一样在远程主机上执行命令了。
hostname
要终止会话,我们可以使用exit命令或ctrl+D
组合键。
值得注意的是,我们必须针对每个新会话向远程主机进行身份验证。为了避免每次都输入密码,我们可以设置SSH无密码登录。
在远程主机上执行命令
在上一节中,我们了解了如何与远程主机建立连接,这仅适用于我们要长时间使用远程主机的情况。有时,我们只需要在远程主机上执行一两个命令。在这种情况下,我们可以执行这些命令而无需创建长期会话。
让我们在远程主机上执行 hostname 命令:
ssh -l root 192.168.19.130 hostname
以类似的方式,我们可以在远程Linux机器上执行多个命令:
ssh -l root 192.168.19.130 'hostname; pwd'
需要注意的是,命令必须用引号括起来,并用分号 (;)
字符分隔。如果您想在多个远程 Linux 主机上运行命令,请阅读我们的文章 – Pssh – 在多个远程 Linux 主机上运行命令。
在远程主机上执行脚本
与命令类似,我们也可以在远程主机上执行本地脚本。让我们通过一个例子来理解这一点。
首先,在本地计算机上创建一个具有可执行权限的简单 shell 脚本:
cat script.sh
hostname
pwd
现在,让我们在远程主机上执行它:
ssh [email 'bash -s' < ./script.sh
在此示例中,我们使用 bash 的 -s
选项从标准输入读取脚本。
在主机之间复制文件
我们经常使用文件和目录。用户执行的一项常见操作是复制目录和文件。就像本地计算机一样,我们可以使用 scp 命令在远程主机之间复制文件和目录,该命令使用 SSH 协议安全地复制文件。
让我们将 script.sh 文件复制到远程主机的 /tmp 目录中:
scp script.sh [email :/tmp
现在,验证文件已被复制:
ssh [email 'ls /tmp/script.sh'
类似地,我们可以使用 scp 命令来复制目录。但是,我们必须在命令中使用 -r
选项。
为 SSH 启用压缩
SSH支持使用gzip压缩算法进行数据压缩,该算法会压缩所有可能的数据流,例如stdin、stdout、stderr等。当使用慢速网络连接时,此选项非常方便。
我们可以使用 -C
选项在 SSH 上启用压缩:
ssh -C -l root 192.168.19.130 'hostname'
为 SSH 启用详细模式
Linux 用户经常需要调试 SSH 会话来调查各种 SSH 连接和配置相关问题。在这种情况下,我们可以启用详细模式来打印当前会话的调试日志。
让我们使用 -v
选项启用详细模式:
ssh -v -l root 192.168.19.130 hostname
除此之外,我们还可以通过使用多个 -v
选项来提高详细级别。
-v
– 将详细级别设置为 1 并提供有关客户端活动的详细信息。-vv
– 将详细级别设置为 2 并提供有关客户端和服务器端活动的详细信息。-vvv
– 将详细级别设置为 3 并提供有关客户端和服务器端活动的更多详细信息。
SSH 支持的最大详细级别是 3。让我们看看实际情况:
ssh -vvv -l root 192.168.19.130 hostname
在上面的示例中,debug1 表示由详细级别 1 启用的调试消息。类似地,debug2 和 debug3 表示由详细级别 1 启用的调试消息。详细程度分别为 2 级和 3 级。
SSH 中的转义序列
我们可以使用 SSH 的转义序列来管理客户端会话。让我们讨论常用的转义序列和适当的用例。
暂停 SSH 会话
有时,我们必须在本地计算机上执行一些活动而不终止当前的 SSH 会话。在这种情况下,我们可以使用 ~ + ctrl+z
键序列暂停当前会话。
首先,登录远程主机并执行hostname命令:
ssh -l root 192.168.19.130
hostname
接下来,要暂停当前会话,请先输入波形符 (~)
字符,然后按 ctrl+z
键。需要注意的是,在按下 ctrl+z
之前,波形符 (~)
字符不会显示在标准输出上。
现在,让我们验证会话是否已暂停:
jobs
在这里,我们可以看到当前的 SSH 会话正在后台运行。
让我们使用 fg 命令再次恢复会话并执行 hostname 命令:
fg %1
终止冻结的 SSH 会话
我相信您一定见过冻结的 SSH 会话,当会话被不稳定的网络中断时就会发生这种情况。在这里,我们无法使用 exit 命令中止会话。但是,我们可以使用 "~ + ."
键序列终止它。
首先,登录远程主机:
ssh -l root 192.168.19.130
现在使用“~ + .”
组合键终止当前会话。
在此示例中,我们可以看到 SSH 显示消息 - 与 192.168.19.130 的连接已关闭。
列出支持的转义序列
一件有趣的事情是,有一个转义序列列出了所有支持的转义序列。我们可以使用“~ + ? ”
转义序列列出支持的转义序列:
在这里,我们必须按回车键才能退出帮助菜单。
如何在 Linux 中配置 SSH
在本节中,我们将讨论服务器端配置以强化 SSH 服务器。 SSH 服务器将其所有配置存储在 /etc/ssh/sshd_config 文件中。需要注意的是,更新 SSH 配置需要 root 用户访问权限。
显示 SSH 横幅
作为最佳实践,我们应该始终在建立 SSH 连接之前显示横幅。在某些情况下,它会阻止未经授权的用户访问远程主机。让我们看看如何逐步启用此设置。
首先,在远程服务器上创建一个包含警告消息的文本文件:
vi /etc/banner.txt
接下来,添加以下横幅消息:
*********************************************************************
Warning !!! You are trying to log in to techmint.com's server.
All the activities on this server are monitored.
Terminate the session immediately if you are not an authorized user.
*********************************************************************
接下来,打开 /etc/ssh/sshd_config 文件并使用 Banner 指令指定该文件:
Banner /etc/banner.txt
现在,重新启动 sshd 服务并使用 exit 命令终止会话:
systemctl restart sshd
exit
最后,通过登录远程主机来验证横幅:
ssh -l root 192.168.19.130
在这里,我们可以让服务器正确显示 SSH 横幅。
禁用 SSH Root 登录
至此,我们已经使用root用户访问远程主机了。然而,这违反了最小特权原则。在生产环境中,始终限制 root 用户访问以提高安全性。
我们可以使用PermitRootLogin指令来禁用root用户登录。
首先,打开 /etc/ssh/sshd_config 文件并使用选项 no
和 PermitRootLogin 指令:
PermitRootLogin no
现在,重新启动 sshd 服务并使用 exit 命令终止会话:
systemctl restart sshd
exit
最后,通过创建新的 SSH 会话来验证这一点:
ssh -l root 192.168.19.130
在这里,我们可以观察到我们无法使用root用户登录远程主机。要允许 root 用户登录,我们可以使用带有相同指令的选项 yes 。
更改默认 SSH 端口
默认情况下,SSH 使用 TCP 端口 22。但是,我们可以将 SSH 配置为在不同端口上运行,即 8088。
首先,打开 /etc/ssh/sshd_config 文件并使用 8088 值和 Port 指令:
Port 8088
接下来,重新启动 sshd 服务并终止会话:
systemctl restart sshd
exit
现在,让我们登录远程主机:
ssh -p 8088 -l root 192.168.19.130
在此示例中,我们使用 -p
选项来指定端口号。
在某些情况下,我们必须执行一些其他步骤才能允许在非默认端口上进行通信。例如识别可用端口、更新防火墙规则、SELinux 设置等。
在本文中,我们讨论了 SSH 协议及其常见用例。接下来,我们讨论了一些常见的选项。最后,我们讨论了一些保护 SSH 服务器的设置。
您知道 Linux 中其他最佳的 SSH 命令用法吗?请在下面的评论中告诉我们您的观点。