介绍
SSH是远程登录服务器的最流行的方式,它是一种加密协议,可以保护您的密码免受中间人和重播攻击。
但是,您必须记住,SSH 只能在数据过境时保护您的数据,攻击者可以通过其他方式发现您的 SSH 密码,例如使用键盘记录器或战略性地放置的摄像头。
只要你使用一个值得信赖的计算机(例如,一个属于你或你的公司),并从一个安全的位置这样做,你不必担心这种攻击。
在本教程中,您将学习如何生成和使用一次性密码登录您的远程 FreeBSD 服务器. 您可以在安全位置时预生成一个或多个一次性密码,并在您从不安全的位置访问服务器时将其保存到以后。
<$>[注] 注: 截至 2022 年 7 月 1 日,DigitalOcean 不再支持通过控制面板或 API 创建新的 FreeBSD Droplets。
前提条件
为了遵循本教程,您将需要:
- 通过 SSH 访问的 FreeBSD 10.1 服务器 * 允许切换到 root 的用户;DigitalOcean 上的默认 freebsd 用户是好的
步骤 1 – 创建一个新的 OPIE 用户
为了确保您不会从远程服务器中被锁定,最好创建一个单独的用户,以便与OPIE一起使用。
切换到 root,键入:
1sudo su
若要创建您想要使用一次性密码的新用户,请键入:
1adduser
您将被要求输入有关用户的各种细节。 让用户名为 sammy. 当您被要求使用密码时,请确保您输入强大的密码。
1[secondary_label Interactive]
2Username: sammy
3Full name: Sammy the Shark
4Uid (Leave empty for default):
5Login group [sammy]:
6Login group is sammy. Invite sammy into other groups? []:
7Login class [default]:
8Shell (sh csh tcsh zsh nologin) [sh]:
9Home directory [/home/sammy]:
10Home directory permissions (Leave empty for default):
11Use password-based authentication? [yes]:
12Use an empty password? (yes/no) [no]:
13Use a random password? (yes/no) [no]:
14Enter password: password
15Enter password again: password
16Lock out the account after creation? [no]:
17Username : sammy
18Password : ****
19Full Name : My Test User
20Uid : 1001
21Class :
22Groups : sammy
23Home : /home/sammy
24Shell : /usr/local/bin/zsh
25Locked : no
26OK? (yes/no): yes
27adduser: INFO: Successfully added (sammy) to the user database.
28Add another user? (yes/no): no
29Goodbye!
输入是
以确认详细信息,当您被问及是否要添加另一个用户时,请键入不
,以退出添加者
。
您现在可以重返原始用户,即默认用户 freebsd或通常的 sudo 用户:
1exit
在此时刻,您应该与您的非OPIE sudo用户登录到您的服务器。
步骤 2 – 登录为新 OPIE 用户
从当前的终端会话中,使用ssh
登录为 sammy,OPIE用户。
1ssh sammy@localhost
这很重要,因为OPIE设置只能从安全的终端进行,如果您使用不安全的协议,如rsh
或telnet
,OPIE将投诉。
步骤 3:为新用户启用 OPIE
<$>[警告] [标签警告] 一旦您为用户启用OPIE,该用户将无法使用正常密码登录! 因此,请确保您至少保持一个用户在没有OPIE的情况下可访问; 在本教程中,我们将使用标准SSH密钥登录的 freebsd用户。
若要将用户添加到 OPIE 身份验证系统,请使用命令 opiepasswd
. -c
选项告诉命令,您正在使用可信计算机并处于安全位置。
1opiepasswd -c
当您被要求使用秘密通道时,请输入至少十个字符长的通道短语。 该通道短语不应与用户的SSH密码相同。
该命令的完整输出将是这样的:
1[secondary_label Interactive]
2Adding sammy:
3Only use this method from the console; NEVER from remote. If you are using
4telnet, xterm, or a dial-in, type ^C now or exit with no password.
5Then run opiepasswd without the -c parameter.
6Using MD5 to compute responses.
7Enter new secret pass phrase: Sammy's secret pass phrase
8Again new secret pass phrase: Sammy's secret pass phrase
您将收到一个新的OPIE种子和一个随机通行句子:
1[secondary_label Output]
2ID sammy OTP key is 499 si5509
3RITE NERO BASS SOFA BEND TO
在此输出中, sammy 是用户, 499 是 iteration count,和 si5509 是 seed。
现在 sammy 已被添加到 OPIE 身份验证系统中,您不再可以使用实际的 SSH 密码登录。
1ssh sammy@your_server_ip
你会看到一个快递,看起来像这样:
1[secondary_label Prompt]
2otp-md5 498 zi5509 ext
3Password:
您现在需要输入一次性密码,因为我们尚未生成一次性密码,因此您目前无法登录。
步骤4:创建一次性密码
当用户被添加到 OPIE 身份验证系统时,将与用户关联一个从 499 开始的迭代数和随机种子。
<$>[警告] [标签警告] 请记住,始终从安全位置生成一次性密码。
如果您已经登录为 sammy,您应该在这个时候,您可以使用命令opieinfo
来确定这些值。
1opieinfo
它的输出将包含两个值. 第一是序列号,第二是种子。
1[secondary_label Output]
2498 zi5509
<$>[注] [标签 注释标签] 如果您目前与非OPIE用户登录,您将收到这样的错误:
1[secondary_label Output]
2freebsd not found in database.
在这种情况下,您可以通过打开一个新的终端窗口来获取信息,并尝试与OPIE用户登录。密码提示将包含当前迭代计数和种子。
将这些值传输到opiekey
命令中,以生成一次性密码,请记住,就像opiepasswd
一样,opiekey
也只能从可信的计算机运行。
1opiekey 498 zi5509
或者,你可以输入:
1opiekey `opieinfo`
您将被要求输入 OPIE 用户的pass 语句。 输入您在上一步中选择的pass 语句。
1[secondary_label Interactive]
2Using the MD5 algorithm to compute response.
3Reminder: Don't use opiekey from telnet or dial-in sessions.
4Enter secret pass phrase: Sammy's secret pass phrase
5PER POE TURF LITE ZONE BART
最后一行包含六个短词是您的一次性密码。
打开新终端以尝试再次登录:
1ssh sammy@your_server_ip
您的快递将保持相同:
1[secondary_label Prompt]
2otp-md5 498 zi5509 ext
3Password:
请注意,您在这个提示中看到的数字匹配了opieinfo
的输出,以及您传递给opiekey
的参数。
现在你可以粘贴你的通行句子,或者手动输入它. 在你开始输入长密码之前,为了避免错误,请按‘ENTER’。
1[secondary_label Prompt]
2otp-md5 498 zi5509 ext
3Password [echo on]:
现在输入一次性密码,你将能够登录到你的服务器作为 sammy。
通过键入退出
或关闭终端来结束 SSH 会话。
打开另一个终端,并尝试建立新的连接:
1ssh sammy@your_server_ip
这一次,速度将略有不同。
1[secondary_label Prompt]
2otp-md5 497 zi5509 ext
3Password:
正如你所看到的,序列号已经改变了;它已被缩小为一个. 你将无法再次登录,直到你使用这些新值的opiekey
生成一个新的一次密码。
步骤5:创建多个一次密码
如果你知道你无法在几天内访问一个受信任的计算机,你可能需要多个一次密码才能访问你的服务器多次。你可以通过运行opiekey
选项来指定想要的一次密码的数量。
1opiekey -n 3 `opieinfo`
<$>[注]
[标签注]
您可以提供迭代计数号和种子,而不是使用opieinfo
。
输出将包含三个密码,以及它们的序列号:
1[secondary_label Interactive]
2Using the MD5 algorithm to compute response.
3Reminder: Do not use opiekey from telnet or dial-in sessions.
4Enter secret pass phrase: Sammy's secret pass phrase
5495: BEAM BOW TOO CAVE BOWL AUK
6496: HIVE KITE HUGE SANG VAT FOAM
7497: THIN ALL BUT NIL SUP BALE
一次性密码也可以通过使用 -x
选项生成以六进制数字的形式:
1opiekey -x -n 3 `opieinfo`
当然,密码现在看起来不那么容易理解:
1[secondary_label Interactive]
2Using the MD5 algorithm to compute response.
3Reminder: Do not use opiekey from telnet or dial-in sessions.
4Enter secret pass phrase: Sammy's secret pass phrase
5495: 5484 C106 B214 B801
6496: 98F1 E6CF 7F54 3108
7497: 6010 2C11 192A EDAC
您现在应该把这些写在纸上,并在旅行时携带纸张。下一次您需要登录时,使用纸张查找 SSH 提示中显示的序列号的密码,然后输入它。
当你用完了纸上的所有密码时,只需重复这一步骤来生成更多的密码。但是,如果你用完了所有498个密码,你的序列号变为零,你将不得不再次拨打opiepasswd -c
。
结论
在现实情况下,您应该提前准备出一个安全位置的适当数量的密码,在纸上写下它们,并在您需要从不安全位置登录时一次使用它们。
在本教程中,您已经学会了如何使用OPIE身份验证系统安全地登录您的远程FreeBSD服务器,从不受信任的计算机上的终端。您已经学会了如何生成一次性密码,并每次需要登录时使用它们。