SSH 要点:使用 SSH 服务器、客户端和密钥

2023-11-20

介绍

SSH 是一种安全协议,用作远程连接 Linux 服务器的主要方式。它通过生成远程 shell 来提供基于文本的界面。连接后,您在本地终端中输入的所有命令都会发送到远程服务器并在那里执行。

在这份备忘单式的指南中,我们将介绍一些使用 SSH 连接来实现您的目标的常见方法。当您需要了解如何以不同方式连接或配置服务器时,这可以用作快速参考。

如何使用本指南

  • 阅读SSH 概述部分首先,如果您一般不熟悉 SSH 或者刚刚开始使用。
  • 使用适用于您想要实现的目标的后续部分。大多数部分不以任何其他部分为基础,因此您可以独立使用以下示例。
  • 使用本页左侧的“内容”菜单(页面宽度较宽)或浏览器的查找功能来找到您需要的部分。
  • Copy and paste the command-line examples given, substituting the highlighted values with your own values.

SSH 概述

连接远程 Linux 服务器的最常见方法是通过 SSH。 SSH 代表 Secure Shell,提供一种安全可靠的方式来远程执行命令、进行更改和配置服务。通过 SSH 连接时,您可以使用远程服务器上存在的帐户登录。

SSH 的工作原理

当您通过 SSH 连接时,您将进入 shell 会话,这是一个基于文本的界面,您可以在其中与服务器交互。在 SSH 会话期间,您在本地终端中键入的任何命令都将通过加密的 SSH 隧道发送并在您的服务器上执行。

SSH 连接是使用客户端-服务器模型实现的。这意味着要建立 SSH 连接,远程计算机必须运行名为 SSH 守护程序的软件。该软件侦听特定网络端口上的连接,验证连接请求,并在用户提供正确的凭据时生成适当的环境。

用户的计算机必须有 SSH 客户端。这是一款知道如何使用 SSH 协议进行通信的软件,并且可以获取有关要连接的远程主机、要使用的用户名以及应传递以进行身份​​验证的凭据的信息。客户端还可以指定有关他们想要建立的连接类型的某些详细信息。

SSH 如何验证用户身份

客户端通常使用密码(安全性较低且不推荐)或非常安全的 SSH 密钥进行身份验证。

密码登录经过加密,对于新用户来说很容易理解。然而,自动化机器人和恶意用户通常会反复尝试对允许基于密码登录的帐户进行身份验证,这可能会导致安全隐患。因此,我们建议始终为大多数配置设置基于 SSH 密钥的身份验证。

SSH 密钥是一组可用于身份验证的匹配加密密钥。每组包含一个公钥和一个私钥。公钥可以自由共享而无需担心,而私钥则必须警惕保管,切勿泄露给任何人。

要使用 SSH 密钥进行身份验证,用户的本地计算机上必须有 SSH 密钥对。在远程服务器上,必须将公钥复制到用户主目录中的文件中~/.ssh/authorized_keys。该文件包含一个公钥列表,每行一个,这些密钥被授权登录到该帐户。

当客户端连接到主机并希望使用 SSH 密钥身份验证时,它将将此意图通知服务器并告诉服务器要使用哪个公钥。然后服务器检查其authorized_keys文件中的公钥,生成一个随机字符串,并使用公钥对其进行加密。该加密消息只能使用关联的私钥进行解密。服务器将将此加密消息发送给客户端,以测试他们是否确实拥有关联的私钥。

收到此消息后,客户端将使用私钥对其进行解密,并将显示的随机字符串与先前协商的会话 ID 结合起来。然后,它生成该值的 MD5 哈希值并将其传输回服务器。服务器已经拥有原始消息和会话 ID,因此它可以比较这些值生成的 MD5 哈希值并确定客户端必须拥有私钥。

现在您已经了解了 SSH 的工作原理,我们可以开始讨论一些示例来演示使用 SSH 的不同方式

生成和使用 SSH 密钥

本节将介绍如何在客户端计算机上生成 SSH 密钥并将公钥分发到应使用它们的服务器。如果您以前没有生成密钥,那么这是一个很好的开始部分,因为它可以提高未来连接的安全性。

生成 SSH 密钥对

在本地计算机上生成新的 SSH 公钥和私钥对是无需密码即可通过远程服务器进行身份验证的第一步。除非有充分的理由不这样做,否则您应该始终使用 SSH 密钥进行身份验证。

许多加密算法可用于生成 SSH 密钥,包括 RSA、DSA 和 ECDSA。 RSA 密钥通常是首选,并且是默认密钥类型。

要在本地计算机上生成 RSA 密钥对,请键入:

  1. ssh 密钥生成器
Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa):

此提示允许您选择存储 RSA 私钥的位置。按ENTER将此保留为默认值,这会将它们存储在.ssh用户主目录中的隐藏目录。保留选择的默认位置将允许 SSH 客户端自动查找密钥。

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

下一个提示允许您输入任意长度的密码以保护您的私钥。默认情况下,您每次使用私钥时都必须输入在此处设置的任何密码,作为额外的安全措施。随意按ENTER如果您不需要密码,请将此留空。但请记住,这将允许任何控制您的私钥的人登录您的服务器。

如果您选择输入密码,则键入时不会显示任何内容。这是一项安全预防措施。

Output
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: 8c:e9:7c:fa:bf:c4:e5:9c:c9:b8:60:1f:fe:1c:d3:8a root@here The key's randomart image is: +--[ RSA 2048]----+ | | | | | | | + | | o S . | | o . * + | | o + = O . | | + = = + | | ....Eo+ | +-----------------+

此过程生成了一个 RSA SSH 密钥对,位于.ssh用户主目录中的隐藏目录。这些文件是:

  • ~/.ssh/id_rsa: 私钥。不要共享此文件!
  • ~/.ssh/id_rsa.pub:关联的公钥。这可以自由共享,不会产生任何后果。

生成具有更多位数的 SSH 密钥对

SSH 密钥默认为 2048 位。通常认为这对于安全性而言足够好,但您可以为更坚固的密钥指定更多的位数。

为此,请包括-b参数与您想要的位数。大多数服务器支持长度至少为 4096 位的密钥。出于 DDOS 保护目的,可能不接受较长的密钥:

  1. ssh 密钥生成器-b 4096

