Linux 125

[Linux] sshpass - 원격 서버 crontab 설정하기

개요 Bash 쉘 스크립트에서 sshpass를 이용해 원격 서버의 crontab에 스케쥴링 설정을 추가하려고 한다. 방법을 적어둔다 + 기존 항목에서 추가할 항목을 확인하거나 수정하는 등의 작업은 다루지 않는다. 쉘로 crontab 설정 crontab_set_str='crontab에 설정할 내용' (crontab -l 2>/dev/null; echo "$crontab_set_str") | crontab - 동작 방식 1. crontab -l 2>/dev/null : 현재 crontab 항목 확인 2. echo "$crontab_set_str" : 기존 crontab 항목에 추가할 항목 출력. 1번을 함께 고려하면 기존 항목과 같이 출력하는 것이 된다. 3. crontab - : 전달받은 파일, 표준 입력..

Linux 2023.11.24

[Linux] sshpass - 문자열을 원격 서버 파일로 전달하기

개요 Bash 쉘 스크립트에서 변수에 저장되어 있는 문자열을 sshpass를 이용해 원격 서버에 저장하려고 한다. 방법을 적어둔다. 시도 처음에는 다음과 같은 명령어를 사용했다. #!/bin/sh SCRIPT='전달할 문자열' SSH_PASSWD='SSH 비밀번호' SSH_USERNAME='SSH 계정명' IP='원격지 IP' PATH='파일경로' FILE_NAME='파일명' sshpass -p $SSH_PASSWD ssh -p $SSH_PORT -o StrictHostKeyChecking=no -t $SSH_USERNAME@IP 'echo $SCRIPT > $PATH/$FILE_NAME' 하지만 실행했을 때 의도한 대로 동작하지 않고, 원격지 서버에는 빈 파일만 생성되어 있었다. 해결 문자열을 원격지 ..

Linux 2023.11.22

[Linux] newgrp - 재로그인 없이 그룹 적용하기

개요 일반 사용자가 도커를 사용할 수 있도록 그룹을 추가했는데, 해당 설정은 바로 적용되지 않고 재로그인을 해야 적용된다. 스크립트로 환경을 세팅하면서 도커도 사용할 수 있었으면 싶어 재로그인 없이 그룹을 적용하는 방법은 없는지 확인해 봤는데, 방법 자체는 존재했다. 바로 newgrp 명령을 사용하는 방법이다. newgrp 사용자의 GID를 변경하는 명령어로, 사용하면 새로운 쉘을 실행하고 사용자의 그룹을 매개변수 group으로 지정한 그룹으로 변경한다. 기본적으로 newgrp 명령은 /etc/passwd에 지정된 그룹으로 변경한다. newgrp [ - ] [ -l] [ Group ] # 예시 newgrp docker newgrp 명령은 GID가 아니라 그룹의 이름만을 인식하고, 변경된 사항은 해당 세션..

Linux 2023.10.09

[Linux] SSH 접속 시 Server unexpectedly closed network connection 에러

현상 다른 서버실에서 동작하고 있던 서버를 옮겨왔다. 서버 설정을 대충 마무리하고 SSH 접속을 시도했더니 아래와 같은 에러가 발생하면 접속이 되지 않았다. # mobaXterm Server unexpectedly closed network connection # CMD kex_exchange_identification: read: Connection reset 원인과 해결 방법을 적어둔다. 원인 이번에 들여온 서버는 다른 조직에서 관리하고 있던 서버인데, 해당 조직에서는 사용자의 접근을 제한하고 관리하는 수단으로 hosts.allow 파일을 사용하고 있었다. 관련 개념을 아래에 간단히 적어둔다. TCP Wrapper 호스트 기반 네트워킹 ACL 시스템. 리눅스와 같은 운영 처제의 인터넷 프로토콜 서버에..

Linux 2023.10.04

[Shell Script] 스크립트 실행 방법

개요 쉘 스크립트를 실행하는 방법에는 여러 가지가 있는데 이 글에서는 각 방법에 대해 간단히 적어둔다. 실행 권한 부여 후 실행 작성한 스크립트 파일에 실행 권한을 부여하여 실행한다. 참고 : 2021.06.08 - chmod - 파일 권한 설정 # 실행 권한 부여 chmod 775 /path/script.sh ## 또는 chmod +x /path/script.sh # 스크립트 실행 /path/script.sh bash/sh 명령으로 실행 python 명령어에 실행할 코드를 지정하여 python 프로그램을 실행할 수 있는 것처럼 python /path/code/python.py 쉘 스크립트도 bash 또는 sh 명령으로 실행할 수 있다. 이때 스크립트를 호출하는 것과 달리 실행 권한이 없어도 된다. ba..

Linux/Shell Script 2023.08.31

[Linux] tee - 실행 결과를 파일/터미널로 쓰기

