태그 보관물: ssh

SLACK으로 SSH 로그인 알림 확인

서버를 운영하면서 가장 무서운 일은 허가되지 않은 인원이 운영하는 서버에 몰래 접근하여 어떠한 작업을 한다는 것이다.
아무리 보안에 신경을 쓴다고 해도 보안 문제는 쉽게 해결이 되지 않기 때문에 해당 부분에 대해서 누군가 로그인을 한다면 해당 부분에 대한 알림을 통해서 허가 받은 인원이 작업을 하고 있다는 사실을 알기 위해서 슬랙을 통한 알림을 설정한다.

Slack으로 알림을 주기 위한 Web Hook 쉡 스크립트

#!/bin/sh

url="https://hooks.slack.com/services/XXX/YYY/ZZZ" # 슬랙 WebHook으로 설정한 URI
channel="#ssh" # 알림을 받을 SLACK CHANNEL
icon=":dark_sunglasses:" # 알림을 보내는 아이콘 설정
host="`hostname`"

if [ "$PAM_TYPE" != "close_session" ]; then
content="\"attachments\": [ { \"mrkdwn_in\": [\"text\", \"fallback\"], \"fallback\": \"SSH LOGIN: $PAM_USER connected to \`$host\`\", \"text\": \"SSH LOGIN TO \`$host\` \", \"fields\": [ { \"title\": \"USER ID\", \"value\": \"$PAM_USER\", \"short\": true }, { \"title\": \"USER IP\", \"value\": \"$PAM_RHOST\", \"short\": true } ], \"color\": \"#F35A00\" } ]"
curl -X POST --data-urlencode \
      "payload={
        \"channel\": \"$channel\",
        \"mrkdwn\": true,
        \"username\": \"SSH_MONITOR\",
        $content,
        \"icon_emoji\": \"$icon\"
    }" $url &
fi

if [ "$PAM_TYPE" == "close_session" ]; then
content="\"attachments\": [ { \"mrkdwn_in\": [\"text\", \"fallback\"], \"fallback\": \"SSH LOGOUT: $PAM_USER connected to \`$host\`\", \"text\": \"SSH LOGOUT TO \`$host\` \", \"fields\": [ { \"title\": \"USER ID\", \"value\": \"$PAM_USER\", \"short\": true }, { \"title\": \"USER IP\", \"value\": \"$PAM_RHOST\", \"short\": true } ], \"color\": \"#F35A00\" } ]"
curl -X POST --data-urlencode \
      "payload={
        \"channel\": \"$channel\",
        \"mrkdwn\": true,
        \"username\": \"SSH_MONITOR\",
        $content,
        \"icon_emoji\": \"$icon\"
    }" $url &
fi

스크립트 생성 후 실행 권한 부여

sudo chmod +x /etc/ssh/scripts/ssh_notify_to_slack.sh

SSH 로그인시 알림을 실행하기 위한 PAM 등록

SSH의 접속에 대한 세션 샅애값이 변경될 때 알림을 주기 위해서 pam_exec.so를 활용하여 SlackWeb Hook으로 알림을 준다.

sudo echo "session optional pam_exec.so seteuid /etc/ssh/scripts/ssh_notify_to_slack.sh" >> /etc/pam.d/sshd

Secure Copy(SCP) 사용법

터미널로 원격 서버에 파일을 올리기 위해서 FTP 또는 SFTP 툴을 사용하는 것이 언제가부터 귀찮아 지기 시작하네요…
SSH가 가능하다면 SCP 명령어를 사용해서 파일을 업로드 또는 다운로드 받는 방법을 소개합니다.

메소드 사용법

# scp ${옵션} ${원본 경로 및 파일} ${복사 받을 곳 경로 및 파일}

다음의 순서는 꼭 기억하셔야 합니다.
업로드 또는 다운로드 받을 때는 다음의 순서는 변경되지 않습니다.

옵션

옵션 설명
4 IPv4 주소만 사용하도록 강제
6 IPV6 주소만 사용하도록 강제
P 접속시에 사용할 포트 번호
p 원본 파일 시간의 수정시간, 사용시간, 권한에 대한 정보를 유지해서 복사
r 하위 폴더/파일을 모두 복사, 디렉토리 복사일 경우에 옵션 사용
v 디버깅 모드 처럼 진행 사항 보기
q 진행 사항을 나타내는 미터를 표시하지 않음
C 통신을 압축

Remote 서버에 파일 업로드

# scp -P 22 /home/youngminjun/demo.tar coolio@coolio.so:/home/coolioso/

로컬의 ‘demo.tar’ 파일을 ‘coolio.so’ 사이트에 22번 포트로 SSH 접속해서 ‘coolio’라는 사용자로 접속하여 ‘/home/coolioso/’ 디렉토리에 복사

Remote 서버에 파일 다운로드

# scp -P 22 coolio@coolio.so:/home/youngminjun/demo.tar /home/youngminjun/

‘coolio.so’ 사이트의 ‘demo.tar’ 파일을 22번 포트로 SSH 접속해서 로컬PC의 ‘/home/youngminjun/’ 디렉토리에 복사