레이블이 kerberos인 게시물을 표시합니다. 모든 게시물 표시
레이블이 kerberos인 게시물을 표시합니다. 모든 게시물 표시

kerberos keychain 등록

# 커버로스 mac keychain 등록하기, 암호변경되면 keychain 에서 변경
# Usage: add-generic-password [-a account] [-s service] [-w password] [options...] [-A|-T appPath] [keychain]
# -l  Specify label (if omitted, service name is used as default label)
# -c  Specify item creator (optional four-character code)
security add-generic-password -a "ysoftman" -l "lemon.com (ysoftman)" -s "lemon.com" -w 'password123' -c "aapl" -T "/usr/bin/kinit"

kerberos 패스워드 입력 문제

# mac + iterm2 + zsh(prezto) 환경에서
# 터미널을 오래동안 열어두고 사용하다 보면 어느순간 부터
# kerberos 패스워드 입력이 안되는 경우가 발생한다.
ysoftman@ysoftmanMac ~/workspace/❯ kinit ysoftman
ysoftman@ysoftman-company.com's password:
kinit: failed to read password
ysoftman@ysoftmanMac ~/workspace/❯ mypassword
zsh: command not found: mypassword

# stdin 입력을 테스트 해보면 이상은 없어 보인다.
ysoftman@ysoftmanMac ~/workspace/❯ read a
ysoftman input test
ysoftman@ysoftmanMac ~/workspace/❯ echo $a
ysoftman input test

# iterm 은 닫지 않고 bash 또는 zsh 쉘을 시작해도 같은 문제가 발생하고
# iterm 로 새 터미널을 시작하면 패스워드가 입력된다.
# mac 기본 kint
which kinit
/usr/bin/kinit

# 버전을 보면 오래 된것 같아
kinit --version
kinit (Heimdal 1.5.1apple1)
Copyright 1995-2011 Kungliga Tekniska Högskolan
Send bug-reports to heimdal-bugs@h5l.org

# 새 버전(1.18.2)을 설치 해봤다.
brew install krb5

# 새 버전의 kinit 을 사용하면 패스워드 입력이 잘 된다.
/usr/local/opt/krb5/bin/kinit

# 원래 맥에서 기본 제공하는 /usr/bin/ 의 curl,kinit 같은 프로그램은
# brew link --force 로도 /usr/local/bin/ 에 링크 생성을 못해
# PATH 환경변수에 /usr/local/opt/ 를 추가해야 한다
# export PATH=/usr/local/opt/krb5/bin:$PATH
# 하지만 다음과 같이 /usr/local/opt/krb5/bin/kinit 가 우선하는 상황에서
which -a kinit
/usr/local/opt/krb5/bin/kinit
/usr/bin/kinit

# /usr/local/opt/krb5/bin/kinit 를 사용하면 ssh 접속시 암호를 물어보는 등의 문제가 발생했다.
# 이런 문제로 /usr/local/opt/krb5/bin/kdestroy 하고 원래의 /usr/bin/kinit(klist,kdestroy) 를 사용해야 했다.

안드로이드폰 termux 사용

# 안드로이드폰으로 터미널 환경을 구성해 보자
# 준비
# 키보드(USB) 를 OTG 를 통해 폰에 연결한다.
# 안드폰에 termux 앱을 설치하자.
# termux는 aarch64(ARM 용으로 포팅한 64bit arch linux) 기반으로
# 패키지 관리자로 apt 또는 pkg(apt를 래핑)를 사용한다.
https://play.google.com/store/apps/details?id=com.termux&hl=en

# 참고로 키보드 사용시 단축키는 윈도우(리눅스)를 생각하면 된다.
alt + tab : 앱(전환)
alt + d : chrome 주소표시줄 포커싱
등등..

# termux 실행 후 필요한 패키지 설치
pkg update && pkg upgrade
pkg install -y zsh python2 python vim rust golang ripgrep curl git tig fzf tmux cmake ctags lua53 fortune cowsay figlet cmatrix golang ruby openssh libandroid-support man lsd dnsutils
pkg install -y vim-python
gem install lolcat

# 기본 zsh 로 변경
chsh -s zsh

# termux 스샷~


# /etc 에서 설정하는 파일들(krb5.conf, resolve.conf ... 등)은 ../usr/etc/ 에 위치한다.
# 만약 ../usr/etc/krb5.conf 설정 후 kinit 시 다음과 같은 에러가 발생한다면
kinit : Cannot contact any KDC for realm 'ysoftman.com' ...

# 각 서버의 디폴트 포트는 다음과 같고 포트까지 명시해보자
kdc = kauth.ysoftman.com:88
admin_server = kadmin.ysoftman.com:749
kpasswd_server = kadmin.ysoftman.com:464 # on UDP

# oh-my-zsh 를 사용하는 경우 powerline 폰트 하나
를 ~/.termux/font.ttf 파일로 생성해야 한다.
cp -v fonts/Hack/Hack-Regular.ttf ~/.termux/font.ttf

