向我的 Uber 司机解释 SSH
在这篇博客中,我想像你是我的 Uber 司机一样,向你解释 SSH。这个练习的目的是让你假装你之前没有任何 SSH 经验,甚至对一般技术知识一无所知,并让你达到以下程度:
- 不要害怕“SSH”这个模糊的术语,因为你的脑海中已经有了具体的图像。
- 了解行业级开发人员如何使用 SSH 来测试代码更改、进行服务器配置等。
- 了解 SSH 的加密/授权协议如何使其优于其他工具。
让我们开始吧!
概念化 SSH
什么是 SSH?我不会像 Cloudflare 文章或维基百科那样,用一些老套的技术术语来解释它,而是用一个比喻来帮助你理解它。
想象一下,你刚放学回到家,在卧室里。你觉得无聊,于是决定戴上VR头盔,进入“元宇宙”(Metaverse)——一种隔绝现实世界、将你嵌入虚拟环境的沉浸式体验。你登录,输入用户名和密码验证身份。完成后,你会看到你的数字形象弹出。它看起来和你一模一样——身材高挑,秀发飘逸,而且很有时尚感。在你面前,你看到了一片森林——或者更确切地说,是森林的数字再现。你戴着VR头盔站在卧室里,转动头部环顾四周,你的虚拟形象也跟着转动。你在卧室里说“你好,森林”,你的虚拟形象也会在VR世界中说“你好,森林”。
在现实生活中,这个比喻的含义如下:
- 你 == 开发人员。
- 您的卧室 == 您的笔记本电脑,或者您正在打字的任何本地机器。
- Metaverse == 您尝试从本地机器访问的远程机器/服务器。
- VR 耳机 == SSH 隧道,允许您从本地机器(卧室)访问远程机器(Metaverse)。
- 登录屏幕 == SSH 密钥对,用于确保只有授权方才能使用 SSH 隧道。我将在本博客的后续部分更详细地解释这一点。
这个比喻对你有什么帮助?下次你听到有人说“我用 SSH 连接了服务器”时,你不用对“SSH”这个模糊的概念感到惊慌。相反,在脑子里把它改写成“我戴上 VR 头显来访问元宇宙”,这样就能让它更具体一些。
通俗地说,SSH 就像一条安全、私密的隧道,让你可以通过互联网连接到另一台计算机。它能让你在那台计算机上操作,就像你坐在它面前一样。
当然,这只是对 SSH 的一个粗浅的概念理解。我希望现在你能思考一些问题,帮助你更深入地了解 SSH。我无法读懂你的心思,但这里有一些我自己曾经遇到的问题,我自己也回答过,我认为解释一下会对你有所帮助。
为什么我需要使用 SSH?
SSH 非常重要,因为开发人员通常需要访问远程机器。例如,大型应用程序会占用你那台不起眼的笔记本电脑太多的内存和计算能力,而这些应用程序托管在 AWS、Azure 或 Google Cloud 等云平台上,这些平台都需要远程访问。有时,开发团队分布在不同地点,因此远程服务器可以让团队成员在一个统一的位置协作和共享代码,即使他们不在同一物理位置。
让我向您介绍两个行业级开发人员需要通过 SSH 连接到远程机器的示例。
1:部署代码
作为开发者,您需要将网站的新版本部署到临时服务器。部署过程可能使用 SSH 进行。
在本地机器上,使用 Git 推送最新的代码更改。
然后,您将通过 SSH 进入具有暂存环境的远程服务器。
(顺便说一句,您可能会想为什么我需要将暂存环境放在远程服务器而不是本地计算机上。原因如下。一是最好模拟真实的设置,例如检查性能瓶颈或可扩展性问题,这些问题只会在服务器环境中发生,而不是在您的笔记本电脑中。另一个是确保所有团队成员都可以在一致的环境中进行测试,而不是他们都在自己的机器上拥有暂存环境,或者(但愿不会),在需要测试某些东西时使用本地机器。)
最后,您已通过 SSH 登录到托管暂存环境的远程服务器,您可以从该远程服务器提取最新的代码更改、运行构建并测试您的应用程序(例如,导航到http://staging.example.com )。
2:更新服务器配置
假设您正在构建的 Web 应用程序规模不断扩大,您需要调整服务器配置以适应增加的流量。以下是一些您可能会运行的命令示例:
a. 通过 SSH 进入服务器
ssh user@your-server-ip
b. 找到 Apache 配置文件
cd /etc/apache2
c.备份配置文件
cp apache2.conf apache2.conf.bak
d.编辑配置文件。
vi apache2.conf
e.验证配置
apache2ctl configtest
请不要觉得您需要知道这些命令的作用。
说实话,我让 ChatGPT 帮我生成了一个例子,但我自己也不太明白。这里的要点是了解开发人员通过 SSH 连接到服务器时可能运行的命令类型。其中很多都是一些简单的命令,比如移动目录 (cd)、操作文件 (cp) 和编辑文件 (vi)。
为什么使用 SSH?
我在学习 SSH 时遇到的一个问题是“SSH 的替代品有哪些,为什么 SSH 会胜出”?
我想现在是快速学习历史的好时机。
在 SSH 被广泛采用之前,市面上还有其他用于两台机器之间通信的协议。一些著名的协议包括 Telnet、RSH、FTP 和 Rlogin。但它们都存在加密和安全功能不足的问题。
大致来说,事情可能发生如下。我(恶意黑客)获得了 Telnet 所经过的网络访问权限——也就是你试图通过 Telnet 协议将信息从笔记本电脑发送到另一台机器的网络。我使用 Wireshark 之类的工具来捕获流量。一旦我以下载的“数据包”形式获取到我的机器上的流量,我就可以点击查看它们,查找任何登录尝试。所有数据都是明文的(这意味着它是人类可读的,而不是一些乱码),所以如果我找到它,我就可以直接使用我眼前看到的登录信息。正如你所见,这些旧工具并不十分安全!
1995年,SSH诞生。它之所以更胜一筹,主要有两个原因。
-
加密数据
假设从我的机器传输到远程机器的数据部分是字符串“用户名:jesswang 密码:?IamC00l!”。如果没有加密(例如使用 Telnet 或 FTP 等较旧的协议),黑客就能像你读取一样读取该字符串。如果加密,他们获取的数据可能类似于“H23kLs*^!d8%PwZx0KsL!9B#N%u@i8”。实际上,加密数据将是遵循加密算法标准(我对此不太了解)的不同字节序列,但这只是为了给你一个大概的理解。 -
身份验证
像 Telnet 这样的老程序完全依赖于基于密码的身份验证。当您使用 Telnet 连接到远程系统时,Telnet 服务器会提示您输入用户名和密码进行登录。然而,Telnet 会以明文形式传输您的密码,这很容易被黑客读取。SSH 主要使用一种不同的(且更好的)方法,称为公钥身份验证。我将在下面解释它的工作原理,以便您了解如何更好地保护您的信息免受黑客攻击。
首先,您的信息被放在一个公文包里,然后您给它加上自己的锁。
你把公文包发送到远程服务器。远程服务器没有钥匙来打开你的锁,所以远程服务器用自己的锁锁住了公文包。
远程服务器将公文包发回给您,然后您打开锁。
你把公文包送回远程服务器,它会用钥匙打开锁。然后打开公文包,读取纸条。
这就是公钥认证的精髓!顺便说一句,SSH 仍然支持基于密码的认证,但即使如此,密码也是加密的,所以即使黑客截获了密码,他们也无法读取。
如何使用 SSH?
概念学习到此为止。下面是我通过 SSH 连接到服务器时实际要运行的命令。
要通过 SSH 连接到服务器,通常需要运行以下命令:ssh username@server_ip_or_hostname
您需要将 username 替换为您在服务器上的实际用户名,
并将 server_ip_or_hostname 替换为服务器的 IP 地址或主机名。例如,ssh john@123.456.789.123
。
运行该命令后,系统可能会提示您输入服务器用户名的密码。或者,如果您的服务器使用上一节中介绍的基于密钥的身份验证,则可能不会提示您输入密码。
登录后,您就可以开始执行命令了。这些命令将在您所连接的远程服务器上执行。
我理解,如果你不亲自输入代码并观察结果,很难完全掌握。如果你已经设置了工作或个人远程服务器,可以尝试一下。如果你没有远程服务器可以连接,也没关系。你可以按照以下步骤操作:
- 前往http://sdf.org/
- 创建帐户。您可能会收到一封电子邮件,其中包含您帐户的密码。您可能需要等待 1-2 分钟才能收到该邮件(至少我的经验是这样的)。
- 你可以通过运行 SSH 连接到公共 UNIX 系统
ssh <your_username>@sdf.org
。例如,我创建了用户名 poop123。所以我运行了ssh poop123@sdf.org.
- 出现提示时,输入您之前获得的密码。
- 您已成功通过 SSH 连接到服务器!您可以运行命令,例如
echo 'hello world'
打印“hello world”或ls
查看当前目录中的文件列表。
读者须知/结论
虽然通过 SSH 连接到另一台服务器相对容易(也许你的同事会给你一个命令,你只需粘贴到命令行中即可),但如果我不理解(至少在高层次上)运行命令时发生了什么,我发现很难使用该命令。希望其他人能理解我的意思,这篇博客能帮助你解决这个问题。
如果您好奇我如何想出这个标题,那么这个故事就在本系列原始博客“向我的 Uber 司机解释 Kubernetes”的介绍段落中。
一如既往,我期待您对本博客中的信息、图画或故事的任何反馈。也请告诉我您希望我撰写哪些其他主题。
以下是我在撰写此博客时参考的一些资源:
- ChatGPT
- SSH 初学者指南Youtube 视频
- 我对上述视频进行了60 秒TikTok 视频总结。
- 我使用Charm VHS生成了你看到的最后一个 gif。这是一个非常酷的工具,可以让你轻松创建和编辑与 CLI 相关的演示。
- 我用来拍摄演示的终端是 Warp(这也是我工作的公司。我强烈建议您了解一下我们)。