如何创建一个为linux中的每台机器生成唯一密码的函数?

时间:2014-12-05 11:04:38

标签: linux password-encryption beagleboneblack

我需要编写一个生成唯一密码的代码,这样每次机器(beaglebone black)运行时输出总是一样的。

此外,如果有人在beagle中编译自己的linux并运行程序,则输出会有所不同。

总之,每台机器和操作系统的密码都是唯一的。

我想用以太网MAC地址作为参数来做那件事,但是我还需要一些能够识别操作系统的东西。

1 个答案:

答案 0 :(得分:0)

借鉴Sami Laine的建议,并考虑到你想要自动化它,你需要另外两个功能:(1)一个获取操作系统(+版本号)和(2)一个获得第一个mac地址。

(1)很容易。 (获取内核和内核版本号:)

uname -sr

(2)更棘手,因为设备将有不同的名称,具体取决于你拥有的linux,你在机器上有什么样的网络设备等等(eth0,wlan0,ath0,eth6,enp3s0,wlp5s0,.. )。为了简单起见,我们只使用第一个。

中列出了所有网络设备(作为目录)
/sys/class/net/

在每个(目录)中,您将在名为" address"的文件中找到相应设备的mac地址。我们列出所有这些,只使用第一个:

cat /sys/class/net/*/address|head -1

现在,我们只是将它集成到Sami Laine提出的命令中(它有一个回复重复一行,带有一个独特的秘密,例如从你最喜欢的小说中借用的一个短语,内核/版本和mac地址,并将其输入openssl)消化并将其编码为密码,该密码对于通过回声传入其中的字符串是唯一的,但不允许轻易猜出生成它的字符串。)

echo "Your favorite quote from your favorite novel:$(uname -sr):$(cat /sys/class/net/*/address|head -1)"|openssl ripemd160 -binary|openssl base64

请注意,您可以将命令包含在括号中的echo的参数字符串中,并以$开头;然后,echo将在字符串中的位置包含这些命令的输出。

在这里,我假设您只希望操作系统和机器之间的密码不同(例如,如果您在同一台机器上重新编译/重新安装相同的操作系统,则相同)...否则您可能包括一个文件的inode(根据文件系统,安装过程等可能是唯一的),在操作系统存在的过程中可能不会改变,例如/ etc / hostname。像这样

ls -i /etc/hostname

...并包含在上面的命令中:

echo "Your favorite quote from your favorite novel:$(uname -sr):$(cat /sys/class/net/*/address|head -1):$(ls -i /etc/hostname)"|openssl ripemd160 -binary|openssl base64