type
Post
status
Published
date
Aug 14, 2023
slug
summary
tags
建站
开发
DevOps
环境配置
category
技术基本功
icon
password
Property
Aug 15, 2023 02:46 AM

SSH服务有什么用?

  • 远程登录其他服务器
    • 账户名+密码登录
    • 公钥登录
  • 远程连接Git服务器,拉取上传代码
  • 除非主动禁用,否则几乎每个系统都默认开启SSH服务

SSH服务的配置

  • 管理SSH服务的配置文件一般在 ~/.ssh/
    • 目录中的几个重要文件扮演了不同的角色:
      1. config 文件config 文件用于配置 SSH 客户端的行为。你可以在这个文件中设置各种选项,例如端口号、主机别名、代理设置等。这样可以使你在使用 SSH 连接到远程服务器时不必每次都输入一长串的命令和参数。
        1. 这个文件可以包括许多配置选项,以定义特定主机的连接参数或全局设置。
          Host myserver HostName example.com User username Port 2222 IdentityFile ~/.ssh/id_rsa
          SSH 的 config 文件可以高度定制化,用于简化和优化SSH连接。以下是一些常见的配置选项,这些选项可以为单个主机或所有主机设置:
        2. Host: 为配置定义一个模式或别名。可以是具体的主机名、通配符或简短的别名。
          1. Host myserver
        3. HostName: 指定实际要连接的主机名或IP地址。
          1. HostName example.com
        4. User: 指定连接的默认用户名。
          1. User myusername
        5. Port: 指定连接的端口。
          1. Port 22
        6. IdentityFile: 指定用于此连接的私钥文件。
          1. IdentityFile ~/.ssh/id_rsa
        7. ForwardAgent: 指定是否转发SSH代理。这对于使用密钥链式连接或使用 ssh-agent 很有用。
          1. ForwardAgent yes
        8. ProxyCommand: 用于连接到目标主机的代理命令,通常用于跳板机或SSH隧道。
          1. ProxyCommand ssh jumpbox -q -W %h:%p
        9. ServerAliveInterval: 指定客户端向服务器发送空数据包的频率,以保持连接活动。
          1. ServerAliveInterval 60
        10. StrictHostKeyChecking: 控制是否在 known_hosts 文件中检查主机的密钥。
          1. StrictHostKeyChecking no
        11. Compression: 是否启用压缩。
        12. Compression yes
        13. TCPKeepAlive: 是否发送TCP保持活动消息。
        14. TCPKeepAlive yes
          这只是 config 文件中可以设置的选项的一部分。实际上,根据你的需求和环境,可能还有许多其他有用的配置选项。
      1. id_rsa 文件id_rsa 是用户的私钥文件。当你使用基于密钥的身份验证时,这个私钥用于验证你的身份。私钥必须保密,不应与任何人共享。
        1. 这是私钥文件,应始终保密。其内容类似于以下:
          -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAu4GRzDlq/FoU8XRnL6f... ... X0R+meOaudPTBxoSgCCM51poFgaqt4l6VlTNw== -----END RSA PRIVATE KEY-----
      1. id_rsa.pub 文件id_rsa.pub 是与 id_rsa 相对应的公钥文件。你可以把这个公钥放在你想连接的远程服务器的 ~/.ssh/authorized_keys 文件中。当你尝试连接服务器时,服务器会使用这个公钥来验证你的私钥。因为公钥只能用于验证私钥,而不能用于还原私钥,所以你可以将公钥分享给任何你信任的远程服务器。
        1. 这是与上述私钥配对的公钥文件。
          ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCu4ZHMO... [email protected]
      1. known_hosts 文件known_hosts 文件用于存储你已知的远程主机的公钥信息。当你首次连接到远程主机时,主机的公钥会被添加到这个文件中。在后续的连接中,SSH 客户端会检查远程主机的公钥是否与 known_hosts 文件中的相匹配。如果它们不匹配(例如,由于中间人攻击),SSH 客户端会发出警告。这提供了一个防止未经授权的主机冒充合法主机的保护机制。
        1. 这个文件存储了你曾经连接过的主机的公钥信息。
          example.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hR...
      通过这些文件和配置,SSH 能够提供一种安全的、加密的远程连接方法,允许用户通过不可信的网络(例如互联网)安全地访问远程主机。
      ~/.ssh/ 目录中可能还会有其他重要的文件和设置,具体取决于特定的用途和配置。以下是一些可能存在的其他文件:
      1. 其他密钥对文件: 除了 id_rsaid_rsa.pub 之外,你可能还会看到其他的私钥和公钥文件,如 id_ecdsaid_ed25519 等。这些是不同类型的密钥对,与 RSA 密钥类似,但使用了不同的加密算法。
      1. authorized_keys 文件: 这个文件通常存在于远程主机上,但有时也可能在本地找到。它包含了所有允许访问该主机的公钥列表。当有人尝试使用 SSH 连接到主机时,主机会检查尝试连接的客户端的私钥是否与 authorized_keys 文件中的任何公钥相匹配。
        1. 这个文件存储了允许通过密钥身份验证连接到远程主机的所有公钥。
          ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCu4ZHMO... [email protected] ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINW7R01luKL... [email protected]
          其中包括多个公钥,每个公钥通常占一行。
      1. known_hosts 的变体: 在某些情况下,你可能会在 ~/.ssh/ 目录下看到 known_hosts2 等文件。这些文件的作用与 known_hosts 相同,但可能与特定的SSH客户端或版本有关。
      1. 自定义密钥对: 有时,用户可能会为特定的服务或主机创建自定义的密钥对,并给它们特殊的名字。这些文件的作用与 id_rsaid_rsa.pub 相同,但可能仅用于特定的连接。
      1. ssh_configssh_host_* 文件: 与用户级别的 config 文件相似,全局的 ssh_config 文件允许系统管理员为所有用户设置SSH客户端选项。而 ssh_host_* 文件通常位于系统级 SSH 配置目录(而非用户的 ~/.ssh/ 目录)中,用于存储主机的密钥信息。
      1. 临时认证代理的套接字文件: 例如,ssh-agent 可以使用套接字文件来存储私钥。这允许用户在多个SSH会话中重用同一私钥,而无需每次都输入密码。
      请注意,不是所有的SSH配置都会使用所有这些文件,具体取决于你的系统和你使用SSH的方式。如果你是系统管理员或有特殊安全需求,你可能还会遇到其他特定的配置文件和选项。
       

