介绍
SSH是远程登录到服务器的最流行的方式。 它是一个加密协议,保护您的密码免受中间人和重放攻击。
但是,您必须记住,SSH仅在传输数据时保护您的数据。 攻击者可以通过其他方式发现您的SSH密码,例如使用键盘记录器或策略性放置的摄像机。
只要您使用可信任的计算机(例如,属于您或您公司的计算机),并从安全的位置执行此操作,您就不必担心此类攻击。 但是,有时您可能需要使用公共计算机。 为了在这种情况下保护您的密码,FreeBSD提供了一个安全功能,称为一次性密码在一切,或OPIE。
在本教程中,您将学习如何生成和使用一次性密码登录到远程FreeBSD服务器。 您可以在处于安全位置时预先生成一个或多个一次性密码,并在以后从较不安全的位置访问服务器时保存这些密码。 这样,即使您的一次性密码被记录,它也不会对攻击者有用。
先决条件
为了遵循本教程,您将需要:
- 可通过SSH访问的FreeBSD 10.1服务器
- 谁可以切换到root用户; 在DigitalOcean默认的FreeBSD用户是罚款
第1步 - 创建新的OPIE用户
为了确保您不会被远程服务器锁定,最好创建一个单独的用户与OPIE一起使用。
切换到root,通过键入:
sudo su
要创建要与一次性密码一起使用的新用户,请输入:
adduser
系统将提示您输入有关用户的各种详细信息。 让用户名是sammy 。 当提示输入密码时,请确保键入强密码。 对于所有其他提示,你可以简单地按ENTER
选择默认值。
InteractiveUsername: sammy
Full name: Sammy the Shark
Uid (Leave empty for default):
Login group [sammy]:
Login group is sammy. Invite sammy into other groups? []:
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]:
Home directory [/home/sammy]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password: password
Enter password again: password
Lock out the account after creation? [no]:
Username : sammy
Password : ****
Full Name : My Test User
Uid : 1001
Class :
Groups : sammy
Home : /home/sammy
Shell : /usr/local/bin/zsh
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (sammy) to the user database.
Add another user? (yes/no): no
Goodbye!
输入yes
确认细节,当您被询问您是否要添加其他用户,键入no
退出adduser
。
现在,您可以切换回原来的用户,无论是默认的FreeBSD用户或者你平常的Sudo用户:
exit
此时,您应该使用非OPIE sudo用户登录到服务器。
第2步 - 以新的OPIE用户身份登录
从当前终端会话,使用ssh
登录为sammy的OPIE用户。
ssh sammy@localhost
这很重要,因为OPIE设置只能从安全终端完成。 如果你使用一个不安全的协议,如rsh
或telnet
,OPIE会抱怨。
第3步 - 为新用户启用OPIE
将用户添加到OPIE验证系统,使用命令opiepasswd
。 在-c
选项告诉您正在使用受信任的计算机,并在安全的位置命令。
opiepasswd -c
当系统提示您输入密码密码时,请输入长度至少为十个字符的密码短语。 此密码不应与用户的SSH密码相同。 您稍后需要此密码才能生成一次性密码。
命令的完整输出将如下所示:
InteractiveAdding sammy:
Only use this method from the console; NEVER from remote. If you are using
telnet, xterm, or a dial-in, type ^C now or exit with no password.
Then run opiepasswd without the -c parameter.
Using MD5 to compute responses.
Enter new secret pass phrase: Sammy's secret pass phrase
Again new secret pass phrase: Sammy's secret pass phrase
您将收到一个新的OPIE种子和随机口令:
OutputID sammy OTP key is 499 si5509
RITE NERO BASS SOFA BEND TO
在此输出, sammy是用户,499是迭代次数 ,并且si5509是种子 。
现在, sammy已经加入到OPIE认证系统,可以不再使用SSH实际密码登录你的本地计算机上打开一个新的终端并输入:
ssh sammy@your_server_ip
您将看到如下所示的提示:
Promptotp-md5 498 zi5509 ext
Password:
您现在需要输入一次性密码。 因为我们还没有生成的一次性密码呢,现在,你将无法登录。关闭终端,并返回到以前的终端,你在哪里登录的sammy 。
第4步 - 创建一次性密码
当用户被添加到OPIE认证系统时,从499开始的迭代计数数和随机种子与用户相关联。 您需要知道这些值才能生成一次性密码。
如果您已经登录为sammy ,你应该在这一点上,你可以决定使用命令这些值opieinfo
。
opieinfo
其输出将包含两个值。 第一个是序列号,第二个是种子。
Output498 zi5509
如果您当前使用非OPIE用户登录,则会收到以下错误消息:
Outputfreebsd not found in database.
在这种情况下,您可以打开一个新的终端窗口并尝试使用OPIE用户登录来获取信息。 密码提示将包括当前的迭代计数和种子。 复制此信息并在已验证的会话中使用它。
这些值传递给opiekey
命令来生成一次性密码。 请记住,就像opiepasswd
, opiekey
也应该只从受信任的计算机上运行。
opiekey 498 zi5509
或者,您可以输入:
opiekey `opieinfo`
将提示您输入OPIE用户的密码短语。 键入您在上一步中选择的密码短语。 此命令的输出如下:
InteractiveUsing the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: Sammy's secret pass phrase
PER POE TURF LITE ZONE BART
最后一行包含六个短字是您的一次性密码。
打开一个新终端以尝试重新登录:
ssh sammy@your_server_ip
您的提示仍然会是相同的:
Promptotp-md5 498 zi5509 ext
Password:
请注意,您在此提示匹配的输出显示的数字opieinfo
和参数,你传递给opiekey
。
现在您可以粘贴您的密码短语,或手动输入。 在您开始键入较长的密码,以避免错误之前,按ENTER
。 您的提示将会更改,您将可以看到您输入的密码:
Promptotp-md5 498 zi5509 ext
Password [echo on]:
现在输入您的一次性密码,您将能够登录到你的服务器sammy 。
通过键入结束SSH会话exit
或关闭终端。
打开另一个终端,并尝试建立新连接:
ssh sammy@your_server_ip
这一次,提示会略有不同。
Promptotp-md5 497 zi5509 ext
Password:
正如你所看到的,序列号已经改变; 它减少了一个。 您将无法再次登录,直到您使用生成一个新的一次性密码opiekey
这些新值。 换句话说,你将不得不通过本教程的第4步一遍所描述的过程。
第5步 - 创建多个一次性密码
如果您知道几天内无法访问受信任的计算机,则可能需要多个一次性密码,以便您可以多次访问服务器。 您可以通过运行指定你想一次性密码数量opiekey
与-n
选项。 例如,要生成三个一次性密码,请输入:
opiekey -n 3 `opieinfo`
opieinfo
,你可以像以前一样提供迭代计数和种子。
输出将包含三个密码及其序列号:
InteractiveUsing the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: Sammy's secret pass phrase
495: BEAM BOW TOO CAVE BOWL AUK
496: HIVE KITE HUGE SANG VAT FOAM
497: THIN ALL BUT NIL SUP BALE
该一次性密码,也可以以十六进制数的形式通过使用所生成的-x
选项:
opiekey -x -n 3 `opieinfo`
当然,密码现在看起来不太明了:
InteractiveUsing the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: Sammy's secret pass phrase
495: 5484 C106 B214 B801
496: 98F1 E6CF 7F54 3108
497: 6010 2C11 192A EDAC
你现在应该把它们写在纸上,并在旅行时随身携带纸张。 下次需要登录时,请使用纸张查找与SSH提示中显示的序列号相关联的密码,然后键入密码。使用密码后,可以将其删除。 不用说,你必须确保这篇论文不会落入错误的手中。
当您用完纸张上的所有密码后,只需重复此步骤以生成更多密码。 但是,如果你使用了所有498密码,您的序列号变为零时,你将不得不调用opiepasswd -c
一次。 这样做会重置随机种子和序列号。
结论
在现实生活中,您应该事先从安全位置准备适当数量的密码,将它们写在纸上,并在需要从不安全位置登录时一次使用一个。 保持纸张安全!
在本教程中,您已经学习了如何使用OPIE身份验证系统从不受信任的计算机上的终端安全登录到远程FreeBSD服务器。 您已经学会了如何生成一次性密码,并在每次需要登录时使用它们。此功能对于那些不断在移动中并被迫使用公共计算机和网络的人员非常有用。