분류 전체보기 1173

proxy: Unsupported authorisation protocol

원격 서버에서 크롬 브라우저와 같이 GUI 프로그램을 실행했을 때 아래와 같은 에러를 만날 수 있다. proxy: Unsupported authorisation protocol 프로토콜 사용이 안 된다는 말인데, 기본적으로 원격 GUI 실행은 X Forwarding, 즉 실행에 필요한 프로토콜이 SSH를 통해 포워딩된다. 확인할 다른 부분도 있겠지만 /etc/ssh/sshd_config 파일부터 확인해보도록 한다. 아래의 설정이 no로 되어있지는 않은지, X11Forwarding yes 요청한 사용자가 ssh를 사용하도록 허용되어 있는지 확인하도록 한다. 간단한 배경 지식 Linux에서는 X11이라는 디스플레이 서버를 이용하여 GUI(Graphical User Interface) 환경을 그린다. 크롬 브..

Linux 2021.07.30

ssh - 특정 사용자 접속 제한

SSH는 기본적으로 모든 사용자가 사용할 수 있다. 하지만 필요하다면 특정 사용자나 그룹만 접속할 수 있도록 허용하거나 반대로 접속을 제한할 수 있다. 설정 파일의 경로는 일반적으로 아래와 같다. /etc/ssh/sshd_config # 편집 vim /etc/ssh/sshd_config 시스템 설정 파일이므로 편집에는 root 권한이 필요하다. AllowUsers 접속할 사용자를 지정한다. 이 경우 다른 사용자는 ssh 접속이 불가능하게 된다. AllowUsers # 예시 AllowUsers test_user 공백으로 사용자를 구분하여 여러 사용자를 한꺼번에 허용할 수 있다. 또한 사용자가 특정 호스트에서만 접속할 수 있도록 아래와 같이 ip를 제한할 수도 있다. AllowUsers @ # 예시 Allo..

Linux 2021.07.29

포드 상태와 readinessProbe

포드 상태 1. Pending 포드가 처음 생성된 상태다. 포드 배치 여부를 파악하며, 쿠버네티스가 포드를 배치할 노드를 찾지 못하면 Pending 상태를 유지한다. 아래 명령으로 Pending 상태가 유지되는 원인을 확인할 수 있다. kubectl describe pod 2. ContainerCreating 포드가 스케쥴링되어서 이미지를 pull하고, 컨테이너를 시작하는 상태다. 3. Running 포드 내 모든 컨테이너를 시작하여 포드가 실행 중인 상태다. 프로그램이 완료되거나 종료될 때까지 상태를 유지한다. Pod 상태는 아래와 같이 get pods 명령으로 확인할 수 있다. kubectl get pods Pod Conditions TRUE/FALSE 값으로 포드의 상태를 알려주는 배열 Type S..

Multi-Container Pods

개요 큰 단일 애플리케이션을 마이크로서비스라는 하위 요소로 분리하는 개념은 독립적이고, 작고, 다시 사용할 수 있는 코드 집합을 개발하고 배포하는 것을 가능하게 한다. 즉, 전체 애플리케이션을 수정하는 대신 필요에 따라 각 서비스를 수정하고, 축소/확대하는 것이 가능하다. 다중 컨테이너 포드 온전한 서비스를 동작시키기 위해 여러 기능이 함께 동작해야 하는 경우, 다중 컨테이너 포드를 이용할 수 있다. 포드 내의 컨테이너는 수명주기가 같고, 같은 네트워크에 존재하기 때문에 서로를 localhost로 참조할 수 있으며, 같은 볼륨에 접근할 수 있기 때문이다. 포드 정의 파일의 spec 섹션에서 containers 섹션이 배열인 이유가 바로, 멀티컨테이너 포드를 사용할 수 있게끔 하기 위해서다. apiVers..

sed - 쉘에서 파일 내용 일부 삭제

sed; stream editor 문자열을 필터링하고 변환하는 스트림 편집기 디스크 사용량이 너무 많아서 확인해보니, 로그 파일 하나가 20GB, 30GB가 넘어가고 있었다. 확인해보니 일정 시간 간격으로 로그 파일을 생성하는 게 아니라, 하나의 파일에 로그를 계속 쌓고 있는 상황이다. 정리는 하되 최신 파일 내용을 남겨두어야 하는데 용량이 너무 커서 에디터로 열리지도 않는다. ……도대체 누가 왜 이렇게 한 걸까? 아무튼 그게 급한 게 아니고, 에디터로 편집하는 게 아니라 명령어로 파일 처음부터 어디까지만 삭제할 수는 없을까? 다급하게 찾아보았더니 다행히 sed 명령을 사용하는 방법이 있었다. sed -i '1, 10000d' # -i : 출력 결과를 원본 파일에 저장 sed 명령은 기본적으로 원본 파일..

