일반적으로 시스템 부팅 후 자동으로 시작되도록 서비스를 등록할 때 systemctl 혹은 init.d 스크립트 등록하여 사용합니다. 

 

systemctl 혹은 init.d 스크립트를 등록하는 방법이 쉽지많은 않으며, 혹시 해당 서비스에 문제가 발생할 경우 서비스가 다운되면 다시 시작되지 않는 문제도 있습니다.

 

이를 해결하기 위해 upstart 같은 프로그램을 사용하여 간단히 해결할 수 있습니다. 하지만 이마저도 각 서비스 별로 별도 등록, 관리해야 합니다. 

 

만약 당신이 pm2를 사용하여 Node.js로 제작된 서비스를 관리하고 있다면 위의 모든 문제를 손쉽게 해결할 수 있습니다. 

 

pm2에 서비스를 등록, 중단, 삭제하는 방법은 아래와 같이 간단합니다. 

 

pm2 start your_app.js  >> 서비스 등록 및 시작하기
pm2 stop your_app      >> 서비스 중단하기
pm2 restart your_app.js>> 서비스 재시작하기
pm2 del your_app       >> 등록된 서비스 정보를 삭제하기

부트 스크립트에 추가하기 전에 당신의 서비스를 pm2에 모두 등록했다고 가정하고 진행하겠습니다. 

 

부트 스크립트와 관련해서 startup과 unstartup 명령만 알고 있으면 됩니다. 

 

startup은 해당 시스템의 init system을 찾아 pm2의 초기 실행 스크립트를 등록하고, 필요한 환경 변수 설정을 위한 값을 출력해 줍니다. 실제 환경 변수 등록과 부팅 스크립트에 등록을 위해서는 출력된 내용을 복사하여 실행해야 하니 해당 과정을 잊지 마세요. 

 

$ pm2 startup
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/home/user/.nvm/versions/node/v14.7.0/bin /home/user/.nvm/versions/node/v14.7.0/lib/node_modules/pm2/bin/pm2 startup systemd -u user --hp /home/user
# 위 sudo env .. 라인 전체를 복사해서 실행하면 필요한 설정이 모두 적용됩니다.

끝!!!

scp(secure copy) 사용법을 정리해 보겠습니다.

 

원격지의 서버들은 모두 공인 IP를 가지지 않는 경우가 많고, 보안 문제로 접속하는 터미널 외에는 직접 연결이 안되는 경우가 대부분입니다. 

 

원격지에 172.31.5.31 ~ 172.31.5.39 까지의 서버들이 있으며, 하나의 공인 IP를 통해 172.31.5.31로 접속할 수 있고, 31번으로 전송한 파일들을 32 ~ 39번 서버들로 복사해야 하는 상황을 가정해 보겠습니다.

 

scp의 기본 사용법은 아래와 같습니다. 

scp [옵션] [[user@]host1:]file1 ... [[user@]host2:]file2

1:1 전송뿐만 아니라 n:n 전송도 지원됩니다. 또한 로컬 파일을 원격지로 보내거나 원격지의 파일을 로컬에 복사할 수 있으며, 원격지의 파일을 다른 원격지로 보낼 수 있습니다. 

 

지정할 수 있는 옵션은 아래와 같습니다.

-P  -P 3010 처럼 원격지의 ssh 포트 번호를 지정할 수 있습니다. 기본값은 22 입니다. 대문자임을 주의하세요.
-r 디렉토리의 하위 폴더, 파일을 모두 복사합니다.
-p 복사할 때 원본 파일의 의 수정/사용 시간, 권한 등이 모두 유지됩니다.
-c 압축 후 복사합니다. 용량이 클 때 사용하세요.
-v 복사되는 과정을 볼 수 있게 정보를 출력합니다.

 

아래 몇 가지 샘플을 통해 살펴보고 마무리 하겠습니다. 원격 포트는 모두 3010이라고 가정하겠습니다.

 

로컬파일을 원격지로 복사

 