如果您之前创建了不同的密钥,系统会询问您是否要覆盖以前的密钥:

Overwrite (y/n)?

如果您选择“是”,您之前的密钥将被覆盖,您将无法再使用该密钥登录服务器。因此,请务必谨慎覆盖密钥。

删除或更改私钥上的密码

如果您已为私钥生成了密码并希望更改或删除它,您可以轻松完成此操作。

Note:要更改或删除密码,您必须知道原始密码。如果您丢失了密钥的密码,则无法追索,并且必须生成新的密钥对。

要更改或删除密码,只需键入:

  1. ssh 密钥生成器-p
Enter file in which the key is (/root/.ssh/id_rsa):

您可以键入要修改的按键位置或按ENTER接受默认值:

Enter old passphrase:

输入您想要更改的旧密码。然后系统将提示您输入新密码:

Enter new passphrase (empty for no passphrase):
Enter same passphrase again:

在这里输入您的新密码或按ENTER删除密码。

显示 SSH 密钥指纹

每个 SSH 密钥对共享一个加密“指纹”,可用于唯一标识密钥。这在多种情况下都很有用。

要查找 SSH 密钥的指纹,请键入:

  1. ssh 密钥生成器-l
Enter file in which the key is (/root/.ssh/id_rsa):

您可以按ENTER如果这是密钥的正确位置,则输入修改后的位置。您将获得一个字符串,其中包含密钥的位长、指纹、为其创建的帐户和主机以及所使用的算法:

Output
4096 8e:c4:82:47:87:c2:26:4b:68:ff:96:1a:39:62:9e:4e demo@test (RSA)

使用 SSH-Copy-ID 将您的公共 SSH 密钥复制到服务器

要将您的公钥复制到服务器,从而无需密码即可进行身份验证,可以采取多种方法。

如果您当前为服务器配置了基于密码的 SSH 访问,并且您拥有ssh-copy-id安装实用程序,这是一个简单的过程。这ssh-copy-id许多 Linux 发行版的 OpenSSH 软件包中都包含该工具,因此很可能默认安装它。

如果您有此选项,您可以通过键入以下内容轻松转移您的公钥:

  1. ssh-copy-id username@remote_host

这将提示您输入远程系统上的用户帐户密码:

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
demo@111.111.11.111's password:

输入密码后,您的内容~/.ssh/id_rsa.pub密钥将附加到用户帐户的末尾~/.ssh/authorized_keys file:

Output
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'demo@111.111.11.111'" and check to make sure that only the key(s) you wanted were added.

您现在无需密码即可登录该帐户:

  1. ssh username@remote_host

将您的公共 SSH 密钥复制到没有 SSH-Copy-ID 的服务器

如果您没有ssh-copy-id实用程序可用,但仍然可以通过基于密码的 SSH 访问远程服务器,您可以以不同的方式复制公钥的内容。

您可以输出密钥的内容并将其通过管道传输到ssh命令。在远程端,您可以确保~/.ssh目录存在,然后将管道内容附加到~/.ssh/authorized_keys file:

  1. cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

系统将要求您提供远程帐户的密码:

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
demo@111.111.11.111's password:

输入密码后,您的密钥将被复制,让您无需密码即可登录:

  1. ssh username@remote_IP_host

手动将您的 SSH 公钥复制到服务器

如果您没有可用的基于密码的 SSH 访问,则必须手动将公钥添加到远程服务器。

在本地计算机上,您可以通过键入以下内容找到公钥文件的内容:

  1. cat〜/.ssh/id_rsa.pub
Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

您可以复制该值,然后手动将其粘贴到远程服务器上的适当位置。您必须通过其他方式(例如 DigitalOcean Web 控制台)登录远程服务器。

在远程服务器上创建~/.ssh目录(如果不存在):

  1. mkdir -p ~/.ssh

之后,您可以创建或附加~/.ssh/authorized_keys通过键入以下内容创建文件:

  1. echo public_key_string >> ~/.ssh/authorized_keys

您现在应该能够无需密码登录远程服务器。

基本连接说明

以下部分将介绍有关如何使用 SSH 连接到服务器的一些基础知识。

连接到远程服务器

要连接到远程服务器并在那里打开 shell 会话,您可以使用ssh命令。

最简单的形式假设您本地计算机上的用户名与远程服务器上的用户名相同。如果这是真的,您可以使用以下方式进行连接:

  1. ssh remote_host

如果您的用户名在远程服务器上不同,您需要像这样传递远程用户名:

  1. ssh username@remote_host

第一次连接到新主机时,您将看到一条如下所示的消息:

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Type yes接受远程主机的真实性。

如果您使用密码身份验证,系统将提示您在此处输入远程帐户的密码。如果您使用 SSH 密钥,系统将提示您输入私钥密码(如果已设置),否则您将自动登录。

在远程服务器上运行单个命令

要在远程服务器上运行单个命令而不是生成 shell 会话,您可以在连接信息后添加该命令,如下所示:

  1. ssh username@remote_host command_to_run

这将连接到远程主机,使用您的凭据进行身份验证,并执行您指定的命令。此后连接将立即关闭。

使用不同端口登录服务器

默认情况下,服务器上的 SSH 守护程序在端口上运行22。您的 SSH 客户端在尝试连接时会假设是这种情况。如果您的 SSH 服务器正在侦听非标准端口(这将在后面的部分中演示),则在与客户端连接时必须指定新的端口号。

您可以通过指定端口号来完成此操作-p option:

  1. ssh -p port_num username@remote_host

为了避免每次登录远程服务器时都必须执行此操作,您可以在~/.ssh本地计算机主目录中的目录。

立即编辑或创建文件,输入:

  1. nano〜/ .ssh /配置

在这里,您可以设置特定于主机的配置选项。要指定新端口,请使用如下格式:

〜/ .ssh /配置
Host remote_alias
    HostName remote_host
    Port port_num

这将允许您无需在命令行上指定特定端口号即可登录。

将 SSH 密钥添加到 SSH 代理以避免输入密码

如果您的 SSH 私钥上有密码,则每次使用它连接到远程主机时,系统都会提示您输入该密码。

为了避免重复执行此操作,您可以运行 SSH 代理。这个小实用程序会在您第一次输入密码后存储您的私钥。它将在您的终端会话期间可用,使您将来无需重新输入密码即可进行连接。

