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