@爱消,@老虎会游泳,写了个纯
bash版本的,但不是很确定楼主的意图猜对没,以及找普通用户的方法是否正确#!/bin/bash # # 此脚本用于root账号密码修改 # 常量 PASSWD_LEN=16 OUTPUT_FILE='./passwd.txt' # 获取IP,展示,保存 if ip=$(curl 'members.3322.org/dyndns/getip'); then echo "$ip" | tee "$OUTPUT_FILE" else echo '无法获取IP' exit 1 fi # 找到普通用户和root用户,生成随机密码,展示,保存,修改 paste -d ':' \ <(awk -F: '($3 >= 1000 && $7 ~ /\/(bash|sh)$/ || $3 == 0){print $1}' </etc/passwd) \ <(tr -dc '[:print:]' </dev/urandom | fold -w $PASSWD_LEN) | sed -n '/^:/q; p' | tee -a "$OUTPUT_FILE" | chpasswd
@爱消,你要产生1024字节,就必须提高
bs,产生更多的随机数供挑选。优化挑选前:
dd if=/dev/urandom bs=1M count=1 2>/dev/null | strings | grep -E '^[A-Za-z0-9!@#%^&*/(){}<>~]*$' | strings -s '' | cut -b 1-1024 -优化挑选后:
dd if=/dev/urandom bs=8k count=1 2>/dev/null | grep -aoE '[A-Za-z0-9!@#%^&*/(){}<>~]*' | tr -d '\n' | cut -b 1-1024
优化挑选的方法:
dd if=/dev/urandom bs=256 count=1 2>/dev/null | grep -aoE '[A-Za-z0-9!@#%^&*/(){}<>~]*' | tr -d '\n' | cut -b 1-24
挑选法一定会产生足够长的字符串吗?
不一定。
有极小概率产生的字符串不够长,原因显而易见:产生的随机字节中的大部分都不符合要求。
但是只要产生的字节够多,远比最后需要的多,那出现该问题的概率就无限接近于0,以至于可以忽略。
当然,如果你想确保产生足够长的字符串,你可以写一个循环进行检测,这用shell完全能做到。
@老虎会游泳,可以!很完美了。
@老虎会游泳,![]()
关于
/dev/random和/dev/urandom:前者生成的随机字节很安全,不容易被预测,但会耗尽,所以一次只能读取几个字节。如果一次读取很多字节,可能需要等很久才能完成,或者干脆完不成(读取不到指定长度)。
后者生成的随机字节没有前者那么安全,存在被预测的可能性(可能性很小),但可以无限生成。所以要生成大量随机字节时通常用后者。
详细介绍:
shell 应该也能生成随机数吧
纯 shell 做不到吗
@虎老会泳游,回源收费
@㝶芾厶眵攴䭡,回源也不知道收费不
@㝶芾厶眵攴䭡,我刚看了,开通就有了,不知道是多久的
@虎老会泳游 我的已经开通好久了,至于现在怎么开通我没研究过,但应该都有一个体验包吧
~~~
@㝶芾厶眵攴䭡,我没找到免费的
@包子叔,@虎老会泳游,@20263,@卷心菜,@㝶芾厶眵攴䭡, 抱歉 各位大佬 我的域名没备案
腾讯有每个月10G的流量 免费
~~~
买台三网9929反代一下就行了
