랜덤 암호를 생성하는 여러가지 방법

1. OpenSSL을 이용한 랜덤 암호 생성

openssl rand -base64 16
  • 16바이트 길이의 랜덤 데이터를 Base64로 인코딩하여 출력함.
  • 특수 문자 없이 알파벳과 숫자로 구성됨.

2. pwgen 패키지 사용 (설치 필요)

brew install pwgen  # 먼저 설치
pwgen -s 16 1
  • -s 옵션은 강력한 암호를 생성함.
  • 16은 길이, 1은 개수.

3. LC_ALL=C tr을 이용한 무작위 문자열 생성

LC_ALL=C tr -dc 'A-Za-z0-9!@#$%^&*()-_+=' < /dev/urandom | head -c 16
  • /dev/urandom에서 무작위 데이터를 가져와 원하는 문자만 필터링함.
  • head -c 16으로 16글자만 출력.

4. uuidgen을 활용한 암호 생성

uuidgen | tr -d '-' | head -c 16
  • uuidgen으로 UUID 생성 후 하이픈을 제거하고 앞에서 16자만 출력함.

[Database] auto_increment 포함 Table 초기화

MySQL 예시

MySQL에서 데이터를 삭제하고 AUTO_INCREMENT 값을 초기화하려면 아래와 같이 실행합니다:

-- 테이블의 모든 데이터를 삭제
TRUNCATE TABLE table_name;

설명:

  • TRUNCATE TABLE은 테이블의 모든 데이터를 삭제하고, 자동 증가 값을 초기화합니다.
  • 데이터만 삭제하고 싶다면 DELETE FROM table_name;을 사용할 수 있지만, 이 경우 AUTO_INCREMENT 값은 초기화되지 않습니다.

PostgreSQL 예시

PostgreSQL에서는 데이터를 삭제하고, 시퀀스를 초기화해야 합니다:

-- 테이블의 모든 데이터를 삭제
TRUNCATE TABLE table_name RESTART IDENTITY;

설명:

  • TRUNCATE TABLE … RESTART IDENTITY를 사용하면 테이블 데이터를 삭제하고 자동 증가 시퀀스 값도 초기화됩니다.

MongoDB 예시

MongoDB에서는 자동 증가 ID를 기본적으로 지원하지 않지만, 데이터를 삭제하려면 아래 명령을 사용할 수 있습니다:

// 모든 문서 삭제
db.collection_name.deleteMany({});

참고:

  • MongoDB에서 ID는 ObjectId로 자동 생성되며, 별도의 AUTO_INCREMENT 값은 없습니다.
  • 직접 구현한 자동 증가 필드가 있다면 해당 값을 수동으로 초기화해야 합니다.

[hardhat] 기본 계정

https://hardhat.org/hardhat-network/docs/reference#initial-state 에서 찾을 수 있다. 다음 address 들이다

  • 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
  • 0x70997970C51812dc3A010C7d01b50e0d17dc79C8
  • 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC
  • 0x90F79bf6EB2c4f870365E785982E1f101E93b906
  • 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65
  • 0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc
  • 0x976EA74026E726554dB657fA54763abd0C3a0aa9
  • 0x14dC79964da2C08b23698B3D3cc7Ca32193d9955
  • 0x23618e81E3f5cdF7f54C3d65f7FBc0aBf5B21E8f
  • 0xa0Ee7A142d267C1f36714E4a8F75612F20a79720
  • 0xBcd4042DE499D14e55001CcbB24a551F3b954096
  • 0x71bE63f3384f5fb98995898A86B02Fb2426c5788
  • 0xFABB0ac9d68B0B445fB7357272Ff202C5651694a
  • 0x1CBd3b2770909D4e10f157cABC84C7264073C9Ec
  • 0xdF3e18d64BC6A983f673Ab319CCaE4f1a57C7097
  • 0xcd3B766CCDd6AE721141F452C550Ca635964ce71
  • 0x2546BcD3c84621e976D8185a91A922aE77ECEc30
  • 0xbDA5747bFD65F08deb54cb465eB87D40e51B197E
  • 0xdD2FD4581271e230360230F9337D5c0430Bf44C0
  • 0x8626f6940E2eb28930eFb4CeF49B2d1F2C9C1199

사용하지 않도록 한다.

[MacOS] 파인더에서 숨김 파일 보기

파인더에서 다음 단축키를 누른다.
Command (⌘) + Shift (⇧) + . (마침표)

영구적으로 적용하고 싶다면 다음을 실행한다.

defaults write com.apple.finder AppleShowAllFiles -bool true
killall Finder

다시 되돌리고 싶다면 다음을 실행한다.

defaults write com.apple.finder AppleShowAllFiles -bool false
killall Finder

[Ethereum] 우분투에 node 설치

execution layer client로 geth를, consensus layer client로 Prysm을 사용한다.

geth 설치

sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt update
sudo apt install -y geth

확인

geth version

부팅 시 자동 실행

sudo vi /etc/systemd/system/geth.service

[Unit]
Description=Ethereum Geth Node
After=network.target

[Service]
Type=simple
User=dasomoli
ExecStart=/usr/bin/geth --mainnet --syncmode "snap" --datadir "/home/dasomoli/geth/data" --http --http.api web3,eth,txpool --http.addr 0.0.0.0
Restart=always
RestartSec=5
LimitNOFILE=8192

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start geth
sudo systemctl enable geth
sudo systemctl status geth

