如何设置 SSH 密钥

本教程描述了设置 SSH 密钥以供通过 SSH 登录到远程服务器时使用的过程。

文件同步 101:基础 I. 使用 rsync 传输和同步本地和远程系统
二、 如何设置用于文件同步的 SSH 密钥

本教程需要 SSH、OpenSSH 或兼容的 SSH 服务器。 Windows 用户会想要下载一个 SSH 客户端,例如 油灰 或者 MobaXterm 在 Windows 操作系统中使用 SSH 会话。

请注意,本指南将向您展示如何以一种特定方法设置 SSH 密钥。 根据您使用 SSH 的方式,t这里有几个其他选项可以修改以满足您的特定需求。 了解更多信息, 在 Google 上搜索“SSH 密钥” 您会发现许多描述 SSH 其他方法的指南。

本教程假设您的用户目录中的服务器上已经有一个 .ssh 目录(example:/home/myuser/.ssh/)。 如果不是,请使用普通的用户/密码验证(example: ssh [email protected]) 第一次连接服务器。 这应该创建一个具有正确权限的 .ssh 目录。 如果它没有创建 .ssh 目录,则需要创建一个;

mkdir -p $HOME/.ssh
chmod 0700 $HOME/.ssh

第 1 步:创建您的个人密钥

在本地计算机上打开终端/shell 并运行以下命令:

user@localhost # ssh-keygen -t rsa (or)
user@localhost # ssh-keygen -t rsa -b 4096 -C "$(whoami)@$(hostname)-$(date -u +%Y-%m-%d-%H:%M:%S%z)" (for a stronger key)

然后将询问您要将新创建的密钥保存在哪里。 默认设置通常是可以接受的(只需按 enter 接受默认设置),但是,如果您将密钥设置为本地 root 用户,您可能希望将密钥存储在不同的位置。

Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):

注意:$HOME/.ssh/id_rsa – 将包含您的私钥。
$HOME/.ssh/id_rsa.pub – 将包含您的公钥。

接下来,系统将提示您输入密码。 如果您选择使用密码,则每次使用密钥连接服务器时都需要输入密码(可以使用空格;因此,如果提高安全性对您来说更重要,您的密码可以是一个完整的句子)。 您可以选择不使用密码,但这通常被认为不太安全。

例子:您有一台笔记本电脑,并且正在创建一个 SSH 密钥以连接到您的服务器。 如果您在没有密码的情况下创建密钥,并且您的笔记本电脑被盗,那么小偷可以连接到您的服务器而无需其他任何东西。 如果我们的密钥有密码,没有人可以在不知道密码的情况下使用您的密钥。 如果您对多一点风险感到满意,那么您可以选择在没有密码的情况下创建您的密钥。

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
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:rCwcRH+3vxiIsrkrwikDaE1UlTi8vr0g/wOfwSowCsw [email protected]:14:45+0000
The key's randomart image is:
+---[RSA 4096]----+
|. . . .          |
| = o . .         |
|o.= . . . .      |
|oDo . . . . .    |
|B. .. Y .        |
|O+.. o . .       |
|O++.o o . . .    |
|=*. . ... . . o. |
|.o.=+.++. . .    |
+----[SHA256]-----+
root@host [~]#

注意:您可以随时使用以下命令更改密码:

root@host [~]# sshkeygen -p

第 2 步:将您的个人密钥复制到服务器

在我们将您的新公钥复制到您的服务器之前,我们会将其添加到本地 authorized_keys 文件中。

root@host [~]# cd ~/.ssh
root@host [~]# cp id_rsa.pub authorized_keys

如果您的本地计算机上已存在授权密钥文件,您将需要使用您喜欢的文本编辑器打开和编辑该文件并手动添加密钥。

现在,我们将您的公钥复制到服务器。 在典型的服务器中,服务器上的每个用户都有自己的 .ssh 目录和自己的 authorized_keys 文件。 假设您的用户帐户位于 /home 目录中,您需要在复制公钥之前确定要登录的用户。 root 用户略有不同; 在大多数服务器中,root 用户的 ssh 文件存储在 /root/.ssh/ 中。

假设我在笔记本电脑上为本地用户创建了一个密钥,但我想使用该密钥以 root 身份使用 SSH 进行连接。 我必须将我的新公钥复制到服务器上根用户的 ssh 目录中。

user@localhost [~]# cd ~/.ssh
user@localhost [~]# scp authorized_keys [email protected]:/root/.ssh/

就像您的本地副本一样,如果服务器上已经存在 authorized_keys 文件,您将需要手动将新密钥添加到文件中。

注意:根据您的 SSH 版本,您在尝试登录服务器时可能会收到类似以下的错误