Linux 2021.07.26

du - 디렉터리 용량 확인

du; Disk Usage 지정된 디렉터리의 디스크 사용량 표시 디스크 정리할 때 디스크 사용량이 많은 디렉터리와 파일을 확인할 때 사용한다. du [OPTION] [DIRECTORY|FILE] # 예시 du -sh ./* # -s : summarize. 디렉터리 내의 모든 파일과 서브 디렉터리의 용량을 합쳐서 표시 # -h : human-readable. 사람이 읽기 쉬운 단위로 표시 보통 현재 디렉터리의 하위 디렉터리 용량을 확인하면서 어느 부분이 원인인지 찾아들어가는 편이다. 모든 디렉터리를 지정하면 출력도 길고 시간도 오래 걸릴 수 있어서 추천하지 않는다. 용량 기준으로 내림차순 정렬 du -sh /PATH | sort -nr

Linux 2021.07.25

다른 두 레포지터리 병합

살다 보면 같은 프로젝트에 대해 뭔가 문제가 생겨서, 아니면 단순 이동 목적으로 새로 레포지터리를 파는 일이 발생하기 마련이다. 하지만 추후 히스토리를 관리할 때에 보면, 같은 프로젝트지만 아예 별개의 레포지터리로 저장되어 있어 병합해야 하는 경우가 있을 수 있다. 그럴 때 아래의 절차 따르면 별개의 저장소를 커밋 히스토리까지 병합할 수 있다. 방법 1. 로컬 상에서 작업을 진행할 프로젝트로 이동한다. 2. 병합할 원격 저장소 추가 git remote add # 예시 git remote add tomerge https://github.com/remote/url.git 3. 원격 저장소에 저장된 커밋 기록 fetch git fetch # 예시 git fetch tomerge 병합할 원격 저장소의 커밋 로그..

Git | GitLab 2021.07.24

환경변수 PATH 추가

PATH Shell에서 입력받은 명령을 실행할 때 실행할 프로그램을 찾는 경로 기본 명령어가 저장된 디렉터리는 자동으로 등록되지만, 별도의 경로에 프로그램을 설치한 뒤 명령어를 사용하기 위해서는 PATH에 프로그램 실행 경로를 추가해주어야 한다. PATH 정보 확인 echo $PATH 먼저 등록된 경로의 우선순위가 높다. 예로 들어 python 실행 경로가 아래와 같을 경우, /usr/local/bin /home/ec2-user/.local/bin python 명령 실행 시 /usr/local/bin 아래의 python이 실행된다. 또한 모든 사용자에 대해 공통적으로 적용되는 기본 PATH 관련 설정은 /etc/profile(또는 /etc/bashrc) 파일에서 확인할 수 있다. PATH 추가 등록(임시..

Linux 2021.07.23

Alias 등록

Alias 복잡한 명령어 또는 여러 옵션을 사용하는 명령어에 별칭을 주어 간단한 형태로 간소화하여 사용할 수 있는 기능을 가진 명령어 Alias 목록 확인 현재 사용 중인 쉘에 등록된 alias를 확인할 수 있다. alias 몇 가지 명령어는 편의를 위해 자동으로 등록된다. Alias 등록 (일회성) 현재 사용 중인 쉘에 alias를 등록한다. alias = free -h 명령을 free로 별칭을 주면, free를 입력했을 때 free -h를 입력한 것과 동일한 결과를 얻을 수 있다. 다만 alias 명령은 현재 쉘에만 적용되기 때문에 다른 쉘에서나 재접속했을 때는 사용할 수 없다. 즉, 일회성이다. Alias 등록 (자동) 등록한 단축 명령어를 자주 사용한다면, 쉘이 실행될 때 자동으로 alias에 등..

Linux 2021.07.22

Node Affinity

Node Affinity Pod에 특정 노트에서 호스팅하도록 한다. Node Selector가 제공하지 못하는 OR, Not 등의 고급 기능을 제공한다. Node Selector와 마찬가지로 node에 레이블이 설정되어 있어야 한다. 설정 방법 포드 정의 파일에 affinity 속성을 추가한다. apiVersion: v1 Kind: Pod metadata: myapp-pod spec: containers: - name: data-processor image: data-processor affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExcution: nodeSelectorTerms: - matchExpressions: - key: size op..