如果您需要转发 SSH 凭据(稍后显示),这一点也很重要。

要启动 SSH 代理,请在本地终端会话中键入以下内容:

  1. eval $(ssh代理)
Output
Agent pid 10891

这将启动代理程序并将其置于后台。现在,您需要将您的私钥添加到代理,以便它可以管理您的密钥:

  1. ssh-add
Enter passphrase for /home/demo/.ssh/id_rsa:
Identity added: /home/demo/.ssh/id_rsa (/home/demo/.ssh/id_rsa)

您必须输入密码(如果已设置)。之后,您的身份文件将添加到代理中,允许您使用密钥登录,而无需再次重新输入密码。

转发您的 SSH 凭证以在服务器上使用

如果您希望能够在没有密码的情况下从另一台服务器连接到另一台服务器,则需要转发您的 SSH 密钥信息。这将允许您使用本地计算机上的凭据通过您连接到的服务器向另一台服务器进行身份验证。

首先,您必须启动 SSH 代理并将 SSH 密钥添加到代理中(请参阅前面的内容)。完成此操作后,您需要使用以下命令连接到您的第一台服务器-A选项。这会将您的凭据转发到此会话的服务器:

  1. ssh -A username@remote_host

从这里,您可以通过 SSH 登录到您的 SSH 密钥有权访问的任何其他主机。您将进行连接,就好像您的 SSH 私钥位于该服务器上一样。

服务器端配置选项

本节包含一些常见的服务器端配置选项,这些选项可以决定服务器响应的方式以及允许的连接类型。

禁用密码验证

如果您已配置、测试并正常工作 SSH 密钥,则禁用密码身份验证可能是个好主意。这将阻止任何用户使用密码通过 SSH 登录。

为此,请连接到远程服务器并打开/etc/ssh/sshd_config具有 root 或 sudo 权限的文件:

  1. sudo nano/etc/ssh/sshd_config

在文件内部,搜索PasswordAuthentication指示。如果已注释掉,请取消注释。将其设置为no禁用密码登录:

/etc/ssh/sshd_config
PasswordAuthentication no

进行更改后,保存并关闭文件。要实施更改,您应该重新启动 SSH 服务。

在 Ubuntu/Debian 上:

  1. sudo service ssh重新开始

在 CentOS/Fedora 上:

  1. sudo servicesshd 重新启动

现在,系统上的所有帐户将无法使用密码通过 SSH 登录。

更改 SSH 守护程序运行的端口

一些管理员建议您更改 SSH 运行的默认端口。这可以帮助减少您的服务器遭受自动机器人的身份验证尝试的次数。

要更改 SSH 守护程序侦听的端口,您必须登录到远程服务器。打开sshd_config通过使用该用户登录或使用 root 权限在远程系统上创建文件sudo:

  1. sudo nano/etc/ssh/sshd_config

进入后,您可以通过查找以下命令来更改 SSH 运行的端口:Port 22规范并修改它以反映您希望使用的端口。例如,将端口更改为4444,将其放入您的文件中:

/etc/ssh/sshd_config
#Port 22
Port 4444

完成后保存并关闭文件。要实施更改,您必须重新启动 SSH 守护程序。

在 Ubuntu/Debian 上:

  1. sudo service ssh重新开始

在 CentOS/Fedora 上:

  1. sudo servicesshd 重新启动

守护程序重新启动后,您将需要通过指定端口号进行身份验证(在前面的部分中已演示)。

限制可以通过 SSH 连接的用户

要明确限制能够通过 SSH 登录的用户帐户,您可以采取几种不同的方法,每种方法都涉及编辑 SSH 守护程序配置文件。

在远程服务器上,现在使用 root 或 sudo 权限打开此文件:

  1. sudo nano/etc/ssh/sshd_config

指定允许登录的帐户的第一种方法是使用AllowUsers指示。搜索AllowUsers文件中的指令。如果不存在,请在任何地方创建它。在该指令之后,列出应允许通过 SSH 登录的用户帐户:

/etc/ssh/sshd_config
AllowUsers user1 user2

保存并关闭文件。重新启动守护程序以实施您的更改。

在 Ubuntu/Debian 上:

  1. sudo service ssh重新开始

在 CentOS/Fedora 上:

  1. sudo servicesshd 重新启动

如果您更熟悉群组管理,您可以使用AllowGroups指令代替。如果是这种情况,只需添加一个应允许 SSH 访问的组(我们将创建该组并立即添加成员):

/etc/ssh/sshd_config
AllowGroups sshmembers

保存并关闭文件。

现在,您可以通过键入以下内容来创建与您指定的组匹配的系统组(没有主目录):

  1. sudo groupadd -r sshmembers

确保将所需的任何用户帐户添加到该组中。这可以通过输入以下内容来完成:

  1. sudo usermod -a -G sshmembers user1
  2. sudo usermod -a -G sshmembers user2

现在,重新启动 SSH 守护程序以实施您的更改。

在 Ubuntu/Debian 上:

  1. sudo service ssh重新开始

在 CentOS/Fedora 上:

  1. sudo servicesshd 重新启动

禁用 root 登录

通常建议您在设置具有以下功能的 SSH 用户帐户后完全禁用通过 SSH 的 root 登录:sudo特权。

为此,请在远程服务器上使用 root 或 sudo 打开 SSH 守护程序配置文件。

  1. sudo nano/etc/ssh/sshd_config

在里面,搜索一个名为PermitRootLogin。如果有注释,请取消注释。将值更改为“否”:

/etc/ssh/sshd_config
PermitRootLogin no

保存并关闭文件。要实施更改,请重新启动 SSH 守护程序。

在 Ubuntu/Debian 上:

  1. sudo service ssh重新开始

在 CentOS/Fedora 上:

  1. sudo servicesshd 重新启动

允许特定命令的根访问

在某些情况下,您可能希望一般禁用 root 访问权限,但又启用它以允许某些应用程序正确运行。备份例程就是一个例子。

这可以通过 root 用户的authorized_keys文件,其中包含被授权使用该帐户的 SSH 密钥。