로컬에 /tmp/test.tar 이라는 파일을 172.31.5.32 서버(port number 3010)의 /tmp 폴더에 복사합니다.

scp -P 3010 /tmp/test.tar abc@172.31.5.32:/tmp

 

로컬파일들을 원격지로 복사

 

복사할 파일 리스트를 필요한 만큰 나열하면 됩니다.

scp -P 3010 /tmp/test.tar /tmp/test2.tar abc@172.31.5.32:/tmp

 

원격지 파일을 로컬에 복사

 

172.31.5.32 서버(port number 3010)의 /tmp/test.tar 파일을 로컬의 /tmp 라는 폴더에 복사합니다.

scp -P 3010 abc@172.31.5.32:/tmp/test.tar /tmp

 

원격지 파일들을 로컬에 복사

 

원격지의 파일들은 ""로 감싸서 나열하면 됩니다.

 

scp -P 3010 abc@172.31.5.33:"/tmp/test.tar /tmp/test2.tar" /tmp

 

위의 두 예제처럼 -P 옵션은 둘 중 앞에 선언된 원격지의 port로 사용됩니다. 

 

복사할 파일의 원본 위치와 복사될 위치 모두 원격지일 경우 앞에 선언된 원격지의 포트로 인식합니다. 

 

만약 사용되는 포트가 22번이라면 상관없지만 두 원격지 모두 사용하는 포트가 22번이 아닐 때는 앞에 있는 원격지는 -P옵션으로 포트를 지정할 수 있지만 그 다음 원격지부터는 모두 22번으로 인식합니다. 

 

이런 경우에는 ssh_config를 설정하여 해결할 수 있습니다. 상세 내용은 man ssh_config를 통해 확인할 수 있습니다. 

 

아래 예제는 172.31.5.33, 172.31.5.34 서버의 ssh 포트를 3010으로 지정한다고 가정하겠습니다. 

vi ~/.ssh/config  // 기존에 지정한 내용이 없다면 신규 파일을 생성하게 됩니다.

// 파일 내용은 아래와 같이 지정할 수 있습니다.
Host 172.31.5.33
Port 3010

Host 172.31.5.34
Port 3010

 

원격지 파일을 다른 원격지에 복사

 

172.31.5.35 서버(port number 3020)의 /tmp/test.tar 파일을 172.31.5.33 서버의 /tmp 라는 폴더에 복사합니다. 33번의 ssh port는 위와 같이 ssh_config에 지정했다고 가정하겠습니다.

 

scp -P 3020 abc@172.31.5.35:/tmp/test.tar abc@172.31.5.32:/tmp

35번 서버의 포트인 3020을 옵션 P로 지정했으며 32번의 포트는 ssh_config에 정의된 포트를 읽어서 복사합니다. 

 

 

이상입니다. 자주 쓰지 않다보니 할 때마다 검색해서 찾는 저 자신을 보고 한번 정리해야겠다라는 생각이 들더군요. 

 

여러분들에게도 도움이 됬으면 합니다. :)

간혹 해킹을 당하거나 버그 등으로 네트웍 트래픽을 과도하게 유발하는 데몬이 있을 수 있습니다. 

 

아래와 같은 방법으로 문제를 해결할 수 있으니 참고하시기 바랍니다. 

 

iptraf 으로 특정 포트에서 외부로 특정 주소의 6666포트로 데이터를 12MB/s로 트래픽을 발생하는 현상을 발견했다고 가정해 보겠습니다. (추가로 nload를 사용하면 in/outbound에서 어느 정도 트래픽이 발생하는 정리해서 보여줍니다.)

 

(* iptraf-ng는 보다 편리한 인터페이스를 제공합니다.)

 

iptables에서 ip 혹은 포트를 바로 막을 수도 있겠지만 그보다는 트래픽을 유발하는 데몬을 찾아 삭제하는 것이 좋습니다.

 

