我需要编写一个生成唯一密码的代码,这样每次机器(beaglebone black)运行时输出总是一样的。
此外,如果有人在beagle中编译自己的linux并运行程序,则输出会有所不同。
总之,每台机器和操作系统的密码都是唯一的。
我想用以太网MAC地址作为参数来做那件事,但是我还需要一些能够识别操作系统的东西。
答案 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