将您希望用于此过程的本地计算机密钥(我们建议为每个自动过程创建一个新密钥)添加到 root 用户的密钥authorized_keys服务器上的文件。我们将演示与ssh-copy-id命令在这里,但您可以使用我们在其他部分中讨论的任何复制密钥的方法:

  1. ssh-copy-id root@remote_host

现在,登录远程服务器。我们需要调整条目authorized_keys文件,因此使用 root 或 sudo 访问权限打开它:

  1. sudo nano/root/.ssh/authorized_keys

在包含您上传的密钥的行的开头,添加command=定义该键有效的命令的列表。这应该包括可执行文件的完整路径以及任何参数:

/root/.ssh/authorized_keys
command="/path/to/command arg1 arg2" ssh-rsa ...

完成后保存并关闭文件。

现在,打开sshd_config具有 root 或 sudo 权限的文件:

  1. sudo nano/etc/ssh/sshd_config

查找指令PermitRootLogin,并将值更改为forced-commands-only。仅当为密钥指定命令时,才允许 SSH 密钥登录使用 root:

/etc/ssh/sshd_config
PermitRootLogin forced-commands-only

保存并关闭文件。重新启动 SSH 守护程序以实施您的更改。

在 Ubuntu/Debian 上:

  1. sudo service ssh重新开始

在 CentOS/Fedora 上:

  1. sudo servicesshd 重新启动

将 X 应用程序显示转发给客户端

SSH 守护程序可以配置为自动将服务器上 X 应用程序的显示转发到客户端计算机。为了使其正常工作,客户端必须配置并启用 X windows 系统。

要启用此功能,请登录到远程服务器并编辑sshd_config以 root 身份或具有 sudo 权限的文件:

  1. sudo nano/etc/ssh/sshd_config

搜索X11Forwarding指示。如果已注释掉,请取消注释。如有必要,创建它并将值设置为“yes”:

/etc/ssh/sshd_config
X11Forwarding yes

保存并关闭文件。重新启动 SSH 守护程序以实施这些更改。

在 Ubuntu/Debian 上:

  1. sudo service ssh重新开始

在 CentOS/Fedora 上:

  1. sudo servicesshd 重新启动

要连接到服务器并转发应用程序的显示,您必须传递-X连接时客户端的选项:

  1. ssh -X username@remote_host

通过此会话在服务器上启动的图形应用程序应显示在本地计算机上。性能可能有点慢,但在紧要关头非常有帮助。

客户端配置选项

在下一节中,我们将重点介绍您可以在连接的客户端进行的一些调整。

定义特定于服务器的连接信息

在本地计算机上,您可以为连接到的部分或全部服务器定义单独的配置。这些可以存储在~/.ssh/config文件,每次调用时都会由 SSH 客户端读取。

在本地计算机上的文本编辑器中创建或打开此文件:

  1. nano〜/ .ssh /配置

在内部,您可以通过引入每个配置选项来定义单独的配置选项Host关键字,后跟别名。在其下方并缩进,您可以定义在ssh_config手册页:

  1. manssh_配置

一个示例配置是:

〜/ .ssh /配置
Host testhost
    HostName your_domain
    Port 4444
    User demo

然后您可以连接到your_domain在港口4444使用用户名demo只需输入:

  1. ssh测试主机

您还可以使用通配符来匹配多个主机。请记住,后面的匹配可以覆盖前面的匹配。因此,您应该将最常见的匹配项放在顶部。例如,您可以默认所有连接不允许 X 转发,并覆盖your_domain通过将其包含在您的文件中:

〜/ .ssh /配置
Host *
    ForwardX11 no

Host testhost
    HostName your_domain
    ForwardX11 yes
    Port 4444
    User demo

完成后保存并关闭文件。

保持连接处于活动状态以避免超时

如果您发现自己在准备好之前就与 SSH 会话断开连接,则您的连接可能超时。

您可以将客户端配置为每隔一段时间向服务器发送一个数据包,以避免出现这种情况:

在本地计算机上,您可以通过编辑您的~/.ssh/config文件。现在打开它:

  1. nano〜/ .ssh /配置

如果尚不存在,请在文件顶部定义一个将匹配所有主机的部分。设置ServerAliveInterval设置为“120”每两分钟向服务器发送一个数据包。这应该足以通知服务器不要关闭连接:

〜/ .ssh /配置
Host *
    ServerAliveInterval 120

完成后保存并关闭文件。

禁用主机检查

默认情况下,每当您连接到新服务器时,您都会看到远程 SSH 守护程序的主机密钥指纹。

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

经过配置,您可以验证尝试连接的主机的真实性,并发现恶意用户可能试图伪装成远程主机的实例。

在某些情况下,您可能希望禁用此功能。Note:这可能会带来很大的安全风险,因此如果您这样设置系统,请确保您知道自己在做什么。

要进行更改,请打开~/.ssh/config本地计算机上的文件:

  1. nano〜/ .ssh /配置

如果尚不存在,请在文件顶部定义一个将匹配所有主机的部分。设置StrictHostKeyChecking指示no自动添加新主机到known_hosts文件。设置UserKnownHostsFile to /dev/null不要对新的或更改的主机发出警告:

〜/ .ssh /配置
Host *
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

您可以通过反转其他主机的这些选项来根据具体情况启用检查。默认为StrictHostKeyChecking is ask:

〜/ .ssh /配置
Host *
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Host testhost
    HostName your_domain
    StrictHostKeyChecking ask
    UserKnownHostsFile /home/demo/.ssh/known_hosts

通过单个 TCP 连接复用 SSH

在某些情况下,建立新的 TCP 连接可能需要比您期望的时间更长的时间。如果要与同一台计算机建立多个连接,则可以利用多路复用。

SSH 多路复用为多个 SSH 会话重复使用相同的 TCP 连接。这消除了建立新会话所需的一些工作,可能会加快速度。出于其他原因,限制连接数量也可能有所帮助。

要设置多路复用,您可以手动设置连接,也可以将客户端配置为在可用时自动使用多路复用。我们将在这里演示第二个选项。

要配置多路复用,请在本地计算机上编辑 SSH 客户端的配置文件:

  1. nano〜/ .ssh /配置

如果文件顶部还没有通配符主机定义,请立即添加一个(如Host *)。我们将设置ControlMaster, ControlPath, and ControlPersist值来建立我们的多路复用配置。

