Bash-скрипт для генерации и изменения паролей ключей Java


Это первый bash-скрипт я написал, вот я и ищу отзывы о лучших практик, конференций и тому подобное.

Этот скрипт делает несколько предположений

  1. Есть хранилище ключей Java, хранящиеся в ~/.keystore
  2. Есть псевдоним для входа в хранилище со значением test
  3. Хранилища и запись на едином пароль
  4. Это общий пароль test

После этого, для хранилища и ввода ключа, это тянет за собой количество байтов из /dev/urandom, в base64 кодирует их и устанавливает, что в качестве пароля.

#!/bin/bash

keystore_file=~/.keystore
config_file=~/.keystore.config
alias_name=test
initial_password=test

generate_password() {
    local password_length=$1
    local password="$(dd if=/dev/urandom bs=$password_length count=1 | base64 -w 0)"
    echo $password
}

set_keystore_password() {
    local password_length=80
    local password=$(generate_password $password_length)
    keytool -storepasswd -keystore $keystore_file -storepass $initial_password -new $password
    echo $password >> $config_file
    echo $password
}

set_key_password() {
    local keystore_password=$1
    local password_length=80
    local password=$(generate_password $password_length)
    keytool -keypasswd -keystore $keystore_file -storepass $keystore_password -alias $alias_name -keypass $initial_password -new $password
    echo $password >> $config_file
}

initialize_keystore() {
    if [ -f $config_file ]
    then
        rm $config_file
        touch $config_file
    fi

    local keystore_password=$(set_keystore_password)
    set_key_password $keystore_password
}

initialize_keystore


155
2
задан 5 апреля 2018 в 12:04 Источник Поделиться
Комментарии
2 ответа

Это хорошая практика, чтобы иметь скрипт протестирован на shellcheck.net так что у вас есть конвенции.


В разделе инициализации, вы очистка файла хранилища ключей (если он существует). Использование командной консоли-встроенные echo и редирект для достижения этого:

echo "" > $config_file


В password_length может стать глобальное значение, а не local для set_key_passphrase.


Вы можете избежать двойного echo в set_keystore_password С помощью tee:

echo "$password" | tee -a "$config_file"

2
ответ дан 5 апреля 2018 в 02:04 Источник Поделиться

Это уже выглядит довольно хорошо. У меня есть только две вещи, чтобы добавить:


  1. Заменить

    rm $config_file
    touch $config_file

    с : > "$config_file". Это имеет несколько преимуществ по сравнению с hjpotter92 предложение, как описано здесь.


  2. Цитировать все ваши переменные. См https://unix.stackexchange.com/questions/171346/security-implications-of-forgetting-to-quote-a-variable-in-bash-posix-shells/171347#171347 для получения дополнительной информации.

0
ответ дан 5 апреля 2018 в 01:04 Источник Поделиться