Secure Shell — SSH — 允许您在几乎不可能破解的计算机之间发送安全、加密的通信。这是在macOS中使用它的方法。
在个人计算机出现之前,人们在连接到大型计算机的计算机实验室中使用分时终端。每个用户都坐在一个哑终端前,该终端只是连接到大型计算机的显示器和键盘。后来,随着微型计算机的出现,终端通过网络连接起来。
最初,要远程访问网络上的另一台计算机,需要使用一个名为Telnet的程序。Telnet 是最早的互联网应用程序之一,广泛用于大学和研究机构。当时安全还不被认为是一个问题,因为大多数人仍然不使用互联网,而且大规模的在线欺诈也不是问题。
1990 年代的互联网商业化改变了这一切。随着时间的推移,随着电子商务的出现,交换个人或财务数据变得无处不在。
Telnet 仍然有效,但在互联网无处不在的时代有一个主要缺陷:它以明文形式发送和接收所有数据。这包括个人和财务信息,最糟糕的是密码——任何监听您网络流量的人都可能窃取它们。
为解决此问题,芬兰开发人员 Tatu Ylonen 在 1999 年创建了安全外壳(SSH) – 一种网络协议和 UNIX 工具,用于通过结合加密和公钥基础设施(PKI) 的方式在不安全的网络上发送和接收数据。
计算机安全中最难解决的问题之一是如何保证远程用户的真实性。黑客可以使用多种技术来冒充用户,服务器和其他用户很难确保冒名顶替者不会获得未经授权的访问。
即使是长而难以猜测的密码也可以被强大的超级计算机破解。即使是最好的密码也是不安全的。最糟糕的是,密码可能会被盗。
需要的是更安全的东西,它可以由双方在连接的两端进行验证,它足够复杂,不能被猜测或破解,不能被盗,也不能被冒充。
在公钥基础设施 (PKI) 中可以找到这样的解决方案。我们不会在这里深入探讨 PKI,因为它是一个复杂的话题,但我们将简要总结它是如何工作的。
PKI 背后的基本思想是任何给定的计算机用户都会生成一对密钥——一个公钥,一个私钥。两者都使用只有用户知道的密码进行保护,但密钥使用不需要密码。
在密钥生成时,算法会在每个密钥中创建一个长编码的加扰文本块,称为加密哈希。私钥以文件形式保留在用户计算机上,永远不会发送或泄露。第二个或“公共”密钥包含不同的哈希值,但仍然与私有密钥相关。
只有算法知道如何取消散列和比较两个密钥。
因此,只有算法可以验证或拒绝任何给定密钥对的真实性。任何时候都需要这两个密钥进行通信。一把钥匙没有另一把是无用和无效的。
一旦建立了密钥对,用户就可以在互联网上发布他们的公钥。用户的公钥文件也可以提供给其他人用于验证目的。但是,用户的私钥永远不会离开他们的计算机或财产。
当用户想要使用 PKI 连接到服务器或服务时,他或她首先要求该服务的管理员将他们的公钥添加到驻留在服务器或服务上的授权密钥列表中。此列表充当服务器可以在用户身份验证期间使用的一种已验证用户列表。
接下来,当用户尝试连接到远程服务器或服务时,连接应用程序会从用户的计算机发送包含其公钥的握手。服务器查看它的已知密钥列表,如果找到相同的公钥,它会向发出请求的计算机发回一个质询:你的私钥是什么?
如果发件人是合法的,并且与原始发件人在同一台计算机上,它会通过网络安全地读取、加密和发送用户的私钥。当服务器收到私钥时,它会在服务器上对其进行解密,然后对用户的公钥和私钥进行反向散列。
如果算法确认密钥对匹配,它就会对用户进行身份验证,将握手确认发送回发送方,然后建立加密的安全连接。
当然,所有这一切的结果是,没有相应的私钥,就无法进行通信。没有要发送的密码,没有中间人攻击来冒充服务器 – 请求者要么在服务器质询时拥有并发送私钥,要么没有 – 没有中间立场。
没有它,服务器将拒绝连接。
大多数这种连接操作都是透明发生的——用户不知道,甚至不必考虑——所有服务器关心的是任何给定的连接请求是否来自持有匹配私钥的计算机。如果没有,没有骰子。没有例外。
所有这些都有些过于简单化,但本质上就是 PKI 的工作原理。
PKI 的额外好处是更易于使用且不那么突兀 – 一旦设置和安装,PKI 密钥对就不再需要密码 – 不再需要在每次登录服务器时都输入密码。您的身份已为人所知并得到保证 – 密码已成为过去。
Apple 的 macOS 作为一个完整的 UNIX 系统,完全支持内置的 PKI。它使用OpenSSH——它是OpenBSD项目的一部分。在 macOS 中设置您自己的 PKI 密钥对相当容易。一旦您的密钥安装在您的Mac上,您将很少需要直接访问它们 – 它们主要由应用程序在后台静默使用。
在 macOS 中,SSH 密钥位于每个用户的文件夹中,位于名为 .ssh 的隐藏文件夹中。该文件夹通常是隐藏的(出于安全原因),除非您在 Finder 中显示不可见文件。如果您尚未生成 PKI 密钥,则此文件夹可能不存在 – 它是在您生成密钥时由系统创建的。
有两种简单的方法可以在 macOS 中生成 PKI 密钥对。可以使用终端或第三方钥匙串应用程序,例如GPGTools。
在终端类型中:
ssh-keygen -b 4096 -t rsa然后按Return。
系统将提示您输入保存密钥文件的位置,终端响应“输入保存密钥的文件 (/Users/username/.ssh/id_rsa)”,此时只需按回车键。
接下来,系统将提示您输入用于密钥文件的密码。在大多数情况下,只需按Return即可。如果需要,您可以输入密码,但请注意,密钥交换不需要此密码:它仅在对密钥文件本身进行本地修改时使用。
对于 PKI,密码通常是多余的——密钥本身就是安全性,而密码,正如已经讨论过的,通常是不安全的。
ssh-keygen UNIX 命令是生成密钥的工具。密钥生成有多种选项和设置。您可以通过在终端中键入“man ssh-keygen”并按Return来查看所有 ssh-keygen 选项。
-b 4096选项告诉 ssh-keygen 生成一个4096 位强密钥。以目前的世界超级计算速度,地球上最快的超级计算机需要一百多年才能破解一个 4096 位密钥——这意味着它们的安全性是有保证的。
您可以下载并安装第三方钥匙串应用程序,例如GPGTools?,而不是使用终端生成密钥。下载后,运行安装程序。安装程序完成后,将其关闭,然后在您的应用程序文件夹中打开 GPG 钥匙串应用程序。
如果您的 Mac 上之前没有安装任何密钥,GPG Keychain 将提示您输入电子邮件地址和密码以用于生成密钥。输入适当的信息,然后单击生成。几秒钟后,将在 .ssh 文件夹中创建密钥文件,就像上面的 ssh-keygen 所做的那样。
无论哪种方式,您现在在您的用户文件夹中都有一个 .ssh 文件夹。在此文件夹中,您会找到五个项目:
如果您在文本编辑器(如 TextEdit)中打开您的 id_rsa.pub 密钥文件,您将看到您的公钥,后面是您本地计算机的用户和计算机名称。例如:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFYeQoBHJD4aNtuJrClanz02mDC74O/qkVuWqMxSFqTohEB/o/E5eUYia+wPnSRHSo8W2aQo69wZusWXqSMIltjsvadsU51v0j1dw9f3pJNsOQEfOQhVq78HGti+crSI7R/1umbGHkLAUldpEEOhcOqFI+/3UeXTX93SMd1VhD14k32blma8fwbzTY9AUx0osD7FOJWK/Wz7YDEuxjnFmrHUzuPmzDQQGjYR0S8FaO7ICSeoPIzic0ysgWjwcNtfQnDODEXkt+AhWeQUzIdFSMhrxjPDT5fVUbocPwNgCCtDLwnZ74MrFjgm0hARrN+IcyFXbSPkO4KCOOXl1J1n+H?i7@i7s-iMac.local
事实上,现在就这样做:导航到您的 Users/~/.ssh 文件夹,在文本编辑器中打开 id_rsa.pub,然后复制整个文件。
由于公钥和私钥都以文本形式存储在这两个文件中,因此请确保您的私钥文件永远不会受到损害:如果其他人获得了您的私钥的访问权限,他们可以将其安装到另一台计算机上并冒充您。
如果您只关心与远程服务器的传出连接,那么除了 id_rsa 和 id_rsa.pub 之外,您无需担心其中的大部分文件。其他三个文件通常在服务器设置中用于来自其他计算机的传入连接请求。在大多数情况下,您不需要考虑它们。
请务必立即在安全的地方备份您的 id_rsa 和 id_rsa.pub 文件。
密钥设置完成后,您的 .ssh 文件夹应如下所示:
在您第一次使用 SSH 连接到服务器之前,系统可能会或可能不会生成 known_hosts 文件,但我们将在下面讨论该文件。
现在您的密钥已经到位并可以使用了,您必须设置您想要连接的任何服务器/服务,以便它们使用 PKI 而不是密码。如何执行此操作因您的服务器托管服务而异。
如果您的服务器主机是提供cPanel或类似 Web 前端的网络托管服务,这些服务通常会在 cPanel 中提供一个名为“安全”或“终端”的部分。您需要先登录到您的 cPanel,然后转到“安全”面板:
接下来,单击“SSH 访问”,然后单击“管理 SSH 密钥”按钮:
接下来,单击“导入密钥”:
在下一页上,在顶部框中为密钥填写名称(名称无关紧要),然后在公钥字段中粘贴您的公钥:
通常此字段的标题为“将公钥粘贴到以下文本框中:”或类似内容。
不要将任何内容粘贴到私钥文本框中。这通常被命名为“将私钥粘贴到以下文本框中:”。
虽然从技术上讲您的 cPanel 和虚拟主机是安全的,但您不想冒险。此外,这不是必需的——当您的计算机尝试使用 SSH 连接到服务器时,服务器会在握手时向您的本地计算机询问您的私钥。
如果您在密钥生成时确实输入了密钥密码,请在“密码短语”字段中输入它,否则将此字段留空。
接下来,单击“导入”,然后单击“返回”按钮。
您的公钥现在已导入到您的 cPanel 和虚拟主机,但您仍然需要在使用前对其进行授权。在“公共密钥”下的 cPanel 页面上,您现在会看到列出了您的密钥,但您会在它旁边看到“未授权”。单击管理按钮。
在下一页上,单击授权按钮,然后单击返回按钮。回到上一页,您现在应该在列表中的公钥旁边看到“授权”。
如果您要连接的服务器不提供 cPanel 或其他 Web 界面并且只提供裸机访问,您将需要联系您的服务器管理员让他们安装您的公钥。在大多数情况下,在 UNIX 或 Linux 服务器上,这是在 sshd.conf 和 ssh.conf 文件中完成的,但是您的里程可能会有所不同,具体取决于您的服务器运行的操作系统和服务器软件。
现在您的密钥已安装,并且您的服务器知道如何使用它们,是时候尝试连接了。
您可以通过打开终端窗口并键入“ssh?username@ip-address?”并按Return来测试终端中的连接。
或者,您可以键入“ssh?username@domain-name?”并按回车键。
在第一种情况下,您需要知道服务器的 IP 地址,在第二种情况下,您需要知道您的域名。在基于 cPanel 的系统上,用户名通常与您的 cPanel 名称相同,但可能会有所不同,具体取决于您的网络托管公司如何配置您的服务器。
SSH 连接的默认UNIX 端口是端口 22,但出于安全原因,大多数 Web 主机提供商会将 SSH 端口号更改为其他端口号。如果是这种情况,您需要知道端口号并使用 ssh 命令中的 -p 选项指定它。例如:
ssh -p 4612用户名@ip地址
有关使用 -p 命令的更多信息,请参阅“ssh 手册”页面。如果您不知道端口号,则需要联系您的虚拟主机提供商,或者查看他们的在线知识库中是否提到了它。
执行上述命令后,您的 Mac 将启动与服务器的 SSH 会话,从发送您的公钥的握手开始。然后服务器将通过询问您的 Mac 的私钥来响应。内置的 SSH 机制将从磁盘读取它并在响应中将其发送回服务器。
这一切都将悄无声息地发生。
服务器解码您的两个密钥并验证它们后,如果发现它们匹配,它会向您的 Mac 发回确认信息。如果成功,您可能会在终端中看到一条神秘消息,例如:
无法确定主机“example.domain.com (192.168.2.155)”的真实性。RSA 密钥指纹为 45:83:45:4a:e3:29:7e:fa:f3:c3:7d:64:ea:3a:6f:58。您确定要继续连接吗(是/否)?
键入 yes 并按Return键。
终端很可能会打印类似于以下内容的消息:Warning: Permanently added ‘example.domain.com,192.168.2.155’ (RSA) to the list of known hosts。
您只需在第一次通过 SSH 连接到每台服务器时执行此操作。之后,您的 Mac 会将该服务器的信息添加到您本地的 known_hosts 文件中。下次启动相同的 SSH 连接时,它将首先在 known_hosts 文件中查找服务器。如果找到它,它将连接而不显示上述任何内容。
通过 SSH 连接后,终端中两台计算机之间的所有通信,包括您键入的所有文本和命令,都将通过安全、加密的连接发送和接收。
另请注意,如果您使用的是 VPN 并且它是在另一个国家/地区连接的,您的虚拟主机提供商可能会拒绝所有远程 SSH 连接。这是为了防止其他国家的黑客访问您的虚拟主机。在这种情况下,您必须禁用 VPN 并重试。
由于我们讨论的是 VPN,现在是讨论的好时机……
您在上面的示例中所做的是创建基于SSH 隧道的连接。隧道只是意味着一个连接已经创建了一个安全的“隧道”,其中双向的所有通信都被完全加密。即使中间人攻击者拦截您的通信或冒充您,两台计算机之间传输的数据仍然是完全加密的。
如果无法访问您的私钥,攻击者仍然无法解密您的数据。
大多数商业和免费 VPN 客户端在各种端口上使用这种隧道连接到其他国家的 VPN 服务器。事实上,大多数 VPN 连接将在每个会话中跨多个此类服务器发送和接收数据。在大多数 VPN 服务器配置中,还有位于其他地方的专用 SSH 服务器,但 SSH 也可能驻留在同一台 VPN 服务器上(这被认为是一种不良的安全做法)。
当您的数据通过您的 VPN 时,任何窃听您通信的人都越来越难以分辨数据的来源和去向。隧道加密增加了一层安全性。
SSH 在 Mac 上真正发挥作用的地方在于使用具有图形用户界面的网络应用程序(例如FTP客户端)。在这种情况下,大多数应用程序允许您指定一次公钥,然后只要您建立新连接,它就可以正常工作——没有密码,没有更多提示,没有麻烦。
一切都在幕后发生,这使得连接变得轻而易举。
例如,Panic的优秀Transmit应用程序在连接窗口中有一个公钥按钮:
单击钥匙图标会显示一个小窗口,其中将显示您的默认公钥(如果您的系统上安装了它):
点击你的公钥,它就会被设置,连接窗口中的小钥匙图标会变成绿色:
现在输入您的服务器地址、自定义 SSH 端口(如果有)、用户名和您要访问的服务器上的路径。
单击“连接”。
如果一切顺利,Transmit 将连接并且不会提示您输入密码。Transmit 可能会在您第一次连接时提示您“无法确定主机的真实性”消息的 GUI 版本,但如果您确认该对话框,它会将服务器信息添加到 known_hosts 文件中,就像在终端示例中一样以上。
下次您在 Transmit 中建立相同的连接时,它应该是无缝的:没有密码,没有提示,什么都没有。
为了安全地发送和接收所有 FTP 数据,您必须使用 SFTP 协议而不是普通的 FTP。
您还可以将连接窗口设置保存到 Transmit 中的收藏夹,然后下次只需从收藏夹列表中选择它即可即时连接 – Transmit 每次都会自动记住您的密钥。
湘ICP备19005331号-4copyright?2018-2024
guofenkong.com 版权所有
果粉控是专业苹果设备信息查询平台
提供最新的IOS系统固件下载
相关APP应用及游戏下载,绿色无毒,下载速度快。
联系邮箱:guofenkong@163.com