The ControlMaster应设置为“auto”,以便能够在可能的情况下自动允许多路复用。这ControlPath将建立控制套接字的路径。第一个会话将创建此套接字,后续会话将能够找到它,因为它由用户名、主机和端口标记。

设置ControlPersist选项1将允许初始主连接在后台运行。这1指定 TCP 连接应在最后一个 SSH 会话关闭后一秒自动终止:

/.ssh/config
Host *
    ControlMaster auto
    ControlPath ~/.ssh/multiplex/%r@%h:%p
    ControlPersist 1

完成后保存并关闭文件。现在,我们需要实际创建我们在控制路径中指定的目录:

  1. mkdir〜/.ssh/多路复用

现在,与同一台计算机建立的任何会话都将尝试使用现有的套接字和 TCP 连接。当最后一个会话存在时,连接将在一秒后断开。

如果由于某种原因您需要暂时绕过多路复用配置,您可以通过传递-S标志与none:

  1. ssh -S none username@remote_host

设置 SSH 隧道

通过安全 SSH 隧道传输其他流量是解决限制性防火墙设置的绝佳方法。这也是对未加密的网络流量进行加密的好方法。

配置到服务器的本地隧道

SSH 连接可用于将流量从本地主机上的端口传输到远程主机上的端口。

本地连接是一种通过远程主机从本地计算机访问网络位置的方法。首先,与远程主机建立 SSH 连接。在远程服务器上,与用户提供的外部(或内部)网络地址建立连接,并且到此位置的流量通过隧道传输到指定端口上的本地计算机。

这通常用于通过绕过防火墙来隧道到限制较少的网络环境。另一个常见用途是从远程位置访问“仅限本地主机”的 Web 界面。

要建立到远程服务器的本地隧道,您需要使用-L连接时的参数,您必须提供三项附加信息:

  • 您希望访问隧道连接的本地端口。
  • 您希望远程主机连接到的主机。
  • 您希望远程主机连接的端口。

这些按照上面的顺序给出(用冒号分隔),作为参数-L旗帜。我们还将使用-f标志,这会导致 SSH 在执行之前进入后台,并且-N标志,它不会打开 shell 或在远程端执行程序。

例如,要连接到your_domain在远程主机的端口 80 上,使连接在本地计算机的端口 8888 上可用,您可以键入:

  1. ssh -f -N -L 8888:your_domain:80 username@remote_host

现在,如果您将本地网络浏览器指向127.0.0.1:8888,你应该看到任何内容your_domain在港口80.

更通用的语法指南是:

  1. ssh -L your_port:site_or_IP_to_access:site_port username@host

由于该连接位于后台,因此您必须找到其 PID 才能终止它。您可以通过搜索您转发的端口来执行此操作:

  1. ps aux | grep 8888
Output
1001 5965 0.0 0.0 48168 1136 ? Ss 12:28 0:00 ssh -f -N -L 8888:your_domain:80 username@remote_host 1001 6113 0.0 0.0 13648 952 pts/2 S+ 12:37 0:00 grep --colour=auto 8888

然后,您可以通过定位 PID 来终止该进程,PID 是与您的 SSH 命令匹配的行的第二列中的数字:

  1. kill 5965

另一种选择是启动连接without the -f旗帜。这将使连接保持在前台,从而防止您在转发期间使用终端窗口。这样做的好处是你可以通过输入轻松地杀死隧道CTRL-C.

配置到服务器的远程隧道

SSH 连接可用于将流量从本地主机上的端口传输到远程主机上的端口。

在远程隧道中,与远程主机建立连接。在修建隧道的过程中,remote端口已指定。然后,远程主机上的此端口将通过隧道连接到从本地计算机连接的主机和端口组合。这将允许远程计算机通过您的本地计算机访问主机。

如果您需要允许访问锁定到外部连接的内部网络,这会很有用。如果防火墙允许连接out网络,这将允许您连接到远程计算机并将流量从该计算机传输到内部网络上的某个位置。

要建立到远程服务器的远程隧道,您需要使用-R连接时的参数,您必须提供三项附加信息:

  • 远程主机可以访问隧道连接的端口。
  • 您希望本地计算机连接到的主机。
  • 您希望本地计算机连接到的端口。

这些按照上面的顺序给出(用冒号分隔),作为参数-R旗帜。我们还将使用-f标志,这会导致 SSH 在执行之前进入后台,并且-N标志,它不会打开 shell 或在远程端执行程序。

例如,要连接到your_domain在我们本地计算机上的端口 80 上,使连接在我们的远程主机上的端口上可用8888,您可以输入:

  1. ssh -f -N -R 8888:your_domain:80 username@remote_host

现在,在远程主机上,打开 Web 浏览器127.0.0.1:8888可以让你看到任何内容your_domain在港口80.

更通用的语法指南是:

  1. ssh -R remote_port:site_or_IP_to_access:site_port username@host

由于该连接位于后台,因此您必须找到其 PID 才能终止它。您可以通过搜索您转发的端口来执行此操作:

  1. ps aux | grep 8888
Output
1001 5965 0.0 0.0 48168 1136 ? Ss 12:28 0:00 ssh -f -N -R 8888:your_domain:80 username@remote_host 1001 6113 0.0 0.0 13648 952 pts/2 S+ 12:37 0:00 grep --colour=auto 8888

然后,您可以通过定位与 SSH 命令匹配的行的 PID(第二列中的数字)来终止该进程:

  1. kill 5965

另一种选择是启动连接without the -f旗帜。这将使连接保持在前台,从而防止您在转发期间使用终端窗口。这样做的好处是你可以通过输入轻松地杀死隧道CTRL-C.

配置到远程服务器的动态隧道

SSH 连接可用于将流量从本地主机上的端口传输到远程主机上的端口。

动态隧道与本地隧道类似,它允许本地计算机连接到其他资源through远程主机。动态隧道只需指定单个本地端口即可实现此目的。希望利用此端口进行隧道传输的应用程序必须能够使用 SOCKS 协议进行通信,以便数据包可以在隧道的另一端正确重定向。

传递到此本地端口的流量将被发送到远程主机。从那里,SOCKS 协议将被解释以建立到所需终端位置的连接。此设置允许支持 SOCKS 的应用程序通过远程服务器连接到任意数量的位置,而无需多个静态隧道。