# known issue
- 아직 한국어를 지원하지 않고 오직 영어만 된다. 이슈를 줄이기 위해서라는데.. 흠. https://github.com/termux/termux-packages/issues/2796#issuecomment-424589888
- oh-my-zsh 는 동작하지만, prezto 는 zsh 시작시 모듈 로딩을 못하는 문제가 있다.
- vim plugin 중 youcomplteme 는 python 이 포함된 vim 을 사용해야 하는데
apt 로 설치되는 vim 은 python 으로 빌드된 것이 아니라 별도로 vim-python 도 설치해야 한다.

vscode 원격 개발

# vscode 1.35 부터 remote develop extension 을 설치해
# ssh, docker container, wsl 의 원격 개발 환경을 이용 할 수 있다.
# 참고로 아이콘도 좀 심플하게(예쁘게) 변경됐다.~ㅎ

# 원격 접속은 원격 서버의 ${HOME}/.vscode-server 프로그램을 설치하고 vscode-server 가 실행돼 원격으로 접속하게 된다.
# vscode-server 는 wget 로 다운로드를 하게 되는데
# 참고로 사내망이라면 http_proxy 환경 변수를 설정 해줘야 한다.

# docker container 가 이미 떠있는 경우
remote-containers : attach to running container
-> 현재 떠있는 컨테이너 선택 -> 새 vscode 창이 오픈

# 새 vscode 가 생성되면 컨테이너의 소스 파일을 열어 볼 수 있고,
# vscode 터미널에서 빌드 커맨드 등을 실행할 수 있는 상태가 된다.

# remote ssh 는 ~/.ssh/config 와 ~/.ssh/authorized_keys 사용한다.
# kerberos 인증 환경에서도 접속할 수 있다.
# settings.json 설정에 다음을 추가하면 로그인 터미널 상태를 표시해준다.
"remote.SSH.showLoginTerminal": true

# 로그인 터미널에 다음과 같은 에러가 발생하는 경우
channel 2: open failed: administratively prohibited: open failed

# 대상 호스트 서버의 /etc/ssh/sshd_config 에 tcp 포워딩 가능하도록 설정한다.
AllowTcpForwarding yes

# 그리고 sshd 서버를 재시작한다.
sudo systemctl restart sshd

# 기타 접속 이슈 해결방법 참고
https://code.visualstudio.com/docs/remote/troubleshooting#_troubleshooting-hanging-or-failing-connections

# remote develop 기능은 vscode live share(로컬 코드를 공유)와 비슷하지만
# 원격 장비의 코드를 vscode 로 볼 수 있어 좋은것 같다.

Linux ssh 로 다중명령 실행하기

# 우선 kerberos 환경 구성이 되어 있어야 한다.
# kerberos 서버 설정
vi /etc/krb5.conf
[libdefaults]
default_realm = ysoftman.com
[realms]
ysoftman.com = {
  kdc = kauth.ysoftman.com
  admin_server = kadmin.ysoftman.com
  kpasswd_server = kadmin.ysoftman.com
}

# 만약 다음과 같은 에러가 발생한다면
kinit : Cannot contact any KDC for realm 'ysoftman.com' ...

# 각 서버의 디폴트 포트는 다음과 같고 포트까지 명시해보자
kdc = kauth.ysoftman.com:88
admin_server = kadmin.ysoftman.com:749
kpasswd_server = kadmin.ysoftman.com:464 # on UDP


# 디폴트 경로 대신 환경변수로 krb5.conf 경로를 변경할 수도 있다.
KRB5_CONFIG="${HOME}/krb5.conf"

# ssh 기본 설정
vi /etc/ssh/ssh_config
Host *
HashKnownHosts yes # ~/.ssh/known_hosts 에 접속한 호스트들 hash로 기록
GSSAPIAuthentication yes # GSSAPI 인증  사용

# 이제 ssh 접속이 암호를 물어보는 과정을 스킵하기 위해
# 다음과 같이 해당 아이디에 암호를 입력하고 티켓을 획득한다.
kinit ysoftman

# 티켓 획득 후 티켓 정보 확인
klist

# ssh 로 다중 명령을 실행하려면 "" 사이에 명령을 ; 으로 구분하여 사용한다.
# 형식은 다음과 같다.
ssh -l ysoftman servername "command1; command2; command3;"

# 예를 들어 /home1 로 이동해서 현재 디렉토리를 파악하고 파일 리스트 출력하려면
ssh -l ysoftman servername "cd /home1/; pwd; ls -ahl;"


#####


# tar 로 압축한 파일 ssh 로 전송하기
tar cvzf - ./testdir | ssh ysoftman@ysoftman.server.test "dd of=/home/ysoftman/ysoftman.tar.gz"


#####


# 테스트를 위한 임시 서버 리스트 파일 생성
echo 'server-lemon
server-apple
server-orange' > temp_server_list.txt

# 여러 호스트에 ssh 명령 실행
# stdin(< temp_server_list.txt) 파이프라인을 사용중 ssh 로 원격 명령실
while read server
do
    echo ${server}
    # stdin("hostname" 명령) 을 사용하면 기존 stdin(< temp_server_list.txt)이 끝나게 되어 루프가 끝나게 된다.
    # < /dev/null 로 stdin 을 사용하지 않도록 한다.
    # -o "StrictHostKeyChecking no" 접속시 호스트 체크 안하기
    out=`ssh -o "StrictHostKeyChecking no" ysoftman@server "hostname" < /dev/null`
    echo ${out}
done < temp_server_list.txt