만약 긴급한 상황이라 먼저 막아야 하는 상황이라면 아래와 같이 지정한 포트 사용을 차단할 수 있습니다. 

    iptables -I OUTPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 6666 -j DENY    
    systemctl restart iptables

 

바로 차단하기 보다는 해당 포트를 사용하는 데몬을 찾고 싶을 때는 아래 절차로 진행해 보시기 바랍니다. 

 

1. 6666 포트를 사용하는 데몬을 찾습니다.

     netstat -ntlp | grep :6666

2. 프로세스를 찾았다면 kill로 다운시켜보세요.

kill -9 processid

3. 프로세스를 kill 후 다시 가동되는지 감시하세요.

 

4. 다시 올라왔다면 해당 프로세스를 가동하는 또다른 데몬이 있는 겁니다.

  • ps axo pid,ppid,comm | grep processname(6666을 사용하는 프로세스 이름) 으로 검색하면 몇 번 프로세스가 6666을 사용하는지, 해당 프로세스를 가동하는 데몬의 processid가 무엇인지 찾을 수 있습니다.
  • ps -ef | grep ppid 로 해당 프로세스를 찾아 삭제하세요.

 5. 해킹에 대비해 root pw를 수정하세요. 그리고 해당 시스템의 모든 유저들의 pw를 수정하시기 바랍니다.
 6. 이후 정기적으로 iptraf로 과도한 트래픽이 발생하는지 확인하세요. 만약 6666 포트가 아니라도 비슷한 상황이 발생한다면 루트권한을 누군가 탈취한겁니다. 이 경우 같은 네트웍을 사용하는 모든 시스템의 점검과 라우터 장비에 대한 점검이 필요합니다.

 

이상입니다. 

[root@lnk635 ~]# ssh 'root'@'172.xx.xx.xx'
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @ 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Someone could be eavesdropping on you right now (man-in-the-middle attack)! 
It is also possible that a host key has just been changed. 
The fingerprint for the ECDSA key sent by the remote host is 
SHA256:FTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Please contact your system administrator. 
Add correct host key in /root/.ssh/known_hosts to get rid of this message. 
Offending ECDSA key in /root/.ssh/known_hosts:8 
ECDSA host key for [172.xx.xx.xx]:22 has changed and you have requested strict checking. 
Host key verification failed.

 

 

ssh로 원격접속을 시도하면 위와 같은 에러가 출력될 때가 있다. 기존에 접속하던 시스템의 변경 문제(시스템 재설치 혹은 교체)로 저장된 원격 시스템의 고유값이 기존에 저장된 값과 다를 때 발생한다. 

 

스푸핑 같은 해킹으로 의심되기 때문에 위와 같은 경고를 출력하는데, /root/.ssh/known_hosts  파일에 들어가서 해당 ip로 저장된 키 값이 저장된 라인을 삭제한 후 재접속을 시도하면 된다. 

 

 

CentOS 기준.. 매번 사용하지 않는 것들이라 기록해둔다.



OS 버전 확인

cat /etc/redhat-release(el7 ~)   or cat /etc/issue(~el6)


커널 버전 확인

cat /proc/version


Kernel bits 확인

getconf WORD_BIT


cpu 정보 확인 

cat /proc/cpuinfo

실 CPU 수 : grep ^processor /proc/cpuinfo | wc -l

CPU당 코어 수 : grep 'cpu cores' /proc/cpuinfo | tail -1


메모리 

cat /proc/meminfo


디스크 용량 확인 

df -h

'개발 이야기 > linux' 카테고리의 다른 글

악성 데몬 찾고 해결하는 방법  (0) 2020.05.12
ssh key 충돌 해결방법  (0) 2019.07.03
시스템 기본 사양 확인하기  (0) 2018.08.30
메모리 사용양 측정 - mpstat  (1) 2015.04.10
apache2에서 perl 설정하기  (0) 2015.02.05
ubuntu apt-get source generate  (0) 2015.02.03

없으면 인스톨.. 


apt-get install mpstat


