嘟嘟社区

[经验] 抛砖引玉之-V2RAY一键脚本的修复(hijk.art关站后hostip不能访问


今天在用“v-2-r-a-y”.sh一键脚本(
  1. bash <(curl -sL https://s.hijk.art/“v-2-r-a-y”.sh)

复制代码

)的时候一直提示我没有解析域名到VPS!我本地ping和在VPS上ping域名都是正常的!于是我查看了一键脚本的代码发现有一句:

  1. if [[ -f ~/“v-2-r-a-y”.pem && -f ~/“v-2-r-a-y”.key ]]; then
  2.             colorEcho ${BLUE}  " 检测到自有证书,将使用其部署"
  3.             CERT_FILE="/etc/“v-2-r-a-y”/${DOMAIN}.pem"
  4.             KEY_FILE="/etc/“v-2-r-a-y”/${DOMAIN}.key"
  5.         else
  6.             resolve=`curl -sL https://hijk.art/hostip.php?d=${DOMAIN}`
  7.             res=`echo -n ${resolve} | grep ${IP}`
  8.             if [[ -z "${res}" ]]; then
  9.                 colorEcho ${BLUE}  "${DOMAIN} 解析结果:${resolve}"
  10.                 colorEcho ${RED}  " 域名未解析到当前服务器IP(${IP})!"
  11.                 exit 1
  12.             fi

复制代码

然后我上https://hijk.art发现站长说要关站了!估计这个hostip.php也要停止服务了!但是我觉得这个脚本还是挺好用的!那……我们来修复一下!我本身是一个小白!我们先来谷歌一下这段代码的用途!首先是

  1. resolve=`curl -sL https://hijk.art/hostip.php?d=${DOMAIN}`

复制代码

也就是将我们输入的网址传送给hostip.php这个PHP文件,文件解析域名后反馈一个IP回来(没有解析成功我也不知道反馈啥)赋值给resolve,然后

  1. res=`echo -n ${resolve} | grep ${IP}`
  2.             if [[ -z "${res}" ]]; then

复制代码

这个语句,我查了一下shell的说明-z是检查长度是否为零!这句没看懂!希望有大哥解答一下!还有

  1. `echo -n ${resolve} | grep ${IP}

复制代码

这句中的|又是啥用途的?反正意思大概明白了就是要hostip.php反馈我们输入域名的IP!个人觉得这个第三方检查……本机ping域名不就可以了么?于是我又谷歌了一段代码

  1. `ping ${DOMAIN} -c 1 | sed ‘1{s/[^(]*(//;s/).*//;q}’`

复制代码

我们把这段替换进去

  1. resolve=`ping ${DOMAIN} -c 1 | sed ‘1{s/[^(]*(//;s/).*//;q}’`
  2.             res=`echo -n ${resolve} | grep ${IP}`
  3.             if [[ -z "${res}" ]]; then
  4.                 colorEcho ${BLUE}  "${DOMAIN} 解析结果:${resolve}"
  5.                 colorEcho ${RED}  " 域名未解析到当前服务器IP(${IP})!"
  6.                 exit 1

复制代码

这样的话就不依赖外部PHP文件解析了!
然后继续放进VPS里跑!然后提示“acme.sh is using ZeroSSL as default CA now”云云~这里没截图!继续谷歌,解决办法就是在申请证书之前再加一条命令acme.sh   –register-account -m 邮箱地址
于是我又改了一下代码

  1. ~/.acme.sh/acme.sh  –upgrade  –auto-upgrade
  2.         if [[ "$BT" = "false" ]]; then
  3.             ~/.acme.sh/acme.sh   –register-account -m [email protected]$DOMAIN
  4.             ~/.acme.sh/acme.sh   –issue -d $DOMAIN –keylength ec-256 –pre-hook "systemctl stop nginx" –post-hook "systemctl restart nginx"  –standalone
  5.         else
  6.             ~/.acme.sh/acme.sh   –register-account -m [email protected]$DOMAIN
  7.             ~/.acme.sh/acme.sh   –issue -d $DOMAIN –keylength ec-256 –pre-hook "nginx -s stop || { echo -n ”; }" –post-hook "nginx -c /www/server/nginx/conf/nginx.conf || { echo -n ”; }"  –standalone
  8.         fi

复制代码

至此脚本就可以顺利运行安装了!
希望有大哥解答一下上面小弟的疑问和检错!谢谢!

技术贴顶一下
少有的技术贴
技术大佬,感谢分享,
玉会告诉你不要折腾什么莫名其妙的一键
我对技术贴不感兴趣,我对楼主图像感兴趣,图像名字是不是"自取其(ru)"?
头像好评
本帖最后由 就这样了s 于 2021-11-16 15:37 编辑

“我查了一下shell的说明-z是检查长度是否为零”
就是判断变量的值是不是空的,成立的话执行then之后的代码,如果不是且后面有else就执行else之后的代码
“这句中的|又是啥用途的”
管道符。例如:a | b
将命令a的执行结果当做命令b的输入。找了一段更好的解释
“利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为 第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。”
获取域名解析的ip有更优雅的方法

  1.         server_ip=$(curl -s ipv4.ip.sb)
  2.         domain_ip=$(nslookup $domain | grep Address | cut -d " " -f 2 | grep  -v Address)
  3.         if [[ "$server_ip" != "$domain_ip" ]] && [[ "$server_ip" = "" ]];then
  4.                 echo -e "$(red) The domain name is not resolved to this server, please check."
  5.                 exit
  6.         fi
  7.         echo -e "$(green) Verification passed, installation will continue…"

复制代码

bash语言入门很简单,你可以买一本

其实也可以改用 host 命令,这个是专门用来解析域名的~
最好自己手动安装就不会出现各种未知错误了