• Code-server에 script로 날짜와 시간 값을 구해 암호를 바꿔 사용해봅니다.
  • iPAD에서도 계속 열어놓고 사용하기 위해 Nginx .htpasswd는 제거하고 code-server의 암호를 규칙적으로 바꿔 사용중입니다. (Update: Mar 21, 2021)

환경 구성

  • OS: CentOS 7 (on Oracle cloud VM)
  • Code-server: 3.9.0-amd64.rpm
  • Linux shell script + cron

1. 암호 규칙

  1. date 옵션을 이용해 스크립트가 실행된 시간과 날짜 등을 구합니다.
  2. 실행된 시간과 날짜로 그 값들에 해당하는 특수문자를 구합니다.
  3. 특수문자는 1~5 숫자만 같은 키의 특수문자로 생성에 사용합니다.
  4. 6~0키, 특히 7키(&), 8키(*)키의 특수문자는 뒤에 어떤 특수 문자가 오느냐에 따라 랜덤하게 오류가 발생되어 6~0키는 바로 아래 키의 알파벳 대문자로 입력하는 걸로 했습니다.
  5. 마지막으로 개인이 자주 사용하는 문자열을 넣어서 원하는 배치로 나열해 전체 새로운 암호로 만듭니다.
#!/bin/bash

YAMLPATH="/home/USER1/.config/code-server"
CURPASSWD=`grep password: ${YAMLPATH}/config.yaml |awk '{print $2}'`

MYWORD1="^^Hello"
GETDATE=`date "+%Y_%m%d_W%V_%H%M%S_%a_%B"`      #GETDATE -->  2021_0321_W11_222625_Sun_March
CURDAY=`expr ${GETDATE:7:2}`
CURMONTH=`expr ${GETDATE:5:2} + 0`

#SPLCHAR=( ")" "!" "@" "#" "$" "%" "^" "&" "*" "(" )
SPLCHAR=( "P" "!" "@" "#" "$" "%" "Y" "U" "I" "O" )
ARR_EXCH=()

DAY1=`expr ${CURDAY} / 10`
DAY2=`expr ${CURDAY} % 10`
MONTH1=`expr ${CURMONTH} / 10`
MONTH2=`expr ${CURMONTH} % 10`

i=0
for var in ${DAY1} ${DAY2}
do
        case ${var} in
                ${var}) ARR_EXCH[${i}]=${SPLCHAR[${var}]} ;;
                *) exit -1 ;;
        esac
i=`expr ${i} + 1`
done

GENPASSWD="${MONTH1}${MONTH2}"-"${DAY1}${DAY2}"_"${ARR_EXCH[0]}${ARR_EXCH[1]}${MYWORD1}"

eval "sed -i 's/${CURPASSWD}/${GENPASSWD}/g' ${YAMLPATH}/config.yaml" && sleep 1
eval "sudo systemctl restart code-server@USER1" && exit 0

;실행해보면… (code-server 재시작 포함)

USER1@ ~]$ sh -x ./update-pass.sh 

(...생략...)

+ GENPASSWD='03-21_@!^^Hello'
+ eval 'sed -i '\''s/myCurnPass20@!$#%..,/03-21_@!^^Hello/g'\'' /home/USER1/.config/code-server/config.yaml'
++ sed -i 's/myCurnPass20@!$#%..,/03-21_@!^^Hello/g' /home/USER1/.config/code-server/config.yaml
+ sleep 1
+ eval 'sudo systemctl restart code-server@USER1/'
++ sudo systemctl restart code-server@USER1/
+ exit 0

; 생성된 code-server의 pasword 비교

#실행 전
USER1@ ~]$ cat /home/USER1/.config/code-server/config.yaml
bind-addr: 127.0.0.1:8888
auth: password
password: myCurnPass20@!$#%..,
cert: false

#실행 후
USER1@ ~]$ cat /home/USER1/.config/code-server/config.yaml
bind-addr: 127.0.0.1:8888
auth: password
password: 03-21_@!^^Hello
cert: false

;cron 등록으로 규칙적으로 실행

USER1@ ~]$ cat /etc/crontab 
00 07   * * 1   USER1    /bin/sh /home/USER1/update-pass.sh > /dev/null 2>&1
  • 규칙성을 갖는 암호를 사용하면 다수의 암호를 기억해야 하거나 잊어버릴 일이 적어서 (호기심으로 시작해) 규칙에 따라 일정하게 변경되게 해보자로 공부 겸 작성했습니다.
  • 저처럼 값의 특수문자 변환없이 자주 사용하는 암호들을 규칙적으로만 바꿔줘도 충분할 것 같네요.

참고