최근 서버에 문제가 발생해서 ssh 접속을 하려고 했는데,
그만... 글쎄... 패스워드가 기억이 나지를 않는 것이다.
한창 서버 작업을 할 때에는 그냥 쉭쉭~ 입력해서 잘 사용했었는데...
1달 정도 지난 후에... 나의 머리와, 나의 손이 기억을 잊은 것이다.
그런데, 이러한 패스워드를 어디에 적어놓기에는 너무 찜찜해서... 뭔가 방법을 찾고 있던 와중에,
얼마 전에 어떤 밋업에 갔다가 알게된 재미있는 솔루션이 하나 있다 !!!
"pass"라는 이름의 오픈소스 프로젝트인데...
이름이 너무 평범하여 검색엔진으로 검색하기 너무 어렵다.
- https://www.passwordstore.org/
0. 설치 환경
- 필자가 이후 과정을 진행한 환경은 다음과 같다.
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.3 LTS
Release: 18.04
Codename: bionic
1. 설치하기
- Ubuntu에서는 이미 패키지로 제공해주고 있었다.
$ sudo apt-get install pass
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
gnupg2 libice6 libqrencode3 libsm6 libxmu6 libxt6 qrencode tree x11-common xclip
Suggested packages:
python libxml-simple-perl ruby
The following NEW packages will be installed:
gnupg2 libice6 libqrencode3 libsm6 libxmu6 libxt6 pass qrencode tree x11-common xclip
0 upgraded, 11 newly installed, 0 to remove and 0 not upgraded.
Need to get 428 kB of archives.
After this operation, 1,575 kB of additional disk space will be used.
Do you want to continue? [Y/n]
2. GPG Key 생성
- 암호화를 위해 사용될 GPG key를 생성해놓자
$ gpg --gen-key
gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Note: Use "gpg --full-generate-key" for a full featured key generation dialog.
GnuPG needs to construct a user ID to identify your key.
Real name: whatwant
Email address: whatwant@gmail.com
You selected this USER-ID:
"whatwant <whatwant@gmail.com>"
Change (N)ame, (E)mail, or (O)kay/(Q)uit? O
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: /home/chani/.gnupg/trustdb.gpg: trustdb created
gpg: key 651Axxxx marked as ultimately trusted
gpg: directory '/home/chani/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/chani/.gnupg/openpgp-revocs.d/465Exxxx.rev'
public and secret key created and signed.
pub rsa3072 2020-01-04 [SC] [expires: 2022-01-03]
465Exxxx
uid whatwant <whatwant@gmail.com>
sub rsa3072 2020-01-04 [E] [expires: 2022-01-03]
3. pass 초기화
- 위에서 입력했던 이메일 주소를 이용해서 초기화 하면 된다
$ pass init whatwant@gmail.com
mkdir: created directory '/home/chani/.password-store/'
Password store initialized for whatwant@gmail.com
4. git 설정
- 특이하게도 pass는 도구 차원에서 git을 지원한다.
$ pass git init
Initialized empty Git repository in /home/chani/.password-store/.git/
[master (root-commit) b3b0704] Add current contents of password store.
1 file changed, 1 insertion(+)
create mode 100644 .gpg-id
[master 6e3509f] Configure git repository for gpg file diff.
1 file changed, 1 insertion(+)
create mode 100644 .gitattributes
- 선택이긴하지만, 이왕이면 백업을 위해서라도 외부에 git repo를 하나 만들어 놓자.
- 그리고 그 git repo 주소를 등록해놓자.
$ pass git remote add origin git@github.com:whatwant/pass.git
5. password 입력하기
- 샘플로 하나 입력해보자
$ pass insert email/xxxx@naver.com
Enter password for email/xxxx@naver.com:
Retype password for email/xxxx@naver.com:
[master 4e6xxxx] Add given password for email/xxxx@naver.com to store.
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 email/xxxx@naver.com.gpg
- commit도 같이 작성된 것을 볼 수 있다.
6. git 저장하기
- 원격 git 저장소에 보내보자
$ pass git push -u origin master
Counting objects: 10, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (10/10), 1.25 KiB | 426.00 KiB/s, done.
Total 10 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), done.
To github.com:whatwant/pass.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
7. password 확인하기
- 입력된 password를 확인하고 싶은 경우
- 화면에 노출되는 것이 싫은 경우, 또는 다른 곳에 붙여넣기를 하고 싶은 경우에는 "-c" 옵션을 사용하면 된다고 하지만...
CUI 환경에서는 안되는 것으로 보인다. (GUI 환경에서는 되는 듯)
$ pass
Password Store
└── email
└── xxxx@naver.com
$ pass email/xxxx@naver.com
xxxxxxxx
$ pass -c email/xxxx@naver.com
Error: Can't open display: (null)
Error: Could not copy data to the clipboard
8. Reference
- https://git.zx2c4.com/password-store/about/#SIMPLE%20EXAMPLES
- https://boxnwhis.kr/2017/04/27/how_to_manage_passwords_for_your_team.html
여러 PC에서 사용하기 위해서는 GPG Key를 관리할 방법도 별도로 찾아야할 듯 하지만,
password를 관리할 재미있는 방법을 찾은 듯 하여서 재미있다.