Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用服务器上的shell部署生成随机密码_Linux_Bash_Shell - Fatal编程技术网

Linux 使用服务器上的shell部署生成随机密码

Linux 使用服务器上的shell部署生成随机密码,linux,bash,shell,Linux,Bash,Shell,当我运行我的自动部署脚本时,我正在尝试为我的各种配置文件和设置动态生成随机和安全的密码。我希望它们被生成,显示给用户,作为部署的一部分使用,然后被丢弃 这就是我要说的: # FUNCTION TO GENERATE A RANDOM STRING function randpass() { [ "$2" == "0" ] && CHAR="[:alnum:]" || CHAR="[:graph:]" cat /dev/urandom | tr -cd "$CHAR"

当我运行我的自动部署脚本时,我正在尝试为我的各种配置文件和设置动态生成随机和安全的密码。我希望它们被生成,显示给用户,作为部署的一部分使用,然后被丢弃

这就是我要说的:

# FUNCTION TO GENERATE A RANDOM STRING
function randpass() {
  [ "$2" == "0" ] && CHAR="[:alnum:]" || CHAR="[:graph:]"
    cat /dev/urandom | tr -cd "$CHAR" | head -c ${1:-32}
    echo
}

$NOW = $(date +"%m-%d-%Y") || echo ="Time = $now"
$APPKEY = randpass(20) || echo "Secret key = $APPKEY"
read -p "Copied down?" -n1 -s
  • 这是一个糟糕的方法吗
  • 这安全吗
  • 部署完成后,密码是否会存储为变量
  • 我不熟悉shell和linux管理,因此非常感谢您的帮助

    James

    1)如果用户必须将密码复制到纸张上,那么纸张就是新的弱点。这是否是一种可容忍的方法取决于您的应用程序及其使用的环境。(用户是否可以将密码更改为不需要记下的内容?是用户写下密码还是用户输入密码,还是将该文件传递给他人,或者甚至通过post将{SHARDER}附加到显示器上?)

    2) 除了
    randpass()
    中的潜在错误(我没有详细介绍),您正在显示密码,因此站在运行部署的用户旁边的任何人都会看到它。此外,运行部署脚本的用户是否与将使用应用程序的用户相同(并且需要密码)

    从上面的1)和2)中可以看出,无论密码有多“安全”,协议也很重要,以至于
    randpass()
    如何实际生成密码几乎是无关紧要的

    一种常见的方法是提供初始密码(安全与否是另一回事),然后允许(非常)短的宽限期,在该宽限期内,用户可以根据自己的喜好更改该密码,如果在此期间未更改,则锁定该帐户。(这基本上就是
    passwd--expire--inactive 1
    所做的。)

    或者,让用户输入密码,而不是让他面对随机字符序列(因为上面的1)。通过
    read-s
    将终端设置为无回声(这样密码就不会像键入的那样出现在屏幕上),让他重复密码以排除输入错误。因为,既然你可以让他先给你密码,为什么还要让他把你的随机密码改成其他密码呢

    3) 不会。脚本完成后,所有设置的变量都将消失,除非您显式地将它们存储在某个位置


    最后一个问题实际上是唯一可以肯定回答的问题,这就是为什么我现在要投票支持close

    太棒了,谢谢你的邀请feedback@JamesWillson:在其中编辑了一些内容,因为它没有像我预期的那样快速关闭。;-)<代码>3)不确定。总是有可能将其交换到磁盘。@JohnB:…或者系统可能已通过加密交换或完全禁用交换进行了加固。你必须在偏执狂和理智之间的某个地方划清界限我认为没有必要否决这一点。是的,这不是真正的话题,可能应该以观点为基础来结束,但这个问题很好。真的,只有第一个问题是征求意见。第二个问题有点不明确。第三个问题似乎很好。