SSH是什么?

SSH(安全外壳协议,Secure Shell)是一种网络协议,用于通过不安全的网络安全地访问另一台计算机。它广泛用于远程登录和远程命令执行。以下是SSH的工作原理的概述:

1. 客户端和服务器架构

SSH使用客户端-服务器架构。客户端是尝试访问另一台计算机的设备,而服务器是接受连接请求的计算机。

2. 密钥交换

当客户端尝试连接到服务器时,它们首先进行密钥交换,以便建立安全的连接。
  • 服务器身份验证:服务器向客户端发送其公钥。客户端使用此公钥验证服务器的身份。
  • 会话密钥创建:客户端和服务器协商一个会话密钥,用于此特定连接的加密。

3. 用户身份验证

一旦建立了安全的连接,客户端必须通过以下一种或多种方式验证其身份:
  • 密码身份验证:客户端提供用户名和密码。
  • 公钥身份验证:客户端使用与存储在服务器上的公钥匹配的私钥进行身份验证。

4. 加密会话

使用协商的会话密钥,客户端和服务器之间的所有通信都被加密。这确保了数据的机密性和完整性。

5. 通信

一旦验证了客户端的身份,就可以开始通过SSH连接进行通信。客户端可以执行命令、传输文件等。

6. 断开连接

当会话结束时,连接将被安全地关闭。

总结

SSH的工作原理涉及多个步骤,包括密钥交换、身份验证和加密通信。这些步骤共同确保了通过不安全的网络进行的远程连接的安全性和可靠性。SSH广泛用于系统管理、文件传输(如SFTP)和其他需要安全通信的场景。
 

ssh 命令详解

SSH Agent

TODO:

SSH Server

TODO:

生成一个 GitLab 专用的 SSH 密钥

当然,生成一个专用于 GitLab 的 SSH 密钥是一个很好的做法,可以增加安全性并使密钥管理更加方便。以下是如何为 GitLab 生成 SSH 密钥的步骤:
  1. 打开终端:在你的计算机上打开命令行终端。
  1. 检查现有的 SSH 密钥:你可以先检查是否已经有现有的 SSH 密钥。运行以下命令:
    1. ls -al ~/.ssh
      如果你看到名为 id_rsa.pub 或类似名称的文件,那么你已经有一个 SSH 密钥。如果你想为 GitLab 创建一个新的密钥,请继续以下步骤。
  1. 创建新的 SSH 密钥:运行以下命令来创建一个新的 SSH 密钥。你可以将 [email protected] 替换为你在 GitLab 上使用的电子邮件地址。
    1. ssh-keygen -t rsa -b 4096 -C "[email protected]"
  1. 保存密钥:系统会提示你输入文件的保存路径。如果你想为 GitLab 创建一个专用密钥,请输入一个与默认路径不同的路径,例如:
    1. /Users/yourusername/.ssh/id_rsa_gitlab
  1. 设置密码:你可以为密钥设置密码,增加安全性,或者直接按 Enter 键跳过。
  1. 将新密钥添加到 ssh-agent:确保 ssh-agent 在后台运行,并将新密钥添加到 ssh-agent。
    1. eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa_gitlab
  1. 将公钥添加到 GitLab:使用以下命令将公钥复制到剪贴板:
    1. pbcopy < ~/.ssh/id_rsa_gitlab.pub
      然后,登录到 GitLab 账户,转到 "Settings" > "SSH Keys",并将剪贴板上的公钥粘贴到文本框中。
现在,你已经为 GitLab 创建了一个专用的 SSH 密钥,并将其添加到了你的 GitLab 账户中。你可以使用这个密钥来安全地与 GitLab 的仓库进行交互。
 
 
部署 GitLab 服务器Docker 容器化!