ssh [email protected] password:
stdin: is not a tty
/root/.ssh/authorized_keys: Permission denied

如果您看到这一点,则很可能是权限问题。 让我们现在处理它……我们首先将 .ssh/authorized_keys 中的公钥重命名为 .ssh/authorized_keys2 以备份现有密钥:

cp -av authorized_keys{,.2}
'authorized_keys' -> 'authorized_keys.2'

接下来,让我们验证 .ssh 文件夹权限是否设置为 0700:

stat /home/youruser/.ssh/
File: /home/youruser/.ssh/
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 801h/2049d Inode: 61080373 Links: 2
Access: (0700/drwx------) Uid: ( 1000/ youruser) Gid: ( 1000/ youruser)
Access: 2019-08-21 09:40:09.599161015 -0400
Modify: 2019-08-21 09:40:07.363167537 -0400
Change: 2019-08-21 09:40:07.363167537 -0400

(如果 .ssh 文件夹权限不是 0700,请使用命令“chmod 0700 /home/youruser/.ssh/”来修改它)

接下来,我们将查看,如果需要,将 .ssh/authorized_keys 文件的权限修改为 640

cd .ssh/
user@localhost:~/.ssh$ stat authorized_keys.2
File: authorized_keys.2
Size: 768 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 61100030 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2019-08-21 09:37:24.579636710 -0400
Modify: 2019-08-21 09:19:43.818521613 -0400
Change: 2019-08-21 09:39:56.987197777 -0400

哎呀! 644. 让我们将这些权限更改为 640

user@localhost:~/.ssh$ chmod 640 authorized_keys.2

现在,统计文件以重新检查其权限

user@localhost:~/.ssh$ stat authorized_keys.2
File: authorized_keys.2
Size: 768 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 61100030 Links: 1
Access: (0640/-rw-r-----) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2019-08-21 09:37:24.579636710 -0400
Modify: 2019-08-21 09:19:43.818521613 -0400
Change: 2019-08-21 09:43:49.546511500 -0400

完美的!。 现在,让我们将更新后的文件移回其原始名称:

user@localhost:~/.ssh$ mv authorized_keys.2 authorized_keys

接下来,让我们将更新后的密钥复制到服务器:(使用 您的 粗体文本中的用户登录信息)

user@localhost:~/.ssh$ scp /home/user/.ssh/authorized_keys root@serverIP:/root/.ssh/
root@serverIP's password:
stdin: is not a tty
authorized_keys 100% 768 737.6KB/s 00:00

第 3 步:使用新密钥登录

现在您的新密钥已复制到服务器,您可以开始使用它进行 SSH 登录。 如果您的本地计算机和服务器上的用户名相同,则可以简单地连接:

ssh [email protected]
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[host.domain.com] (ECDSA) to the list of known hosts.
Last login: Wed Aug 21 09:13:32 2019 from 10.30.4.51

如果您的本地用户名和登录服务器的用户名不同,您可以使用以下命令指定要登录服务器的用户:

ssh user@host.servername.com

在上一个 example,我复制了我的密钥,以便我可以以 root 身份登录到我的服务器。 现在密钥已在服务器上到位,运行命令:

ssh root@host.servername.com

将导致不同的行为。 如果您选择在密钥中使用密码,您将被要求输入密码,然后您将登录到服务器。 如果您没有使用密码短语,您将在输入 ssh 命令后立即登录到服务器。

恭喜! 您已成功设置 SSH 密钥。

第 4 步:更高级的配置

仍然有密码的无密码登录

在本文前面,我们介绍了密码短语以及在密钥中使用它们的一些优点和缺点。 可以在每次连接到远程服务器时不提示您在密码中键入密钥的方式使用您的密钥。

您的密钥可以加载到本地计算机的内存中,因此您只需输入一次密码,随后的每个 ssh 会话都会自动尝试登录。

在本地计算机终端/shell 上,输入命​​令 ssh-添加. 系统将提示您输入密码,然后,您应该会收到已添加身份的确认信息。

现在您可以多次使用您的密钥,而无需每次都输入密码。

为主机指定用户名

在本地计算机上的 .ssh 目录中,您还可以通过创建配置文件来指定要用于不同服务器的用户名。

这是一个 example 用于指定用户名的简单配置文件条目:

Host *domain.com
User root

此条目将导致 ssh 在连接到 domain.com 服务器或 domain.com 的任何子域时始终使用用户 root。

如果您对使用 SSH 密钥进行设置或连接仍有疑问?
我们的支持团队可以帮助解决您在使用 SSH 密钥时可能遇到的这个问题或其他问题。 如果您对此处列出的步骤感到不舒服, 给我们打电话 1.800.580.4985,或打开 聊天 或者 和我们。