개요 어떤 디렉터리에 저장된 파일 목록을 확인할 때는 ls -al 등의 명령을 사용한다. 이 결과를 파일로 저장하고 싶을 때는 파일 리다이렉션을 사용한다. COMMAND > FILE # 예시 ll /var/ > tee ll_var_20230813.txt 이 경우 표준 출력을 파일로 리다이렉션 했기 때문에 터미널로 실행 결과를 확인할 수 없다. 실행 결과를 확인하기 위해서는 저장한 파일을 읽어야 한다. 만약 어떤 명령어의 실행 결과를 터미널로 확인하면서 파일로 저장하고 싶다면 tee 명령을 사용할 수 있다. tee 표준 입력을 읽어 표준 출력과 파일에 쓰는 명령어 tee [OPTION]... [FILE]... 보통 어떤 명령어와 tee 명령어를 파이프로 연결하여 명령어의 실행 결과를 특정 파일에 기록함과 ..

Linux 2023.08.30

[Linux] 디렉터리 내 모든 파일/디렉터리 권한 확인

개요 특정 디렉터리 내 모든 하위 경로에 대한 읽기/쓰기/실행 권한을 확인하고자 한다. 명령어를 찾아보자. ls - find 명령 find 명령으로 특정 경로에 존재하는 파일과 디렉터리를 찾아 ls 명령의 인수로 전달한다. 하위 디렉터리만 조회 ls -dl `find /PATH -type d` # -d, --directory : 디렉터리만 나열 # 예시 ls -dl `find /var -type d` 파일만 조회 ls -dl `find /PATH -type F` # -d, --directory : 디렉터리만 나열 # 예시 ls -dl `find /var -type f` find -ls 옵션 사용 find 명령의 -ls 옵션은 ls -dils 형식으로 파일 목록을 출력한다. 하위 디렉터리만 조회 find ..

Linux 2023.08.14

[Linux] sed - 파일의 특정 범위 출력

개요 crontab 설정 등 파일의 행 수가 너무 길어서 특정 행 범위만큼만 출력하여 확인하고자 한다. 방법을 정리해 둔다. 기존 sed 명령어 사용법을 정리한 글은 아래와 같다. 2021.08.24 - sed - 문자열 치환 2021.07.26 - sed - 쉘에서 파일 내용 일부 삭제 명령어 파일이나 표준 입력의 특정 행 범위를 출력할 때는 -n 옵션에 p 패턴을 사용한다. 패턴 p는 현재 패턴 공간을 인쇄하라는 명령이다. sed -n ', p' # 예시 man sed | sed -n '10, 20p' 만약 특정 행부터 마지막 행까지 출력하고 싶을 때는 아래와 같이 사용한다. sed -n ', \$p' # 예시 man sed | sed -n '200, \$p' 참고 문서 https://jhnyang...

Linux 2023.08.04

[Linux] SSH 접속 시 WARNING: UNPROTECTED PRIVATE KEY FILE! 에러

현상 pem 키를 이용해 서버에 SSH 접속 시도 시 아래와 같은 에러가 발생하면서 연결에 실패했다. 해결해보자. 원인 Public key로 SSH 인증을 시도하면 SSH Client는 Private Key가 위치한 디렉터리와 Private Key 파일의 권한을 확인한다. SSH Private Key 파일은 민감한 정보이기 때문에 소유자 이외의 다른 사용자가 읽을 수 있으면 위에 같은 UNPROTECTED PRIVATE KEY FILE! 에러가 발생하면서 동작하지 않는다. 해결 파일을 소유자만 읽을 수 있도록 group, other 권한을 제거하면 된다. 600 또는 400 정도로 설정하면 된다. cd ~/.ssh chmod 600 *.pem chmod 400 *.pem 권한을 정리한 후에 SSH 접속을..

Linux 2023.08.03

[Linux] rsync - 특정 디렉터리 제외하고 복사

개요 데이터 복사를 해야 하는데 저장 공간이 조금 부족해서 불필요한 경로는 제외하고 복사하려고 한다. 방법을 적어둔다. rsync rsync 명령은 cp와 비슷한 파일 복사 도구로, 서로 다른 두 개의 시스템 간에 파일과 디렉터리를 동기화하기 위해 사용한다. 즉, 파일의 타임스탬프와 크기를 검사하여 변경이 발생한 파일만 복사한다. 또 로컬 복사도 할 수 있지만 SSH를 통한 원격 복사도 할 수 있다. 즉, scp처럼 사용할 수도 있다. rsync [OPTION...] SRC... [DEST] 소스 경로만 지정하는 경우, 파일을 나열한다. 특정 디렉터리 제외하고 복사 복사에서 특정 디렉터리를 제외하고 싶을 때는 다음과 같이 사용한다. rsync -avz --exclude SRC DEST # -a : 아카이..

Linux 2023.07.26