기본으로 mpstat를 입력하면 아래와 같은 결과가 출력됨.


sudo mpstat


Linux 3.13.0-45-generic (rs2mapp1)      04/10/2015      _x86_64_        (2 CPU)


CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle

all       0.02    0.01      0.00   0.02     0.00    0.00    0.00    0.00      0.00    99.95


이걸 코더별로 사용률을 보려면 아래와 같이 실행하면 된다. 

sudo mpstat -P ALL


01:54:52 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle

01:54:52 PM  all    0.02    0.01    0.00    0.02    0.00    0.00    0.00    0.00    0.00   99.95

01:54:52 PM    0    0.02    0.01    0.00    0.03    0.00    0.00    0.00    0.00    0.00   99.94

01:54:52 PM    1    0.01    0.00    0.00    0.01    0.00    0.00    0.00    0.00    0.00   99.97


각 CPU에 대한 내용만 보고 싶다면..

sudo mpstat -P ALL | tail -2 (cpu가 2개니까 밑에서 두줄만 보겠다는 필터 적용)

01:56:08 PM    0    0.02    0.01    0.00    0.03    0.00    0.00    0.00    0.00    0.00   99.94
01:56:08 PM    1    0.01    0.00    0.00    0.01    0.00    0.00    0.00    0.00    0.00   99.97

특정 시간 간격으로 계속 나오게 하고 싶다면

sudo mpstat -P ALL 5 (5초 간격으로 계속 출력하기.)


예전에 한참 사용할 땐 알겠는데, 너무 오랜동안 사용 안하니 당췌 기억이 안나네. 


찾아서 정리해둔 내용.

  1. 홈짱 2015.11.19 15:17

    고맙습니다. 덕분에 좋은 내용 알아가네요.

아파치(apache2.4.x)를 오랜만에 건드리는데 왜케 많이 변한거지 --;


아래는 gitweb과 연동하는 과정에서 perl 설정을 추가한 부분.


Alias /gitweb /usr/share/testWeb


<IfModule mod_perl.c>

<Directory /usr/share/testWeb>

   Options +ExecCGI

   AddHandler perl-script .cgi .pl

   PerlResponseHandler ModPerl::Registry

   PerlOptions +ParseHeaders

   AllowOverride None

    Require all granted

    AuthType Basic

    AuthName "Git Access"

    Require valid-user

    AuthUserFile /etc/apache2/gitweb-htpasswd

    SetEnv GITWEB_CONFIG /etc/gitweb.conf

</Directory>

</IfModule>


추가로 gitweb.conf 파일 내용도 업데이트.

our $projectroot = "/home/git/repositories/";


# directory to use for temp files

our $git_temp = "/tmp";


# target of the home link on top of all pages

#$home_link = $my_uri || "/";


# html text to include at home page

#$home_text = "indextext.html";


# file with project list; by default, simply scan the projectroot dir.

our $projects_list = "/home/git/projects.list";


# stylesheet to use

#@stylesheets = ("static/gitweb.css");


# javascript code for gitweb

#$javascript = "static/gitweb.js";


# logo to use

#$logo = "static/git-logo.png";


# the 'favicon'

#$favicon = "static/git-favicon.png";


# git-diff-tree(1) options to use for generated patches

#@diff_opts = ("-M");

@diff_opts = ();


$feature{'blame'}{'default'} = [1];



http://repogen.simplylinux.ch/generate.php

그래서 찾아봤더니.. intel CPU에 대해서는 아래와 같은 아티클이 있었음.


http://gobawi.tistory.com/90


난 AMD라.. 확인 했더니.. 


이런 항목이 있네. Enabled로 수정하고 다시 들어오면 64bit OS 생성 가능.



vi /etc/apt/sources.list 를 수정 후 apt-get update 하면 해당 업데이트 서버 리스트 받아옴.


vi 에디터에서 :%s/source/target/하면 source 텍스트가 target 텍스트로 한번에 수정되니 참고할 것!

+ Recent posts