我正在编写一个Shell脚本,该脚本将部署到多台计算机并连接到中央服务器。连接时,脚本应标识正在运行的计算机。(这用于实现一些基本的锁定,但这对问题并不重要。)
我知道我可以使用主机名(由报告hostname -f
)来标识机器。但许多个人设备的唯一主机名称,如已远远my-laptop
或workstation
因此我谨慎使用这个的。
通过将主机名与其他一些不会更改的特定于主机的信息一起散列,我也许可以添加熵。
echo $(hostname -f) $(uname -snmpio) | md5sum
但是增加的熵非常低。我很难考虑可以被哈希处理并保证不会更改的其他系统属性。(例如,我不想添加文件系统或其他系统配置1的任何属性,因为它随时可能合法地更改。)
最后,我考虑过在脚本第一次运行时生成一个随机字符串,并将其存储在某个配置文件中。这种想法极有可能是独一无二的,并且保证不会改变。但是,如果可能的话,我宁愿不必管理持久状态。
理想情况下,将存在一种实用程序,用于为本地系统(如blkid
块设备)获得确定性的非易失性UUID 。不需要伪造UUID。这不是身份验证机制,我信任运行脚本的所有各方。
有什么我忽略的高级选择吗?
1从技术上讲,主机名也是系统配置。但是,如果我们更改它,我们希望该系统不再被识别为以前的系统。
为了提供选项,您可以使用本地主机的RSA指纹。您的机器很可能已经配置了所有必需的组件。
hostkey=$(ssh-keygen -l -f /path/to/host_key.pub)
输出将包含空格和其他内容,但是如果有问题,您可以将其解析出来。主机密钥通常在其中,/etc/ssh/ssh_host_*
但可能取决于linux的发行版。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句