本文将向您展示如何在macOS Sierra(10.12)和macOS High Sierra(10.13)上生成和保护SSH密钥。SSH密钥允许您在没有密码的情况下登录到服务器。它们增加了便捷性和安全性,大大增强了对暴力攻击的抵抗力。
SSH(Secure Shell)是一种用于远程管理的协议,用于文件传输通常表示为sFTP(安全文件传输协议)。当访问诸如Vultr VPS之类的远程服务器时,建议使用SSH与PKE(公共密钥交换),后者使用密钥对,其中公共密钥被提供给服务器,而私有密钥则存储在您的机器上。
在安装过程中,通过在***控制面板中添加公钥,可以自动将SSH密钥添加到服务器。您可以在此页上管理您的SSH密钥。重要的是要记住,这些是您的公钥(通常表示为. pub),您不应该公开您的私钥。
密钥类型
有几种不同的关键类型可以被选择。在生成过程中使用- t参数,比如ssh -keygen -t ed25519。使用椭圆曲线签名的ED25519密钥类型比DSA或ECDSA更安全、更高效。大多数现代的SSH软件(如版本6.5的OpenSSH)支持ED25519的密钥类型,但是您可能仍然会发现软件是不兼容的,因此默认的密钥类型仍然是RSA。
默认的密钥类型是2048位RSA,它提供了良好的安全性和兼容性。对于更高的安全性,可以使用生成的- b参数选择更大的密钥大小,比如ssh -keygen -b 4096,创建一个4096比特的RSA密钥对。
密钥生成
要生成SSH密钥,您需要打开终端。应用程序在“>实用程序>终端”中找到。
要创建一个4096比特的RSA密钥对,输入:
ssh-keygen -b 4096
然后你会看到:
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/username/.ssh/id_rsa):
按Enter / Return将把您的新密钥对保存到这个默认位置,这是推荐的。然后,您可以选择创建一个passphrase,它将对密钥进行加密,使其无法在未经授权的情况下使用。还建议使用密码短语。
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
SHA256:0irBXp+xKwT5e0ZFklbEVkzxu0Bzv9PmvstFD5w6zlQ username@Your-Mac.local
The key's randomart image is:
+---[RSA 4096]----+
| =o++. |
| + + .. |
| . . + o o |
| .o . .. + + |
| ooo S. . E o|
| . oo+.+ + ++|
| o..o+ + .o=|
| .o o. + ..oo|
| +. o ==|
+----[SHA256]-----+
此时,您的密钥对已经创建并存储在~ /.ssh/ id_rsa中。为了将密钥可用到系统并将密码存储在系统密钥链中,我们需要完成几个额外的步骤。注意,只需要在每次使用时不提示输入密钥密码。
向SSH代理添加新的密钥对
输入 ssh-add -K ~/.ssh/id_rsa
.
随后将提示您输入密码,您将看到以下内容:
Identity added: id_rsa (username@Your-Mac.local)
如果您想要使用这个SSH密钥登录已经创建的服务器,那么您可以使用SSH -copy- id工具将公共密钥存储在您想访问的服务器上。
向远程服务器添加新的密钥
使用ssh-copy-id
:
# Substitute your server IP
ssh-copy-id -i ~/.ssh/id_rsa root@192.0.2.1
控制台将请求您的登录密码,因为远程服务器还没有意识到您的密钥。您将看到以下内容:
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_rsa.pub"
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@192.0.2.1'"
and check to make sure that only the key(s) you wanted were added.
您现在可以尝试使用ssh root@192.0.2.1登录到远程服务器,您应该在没有密码提示符的情况下连接。