위에서는 “snap” 방식을 사용했다. sync mode로 “full”도 가능.

도메인을 연결한다면 설정에 다음 설정을 포함해야 한다.

	--http.corsdomain "*" \
	--http.vhosts "*"

IPC로 geth console 연결

geth attach ipc:/home/dasomoli/geth/data/geth.ipc

로그 확인

journalctl -u geth -f

Prysm 설치

mkdir prysm
cd prysm/
sudo apt update
sudo apt install -y wget
wget <https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh>
chmod +x prysm.sh

부팅 시 자동 실행

sudo vi /etc/systemd/system/prysm-beacon.service

[Unit]
Description=Prysm Beacon Chain Client
After=network.target

[Service]
Type=simple
User=dasomoli
ExecStart=/home/dasomoli/prysm/prysm.sh beacon-chain \
    --execution-endpoint=http://localhost:8551 \
    --datadir=/home/dasomoli/prysm/data \
    --jwt-secret=/home/dasomoli/geth/data/geth/jwtsecret \
    --accept-terms-of-use \
    --mainnet \
    --checkpoint-sync-url=https://beaconstate.info --genesis-beacon-api-url=https://beaconstate.info
Restart=always
RestartSec=5
LimitNOFILE=8192

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start prysm-beacon
sudo systemctl enable prysm-beacon
sudo systemctl status prysm-beacon

로그 확인

journalctl -u prysm-beacon -f

[Ubuntu] 자동 업데이트 설정

Unattended Upgrade 설치

sudo apt update
sudo apt install unattended-upgrades

자동 업데이트 활성화

sudo dpkg-reconfigure --priority=low unattended-upgrades

설정 파일 편집: sudo vi /etc/apt/apt.conf.d/50unattended-upgrades

Unattended-Upgrade::Allowed-Origins {
    "Ubuntu stable";
    "Ubuntu ${distro_codename}-security";
    "Ubuntu ${distro_codename}-updates";
};

업데이트 주기 설정: sudo vi /etc/apt/apt.conf.d/20auto-upgrades

다음은 패키지 목록 업데이트 간격(1 = 매일), 자동 업데이트 실행 간격 (1 = 매일)

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

로그는 다음에서 확인 가능

less /var/log/unattended-upgrades/unattended-upgrades.log

자동 재부팅 설정: sudo vi /etc/apt/apt.conf.d/50unattended-upgrades

다음은 새벽 2시에 자동 리부팅.

Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "02:00";

[apt] GPG error: https://cli.github.com/packages stable InRelease 에러

apt-get update를 했는데 다음과 같은 에러가 난다.

W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://cli.github.com/packages stable InRelease: 다음 서명이 올바르지 않습니다: EXPKEYSIG 23F3D4EA75716059 GitHub CLI <opensource+cli@github.com>
W: https://cli.github.com/packages/dists/stable/InRelease 파일을 받는데 실패했습니다  다음 서명이 올바르지 않습니다: EXPKEYSIG 23F3D4EA75716059 GitHub CLI <opensource+cli@github.com>
W: Some index files failed to download. They have been ignored, or old ones used instead.

기존 서명 키 삭제

sudo rm /usr/share/keyrings/githubcli-archive-keyring.gpg

최신 키 다운로드 및 설치

curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /usr/share/keyrings/githubcli-archive-keyring.gpg > /dev/null
sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg

/etc/apt/sources.list.d/github-cli.list 파일 안에는 이렇게 되어 있다.

deb [arch=amd64 signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main

[git] send-pack: unexpected disconnect while reading sideband packet 에러 발생 시

git push 를 했을 때, 내용이 많은 경우 다음과 같은 에러가 날 때가 있다.

error: RPC failed; HTTP 400 curl 22 The requested URL returned error: 400
send-pack: unexpected disconnect while reading sideband packet

이 경우, http.postBuffer를 다음과 같이 늘려준다. 아래는 150MB.

git config --global http.postBuffer 157286400

참고: https://stackoverflow.com/questions/66366582/github-unexpected-disconnect-while-reading-sideband-packet

[ethers.js] HD wallet으로 주소 파생

12개의 seed wallet이 있는 경우, 다음과 같이 파생 주소를 확인할 수 있다.

$ npm install ethers@^5.0.0

const { ethers } = require('ethers');

// 12개의 시드 단어를 여기에 입력하세요
const mnemonic = "Your seed 12 words here";

// HD Node 생성
const hdNode = ethers.utils.HDNode.fromMnemonic(mnemonic);

// 파생 경로 설정
const derivationPath = "m/44'/60'/0'/0/"; // "m/44'/905956'/0'/0/" 와 같이 사용도 가능

// 파생 주소 생성 및 출력 함수
function generateAddresses(count) {
    const addresses = [];
    for (let i = 0; i < count; i++) {
        const walletNode = hdNode.derivePath(derivationPath + i);
        console.log(i, walletNode.address);
        addresses.push({
            index: i,
            address: walletNode.address,
        });
    }
    return addresses;
}

// 원하는 주소 개수를 설정하세요
const numAddresses = 85535;
const addresses = generateAddresses(numAddresses);