欢迎使用我们的终极指南来设置SSH(安全Shell)密钥。本教程将指导您创建SSH密钥的基础知识,以及如何管理多个密钥和密钥对。
打开一个终端并运行以下命令:
ssh-keygen
您将看到以下文本:
Generating public/private rsa key pair.Enter file in which to save the key (/home/username/.ssh/id_rsa):
按Enter键将密钥保存到默认/home/username/.ssh
目录。
然后将提示您输入密码:
Enter passphrase (empty for no passphrase):
建议在此处输入密码以增加安全性。通过设置密码,如果有人持有您的私有SSH密钥或计算机,则可以防止未经授权访问您的服务器和帐户。
输入并确认密码后,您将看到以下内容:
Your identification has been saved in /home/username/.ssh/id_rsa.Your public key has been saved in /home/username/.ssh/id_rsa.pub.The key fingerprint is:SHA256:/qRoWhRcIBTw0D4KpTUyK6YepyL6RQ2CQrtWsaicCb4 username@871e129f767bThe key's randomart image is:+---[RSA 2048]----+| .o=+....||+.*o+o . ||+X.=o o||@.=.oo . ||=O ...o S||o.oo . . ||.E+ . . . .||oo . ... + ||=.. .o. . .|+----[SHA256]-----+
现在,您拥有一个公共和私有SSH密钥对,可用于访问远程服务器并处理诸如Git之类的命令行程序的身份验证。
尽管每台设备只有一个公私钥对被认为是一种很好的做法,但是有时您需要使用多个密钥,或者您拥有非正统的密钥名称。例如,您可能正在使用一个SSH密钥对来处理公司的内部项目,但是可能正在使用其他密钥来访问客户端的服务器。最重要的是,您可能使用其他密钥对来访问自己的私有服务器。
一旦需要使用第二个密钥,管理SSH密钥就会变得很麻烦。传统上,您ssh-add
通常将密钥存储到ssh-agent
,输入每个密钥的密码。问题在于,每次重新启动计算机时都需要执行此操作,这很快就会变得乏味。
更好的解决方案是自动添加密钥,存储密码,并指定访问某些服务器时使用的密钥。
config
输入SSH config
,这是用于SSH通信的每个用户的配置文件。创建一个新文件:~/.ssh/config
并将其打开以进行编辑:
nano ~/.ssh/config
使用此config
文件要解决的第一件事是避免必须使用添加自定义名称的SSH密钥ssh-add
。假设您的私人SSH密钥名为~/.ssh/id_rsa
,请在config
文件中添加以下内容:
Host github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes
接下来,通过打开另一个终端并运行以下命令来确保~/.ssh/id_rsa
不在其中ssh-agent
:
ssh-add -D
此命令将从当前活动的ssh-agent
会话中删除所有密钥。
现在,如果您尝试关闭GitHub存储库,则config
文件将使用处的密钥~/.ssh/ida_rsa
。
以下是一些其他有用的配置示例:
Host bitbucket-corporate HostName bitbucket.org User git IdentityFile ~/.ssh/id_rsa_corp IdentitiesOnly yes
现在您可以使用 git clone git@bitbucket-corporate:company/project.git
Host bitbucket-personal HostName bitbucket.org User git IdentityFile ~/.ssh/id_rsa_personal IdentitiesOnly yes
现在您可以使用 git clone git@bitbucket-personal:username/other-pi-project.git
Host myserver HostName ssh.username.com Port 1111 IdentityFile ~/.ssh/id_rsa_personal IdentitiesOnly yes User username IdentitiesOnly yes
现在,您可以使用SSH进入服务器ssh myserver
。每次SSH进入专用服务器时,您不再需要输入端口和用户名。
最后一个难题是管理密码。每次初始化SSH连接时,输入密码都会非常麻烦。为了解决这个问题,我们可以使用macOS和各种Linux发行版随附的密码管理软件。
在本教程中,我们将使用macOS的“钥匙串访问”程序。首先通过将-K
选项传递给ssh-add
命令将密钥添加到“钥匙串访问”中:
ssh-add -K ~/.ssh/id_rsa_whatever
现在,您可以在“钥匙串访问”中看到您的SSH密钥:
但是,如果你从删除键ssh-agent
用ssh-add -D
或重新启动计算机,你会当您尝试使用SSH提示输入密码一次。事实证明,还有另外一环要跳。config
通过运行打开您的SSH 文件nano ~/.ssh/config
并添加以下内容:
Host * AddKeysToAgent yes UseKeychain yes
这样,无论何时运行,ssh
它都会在“钥匙串访问”中寻找钥匙。如果找到一个,将不再提示您输入密码。ssh-agent
每次重新启动计算机时,密钥也会自动添加到。
现在,您已经了解了创建新的SSH密钥和管理多个密钥的基础知识,请放心动心ssh
!