为了建立连接,我们将通过-D标记以及我们希望访问隧道的本地端口。我们还将使用-f标志,这会导致 SSH 在执行之前进入后台,并且-N标志,它不会打开 shell 或在远程端执行程序。

例如,在端口上建立隧道7777,您可以输入:

  1. ssh -f -N -D 7777 username@remote_host

从这里,您可以开始将 SOCKS 感知应用程序(如 Web 浏览器)指向您选择的端口。应用程序将其信息发送到与端口关联的套接字中。

将流量引导至 SOCKS 端口的方法将根据应用程序的不同而有所不同。例如,在 Firefox 中,一般位置是首选项 > 高级 > 设置 > 手动代理配置。在 Chrome 中,您可以使用以下命令启动应用程序--proxy-server=标志设置。您将需要使用本地主机接口和您转发的端口。

由于该连接位于后台,因此您必须找到其 PID 才能终止它。您可以通过搜索您转发的端口来执行此操作:

  1. ps aux | grep 8888
Output
1001 5965 0.0 0.0 48168 1136 ? Ss 12:28 0:00 ssh -f -N -D 7777 username@remote_host 1001 6113 0.0 0.0 13648 952 pts/2 S+ 12:37 0:00 grep --colour=auto 8888

然后,您可以通过定位与 SSH 命令匹配的行的 PID(第二列中的数字)来终止该进程:

  1. kill 5965

另一种选择是启动连接without the -f旗帜。这将使连接保持在前台,从而防止您在转发期间使用终端窗口。这样做的好处是你可以通过输入轻松地杀死隧道CTRL-C.

使用 SSH 转义码来控制连接

即使在建立 SSH 会话之后,也可以从终端内部对连接进行控制。我们可以使用 SSH 转义码来做到这一点,它允许我们在会话中与本地 SSH 软件进行交互。

强制从客户端断开连接(如何退出卡住或冻结的会话)

OpenSSH 最有用但在很大程度上被忽视的功能之一是能够从内部控制会话的某些方面。

这些命令可以从以下命令开始执行~SSH 会话中的控制字符。仅当控制命令是换行符后键入的第一个命令时,才会对其进行解释,因此在使用命令之前,请务必按 ENTER 键一两次。

最有用的控件之一是能够启动与客户端的断开连接。 SSH 连接通常由服务器关闭,但如果服务器出现问题或连接已断开,这可能会出现问题。通过使用客户端断开连接,可以从客户端彻底关闭连接。

要关闭来自客户端的连接,请使用控制字符 (~),带点。如果您的连接出现问题,您可能会陷入终端会话卡住的状态。尽管缺乏反馈,但仍键入命令来执行客户端断开连接:

  1. [ENTER]
  2. ~.

连接应立即关闭,使您返回到本地 shell 会话。

将 SSH 会话置于后台

OpenSSH 最有用但又被忽视的功能之一是能够从连接内控制会话的某些方面。

这些命令可以从以下命令开始执行~来自 SSH 连接内的控制字符。仅当控制命令是换行符后键入的第一个命令时才会被解释,因此请始终按ENTER使用前一两次。

它提供的一项功能是将 SSH 会话置于后台。为此,我们需要提供控制字符(~),然后执行传统的键盘快捷键将任务置于后台(CTRL-z):

  1. [ENTER]
  2. ~[CTRL-z]

这会将连接置于后台,让您返回到本地 shell 会话。要返回 SSH 会话,您可以使用传统的作业控制机制。

您可以通过键入以下内容立即重新激活最近的后台任务:

  1. fg

如果您有多个后台任务,您可以通过键入以下内容来查看可用的作业:

  1. jobs
Output
[1]+ Stopped ssh username@some_host [2] Stopped ssh username@another_host

然后,您可以使用第一列中带有百分号的索引将任何任务带到前台:

  1. fg %2

更改现有 SSH 连接上的端口转发选项

OpenSSH 最有用但又被忽视的功能之一是能够从连接内控制会话的某些方面。

这些命令可以从以下命令开始执行~来自 SSH 连接内的控制字符。仅当控制命令是换行符后键入的第一个命令时,才会对其进行解释,因此在使用命令之前,请务必按 ENTER 键一两次。

这允许用户在建立连接后更改端口转发配置。这允许您即时创建或拆除端口转发规则。

这些功能是 SSH 命令行界面的一部分,可以在会话期间使用控制字符 (~)和“C”:

  1. [ENTER]
  2. ~C
ssh>

您将看到一个 SSH 命令提示符,其中包含非常有限的有效命令集。要查看可用选项,您可以键入-h从这个提示。如果没有返回任何内容,您可能必须使用以下命令来增加 SSH 输出的详细程度~v几次:

  1. [ENTER]
  2. ~v
  3. ~v
  4. ~v
  5. ~C
  6. -h
Commands:
      -L[bind_address:]port:host:hostport    Request local forward
      -R[bind_address:]port:host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KL[bind_address:]port                 Cancel local forward
      -KR[bind_address:]port                 Cancel remote forward
      -KD[bind_address:]port                 Cancel dynamic forward

正如您所看到的,您可以使用适当的选项轻松实现任何转发选项(有关更多信息,请参阅转发部分)。您还可以使用在转发类型字母之前指定“K”的关联“kill”命令来销毁隧道。例如,杀死本地前锋(-L),你可以使用-KL命令。您只需为此提供端口。

因此,要设置本地端口转发,您可以键入:

  1. [ENTER]
  2. ~C
  3. -L 8888:127.0.0.1:80

Port 8888现在,您的本地计算机上将能够与您要连接的主机上的 Web 服务器进行通信。完成后,您可以通过键入以下内容来删除该转发:

  1. [ENTER]
  2. ~C
  3. -KL 8888

结论

上述说明应涵盖大多数用户日常所需的有关 SSH 的大部分信息。如果您有其他技巧或希望分享您最喜欢的配置和方法,请随时使用下面的评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSH 要点:使用 SSH 服务器、客户端和密钥 的相关文章

  • 使用Apple80211 api时如何知道OPEN、WPA、WPA2、WEP等安全类型?

    Cydia中的Wifi WiFi FoRum等wifi扫描应用可以知道安全类型 使用 Apple80211 api 时 应用程序如何知道 OPEN WPA WPA2 WEP 等安全类型 CAPABILITIES 的值为 1057 1025
  • JSF - 实施受限页面过滤器

    我正在关注 BalusC 的回答JSF 2 0 如何获取在浏览器地址栏中输入的 URL https stackoverflow com questions 4105263 jsf 2 0 how to get the url that is
  • 当SESSION_COOKIE_SECURE = True时如何在HTTP中获取一些用户身份信息

    以下是我正在开发的网站的简短描述 公共页面可以通过 HTTP 或 HTTPS 访问 其他一些页面 认证页面 账户详情页面等 需要通过HTTPS访问 Apache2 负责进行相关的 HTTP 到 HTTPS 链接重定向 我使用标准 Djang
  • 使用公钥时出现 InvalidKeySpecException

    我正在拼命尝试在 Android 上使用非对称公钥 私钥加密技术来加密消息 我在 Windows 上 使用 puttygen 生成了公钥和私钥 我不确定它有什么区别 但我选择了 SSH 2 RSA 这是公钥 AAAAB3NzaC1yc2EA
  • AJAX 安全问题

    我希望能够解决一些关于 AJAX 安全性的问题 这是我试图理解的一个场景 假设我正在使用 AJAX 向页面请求一些半敏感材料 例如 我将把用户的 ID 传递给一个 php 文件 并返回一些关于他们自己的信息 现在 是什么阻止人们模拟此 Ja
  • 有关 CredEnumerate 的帮助

    作为后续this https stackoverflow com questions 199518 how to programatically add mapped network passwords winxp我希望有人可以帮助解决这个
  • 为什么我在 Firefox 中突然遇到“阻止加载混合活动内容”问题?

    今天早上 在将我的 Firefox 浏览器升级到最新版本 从 22 到 23 后 我的后台 网站 的一些关键功能停止工作 查看Firebug日志 报告了以下错误 Blocked loading mixed active content ht
  • 网络服务发现不是发现服务类型

    我想通过 Android 设备在本地网络中找到服务器 我可以通过使用找到它NSDManager具有服务器服务类型的服务 例如 workstation tcp是服务类型 在我的本地网络中我有一个 无线路由器和无线中继器 两者都有不同的SSID
  • JWT在浏览器中存储在哪里?如何防范CSRF?

    我知道基于 cookie 的身份验证 可以应用 SSL 和 HttpOnly 标志来保护基于 cookie 的身份验证免受 MITM 和 XSS 的影响 然而 需要采取更多特殊措施来保护其免受 CSRF 的影响 它们只是有点复杂 参考 ht
  • 验证数据库匹配中的 $_GET id 是否足够安全?

    我的网站上有 2 个页面 一个是 index php 索引页面列出了数据库中存在的所有帖子 另一个页面是 post php 当单击索引页面上的特定帖子时 帖子页面显示单个帖子 现在我用来列出 index php 上所有帖子的代码是 post
  • Android,在连接wifi的情况下与移动数据通信,无需上网

    我有一个汽车配套应用程序 需要与 WiFi 和移动数据网络进行通信 我的车辆控制单元提供了一个无需互联网访问的 WiFi 网络 它公开了我们可以从应用程序调用的 API 服务 除此之外 我们还需要使用手机移动数据 3G 4G 与另一个可通过
  • 保护 ASP.NET MVC 应用程序中的 ajax 调用的安全

    我有一个基于 ASP NET MVC 的应用程序 它允许根据用户进行不同级别的访问 当前的工作方式是 当用户访问页面时 会根据数据库进行检查以确定用户拥有的权限 然后根据用户拥有的访问级别选择视图 有些用户比其他用户看到更多数据并拥有更多可
  • 使用 TCP 时是否需要使用校验和来保护我的消息?

    使用 TCP 作为网络协议 在通过线路发送消息之前 我会为每条消息的大小 以及可能的校验和 添加前缀 我想知道 计算和传输消息的校验和是否有意义 以确保消息将被不变地传递 如果以及何时传递 例如因为一些网络错误 目前 我在发送消息本身之前发
  • 为什么对参数哈希进行切片会在批量分配时带来安全问题?

    通过批量分配来预防安全风险的官方方法是使用属性可访问 http api rubyonrails org classes ActiveModel MassAssignmentSecurity ClassMethods html 然而 一些程序
  • 如何更改锁屏自定义文本(所有者信息)?

    我写了程序代码 String message This is test Settings System putString context getContentResolver Settings Secure LOCK PATTERN EN
  • IPAddress.[Try]Parse 将 192.168 解析为 192.0.0.168

    我有以下场景 IPAddress ip IPAddress TryParse 192 168 out ip if ip null do something with IP 我预计解析会失败 但它被解析为 192 0 0 168 我在这里缺少
  • Google App Engine 的 JDO:转义引号

    如何转义 JDO Google App Engine 中的查询参数 例如 如果变量名称可能包含单引号 形式的不安全字符 如何使下一个片段安全 PersistenceManager pm String query select from Pe
  • 监控Mac网络流量

    我想知道如何监控 Mac 上的网络流量 就像活动监视器的方式一样 显示进出的字节 数据包 我知道这有点模糊 但我不确定最好的起点 编辑 我想用代码来完成此操作 而不是使用现有的软件 我刚刚找到了开源项目 菜单表 http www ragin
  • kubernetes 如何将 pod 暴露给集群机器之外的东西?

    我读了以下内容Kubernetes 文档 https kubernetes io docs tutorials kubernetes basics expose expose intro 这导致以下 yaml 在集群中运行 postgres
  • GSSAPI 中的 javax.naming.AuthenticationException

    我正在尝试使用 JAVA GSSAPI 执行 NTLM 绑定 我收到此错误 javax naming AuthenticationException GSSAPI 根异常是 javax security sasl SaslException

随机推荐

  • 如何在 Debian 10 上安装 Python 3.9

    Python 是世界上最流行的编程语言之一 它是一种多功能语言 用于构建各种应用程序 从简单的脚本到复杂的机器学习算法 凭借其简单易学的语法 Python 成为初学者和经验丰富的开发人员的热门选择 Python 3 9 是 Python 语
  • 如何删除本地和远程 Git 分支

    分支是日常开发过程的一部分 也是 Git 中最强大的功能之一 一个分支一旦合并 除了历史研究之外就没有任何作用了 成功合并后删除分支是常见且推荐的做法 本指南介绍如何删除本地和远程 Git 分支 删除本地 Git 分支 The git br
  • Python 枚举函数

    enumerate 是 Python 中的一个内置函数 允许您在循环迭代时拥有一个自动计数器 Python enumerate 功能 The enumerate 函数采用以下形式 enumerate iterable start 0 该函数
  • 如何在 Ubuntu 18.04 上部署 Mattermost

    Mattermost 是一个企业级即时消息平台 是一个开源自托管 Slack 替代品 它是用 Golang 和 React 编写的 可以使用 MySQL 或 PostgreSQL 作为数据库后端 Mattermost 将您的所有团队沟通集中
  • 如何在 Ubuntu 18.04 上安装 OpenCart

    OpenCart是一个免费开源的 PHP 电子商务平台 将强大的功能与灵活性和用户友好的界面相结合 OpenCart 具有用户管理 多商店 附属机构 折扣 产品评论 多语言和多个支付网关等功能 是许多在线商家的首选平台 在本教程中 我们将向
  • 如何在 CentOS 7 上停止和禁用 Firewalld

    防火墙D是一个完整的防火墙解决方案 可动态管理网络连接和接口的信任级别 它使您可以完全控制允许或禁止进出系统的流量 从 CentOS 7 开始 FirewallD 取代 iptables 成为默认的防火墙管理工具 强烈建议保持 Firewa
  • 如何使用 Mysqldump 备份和恢复 MySQL 数据库

    本教程介绍如何使用 mysqldump 实用程序从命令行备份和恢复 MySQL 或 MariaDB 数据库 mysqldump 实用程序创建的备份文件基本上是一组可用于重新创建原始数据库的 SQL 语句 mysqldump 命令还可以生成
  • 如何在 Ubuntu 20.04 上安装 Spotify

    Spotify是一种数字音乐流媒体服务 可让您即时访问数百万首歌曲 从经典老歌到最新热门歌曲 本指南展示了在 Ubuntu 20 04 上安装 Spotify 的两种方法 Spotify 可以通过 Snapcraft 商店作为 snap 包
  • 如何在 Debian 9 上设置或更改时区

    使用正确的时区对于许多与系统相关的任务和流程都很重要 例如 cron 守护进程使用系统的时区来执行 cron 作业 并且日志文件中的时间戳基于同一系统的时区 系统的时区是在安装过程中设置的 但以后可以轻松更改 本教程展示如何在 Debian
  • 如何在 Ubuntu 20.04 上安装 VMware Workstation Player

    VMwareWorkstation Player 是一款桌面虚拟化软件 允许您在一台计算机上运行多个独立的操作系统 借助 VMware Player 您可以创建并运行自己的虚拟机 并评估由许多软件供应商提供的作为虚拟设备分发的软件VMwar
  • 如何在 CentOS 8 上设置 Apache 虚拟主机

    Apache 虚拟主机允许您在一台计算机上运行多个网站 使用虚拟主机 您可以指定站点文档根 包含网站文件的目录 为每个站点创建单独的安全策略 使用不同的 SSL 证书等等 本文介绍如何在 CentOS 8 服务器上设置 Apache 虚拟主
  • 如何在 Ubuntu 18.04 上安装 VLC 媒体播放器

    VLC 是最流行的开源多媒体播放器之一 它是跨平台的 几乎可以播放所有多媒体文件以及 DVD 音频 CD 和不同的流媒体协议 本教程介绍如何在 Ubuntu 18 04 上安装 VLC 媒体播放器 相同的说明适用于 Ubuntu 16 04
  • 如何在 CentOS 8 上安装和配置 Redis

    Redis 是一个开源内存键值数据存储 它可以用作数据库 缓存和消息代理 并支持各种数据结构 例如字符串 哈希 列表 集合等 Redis 通过 Redis Sentinel 提供高可用性 并通过 Redis Cluster 跨多个 Redi
  • 如何在Linux中删除组(groupdel命令)

    在 Linux 中 组用于组织和管理用户帐户 组的主要目的是定义一组权限 例如读 写或执行允许对于可以在组内的用户之间共享的给定资源 可以使用以下命令创建一个新组groupadd命令 如果不再需要某个组并且可以从系统中删除 本文介绍了如何在
  • Python 加入列表

    Python join list 的意思是将一串字符串与指定的分隔符连接起来形成一个字符串 有时 当您必须将列表转换为字符串时 它很有用 例如 将字母列表转换为逗号分隔的字符串以保存在文件中 Python 加入列表 我们可以用蟒蛇字符串jo
  • Java Hello World 程序

    每当我们开始学习一门编程语言时 第一个程序总是打印Hello World 在上一篇文章中 我们了解到如何在 Windows 10 上安装 Java 现在我们准备编写并运行我们的第一个 Hello World Java 程序 Java Hel
  • 从 Python 调用 C 函数

    我们可以使用 Python 程序调用 C 函数ctypes module 从 Python 调用 C 函数 它涉及以下步骤 创建具有所需函数的 C 文件 c 扩展名 使用 C 编译器创建共享库文件 so 扩展名 在 Python 程序中 从
  • Java中的迭代器设计模式

    迭代器设计模式中的行为模式之一 迭代器模式用于提供遍历一组对象的标准方法 迭代器模式广泛应用于Java集合框架 Iterator 接口提供了遍历集合的方法 迭代器设计模式 According to GoF iterator design p
  • 如何使用 HAProxy 在 Ubuntu VPS 上设置 HTTP 负载平衡

    关于HAProxy HAProxy 高可用性代理 是一个开源负载均衡器 可以对任何 TCP 服务进行负载均衡 它特别适合 HTTP 负载平衡 因为它支持会话持久性和第 7 层处理 与数字海洋专用网络 HAProxy 可以配置为前端 通过专用
  • SSH 要点:使用 SSH 服务器、客户端和密钥

    介绍 SSH 是一种安全协议 用作远程连接 Linux 服务器的主要方式 它通过生成远程 shell 来提供基于文本的界面 连接后 您在本地终端中输入的所有命令都会发送到远程服务器并在那里执行 在这份备忘单式的指南中 我们将介绍一些使用 S