CoolSMS으로 계정(쉘)에서 문자 보내기 소스 입니다.

coolsms.php 가 해당 디랙토리에 있어야 사용가능합니다

#!/usr/bin/php
<?php
require_once("coolsms.php");
$sms = new coolsms();
$sms->setRealMode();
$sms->appversion("TEST/1.0");
$sms->charset("euckr");
$sms->setuser("아이디", "페스워드");

if (!$sms->addsms("$argv[1]", "보내는 사람", "$argv[2]")) {
    echo $sms->lasterror();
}

if (!$sms->connect()) {
    exit(1);
}
$nsent = $sms->send();
if ($sms->errordetected()) {
}
$sms->disconnect();
$sms->emptyall();
?>

#*스크립트 종료*#

사용 방법 : ./sendsms 010-0000-0000 문자 테스트

CoolSMS 남은 문자 / 잔액 알아보기

#!/usr/bin/php
<?php
/**
 * vi:set ts=4 sw=4 expandtab fileencoding=cp949:
 * Copyright(C) 2008-2010 D&SOFT
 * http://open.coolsms.co.kr
 */
header("Cache-Control: no-cache");
?>
<?php
require_once("coolsms.php");

// 객체를 생성합니다.
$sms = new coolsms();

// 아이디, 비밀번호를 입력합니다.
$sms->setuser("", "");

// 서버에 연결합니다.
if (!$sms->connect()) {
        // 오류처리
        echo "서버에 연결할 수 없습니다.";
        exit(1);
}

// 잔액을 읽어옵니다.
$result = $sms->remain();

// 연결을 끊습니다.
$sms->disconnect();

// 결과를 출력합니다.
if ($result["RESULT-CODE"] == "00")     // RESULT-CODE 가 00이면 성공.
{
    echo "캐쉬 : " . $result["CASH"];
    echo "원";
    echo " / 포인트 : " . $result["POINT"];
    echo "점";
//    echo " / 문자방울 : " . $result["DROP"];
//    echo "개";
    echo " / 전체 SMS건수 : " . $result["CREDITS"];
    echo "건 ";
} else {
    echo "Result Code: " . $result["RESULT-CODE"] . "<br />";
    echo "Result Message: " . $result["RESULT-MESSAGE"] . "<br />.";
}
?>
입니다.
#*스크립트 종료*#

결과는

캐쉬 : 1420원 / 포인트 : 860점 / 전체 SMS건수 : 114건 입니다.

Posted by 현종이닷
,








우선 예제 스크립트

#!/bin/bash

#* echo 로 화면에 메세지 출력 *#
echo "사용자 계정 생성 스크립트 입니다."
echo "필드명을 정확히 확인후 작성 부탁드립니다."

echo -n "성명 :"
#*read 로 스트링 입력받기 read 뒤에 붙는 녀석은 환경변수 *#

read nm
echo -n "아이디 :"
read id
echo -n "비밀번호 :"
read pw
echo -n "연락처(휴대폰) :"
read cn
echo -n "생년월일 :"
read bd
echo -e "계정사용용도"
echo -en "      1. 머드접속유지\r\n     2. 파일저장소\r\n       4. 머드게임개발\r\n     4. Web\r\n      5. 기타\r\n\r\n 선택하세요 : "
read ty
#* case 문으로 번호 선택 -> 해당번호 명령어 실행 *#

  case $ty in
    1)
        echo -e "머드접속유지" > /data/admin/user_info/tmp.txt
        echo "/home/$id" > /data/admin/user_info/tmp2.txt
    ;;
    2)
        echo -e "파일저장소" > /data/admin/user_info/tmp.txt
        echo "/home/$id" > /data/admin/user_info/tmp2.txt
    ;;
    3)
        echo -e "머드게임개발" > /data/admin/user_info/tmp.txt
        echo "/home/$id" > /data/admin/user_info/tmp2.txt
    ;;
    4)
        echo -e "Web" > /data/admin/user_info/tmp.txt
        echo "/data/www/$id/"  > /data/admin/user_info/tmp2.txt
    ;;
    5)
        echo -e "기타" > /data/admin/user_info/tmp.txt
        echo "/home/$id/"  > /data/admin/user_info/tmp2.txt
    ;;
    *)
        echo "Warning : 잘못된 선택입니다."
        echo -n "Enter키를 눌러주세요"
        read
    ;;

  esac


echo "수집한 정보로 계정을 생성합니다. 잠시만 기다려주세요....."
#* in= 이런식으로도 변수 지정이 가능하다 *#

in=/data/admin/user_info/$id
touch $in
echo -e "성명 : $nm" > $in
echo -e "생년월일 : $bd" >> $in
echo -e "연락처 : $cn" >> $in
echo -e "계정사용용도 : $(cat /data/admin/user_info/tmp.txt)" >> $in
useradd -m -d $(cat /data/admin/user_info/tmp2.txt) -c "$nm" $id

echo "$id:$pw" | chpasswd > /dev/null 2>&1
echo "$nm님의 ID $id가 생성 완료 되었습니다."
#* 입력받은 정보로 계정을 만들면서 사용자에게 문자 보네기 *#

/usr/local/sbin/sendlms-system $cn "[LECL-Ent] '$nm'님 신청하신 '$id' 가 발급되었습니다. 계정접속 비밀번호는 '$pw' 입니다. 접속후 passwd 명령어로 비밀번호를 변경해 주세요.."
#* 그전에 스누피님 블로그에서도 다룬적 있는 내용 // chpasswd 로 비밀번호 한줄로 변경하기 *#

ln -sf /etc/tt.conf $(cat /data/admin/user_info/tmp2.txt)
chown $id:$id $(cat /data/admin/user_info/tmp2.txt) -Rv > /dev/null 2>&1
chmod 700 /data/admin/user_info/* > /dev/null 2>&1
rm -rf /data/admin/user_info/tmp.txt > /dev/null 2>&1
rm -rf /data/admin/user_info/tmp2.txt > /dev/null 2>&1

자 이제는 해당 명령어 들의 사용예를 적어보겟습니다~~ ㅎ

echo "테스트" -> 쉘에 테스트라는 문자를 남길때

echo -e  : enable interpretation of backslash escapes (\와 조합형으로 쓸수 있는 기능을 사용)

해당 기능은....

       \\     backslash

       \a     alert (BEL)

       \b     backspace

       \c     produce no further output

       \e     escape

       \f     form feed

       \n     new line

       \r     carriage return

       \t     horizontal tab

       \v     vertical tab

이정도 입니다~

echo -.r : 해당 줄에 표시 (?) 보통 echo "정답 " 하면 해당 라인 아랫줄에 정답이 표시되는데 이를 한줄 위로 올릴수 있습니다~

read a변수 - > a변수에 스트링을 입력해 줍니다

read test 입력후 aaaa를 입력한 뒤에

echo $test 해보면 aaaa 가 출력되는것을 볼 수 있습니다~

 

그다음에는 chpasswd

 

제일 무난하게 사용할 수 있는 방법


echo "id:pw" | chpasswd  입니다~ 딱 봐도 감이 오시죠? ㅎ

 

우선 이번 포스팅은 여기 까지 입니다~~ ㅎ

 

그럼 즐거운 주말되세요~

 

 

'PC > Linux' 카테고리의 다른 글

데비안 호스트네임 변경하기  (0) 2015.01.03
APCUPS 소스로 설치하기  (0) 2014.08.15
리눅스에서 쉘로 coolsms 사용하기  (0) 2014.07.05
Bind DDNS 구축하기  (0) 2014.07.05
DNSEver DDNS 로그 남기는 스크립트  (0) 2014.06.22
Posted by 현종이닷
,

Bind DDNS 구축하기

PC/Linux 2014. 7. 5. 07:57








안녕하세요?

 

오늘의 포스팅 주제는 bind tool (DNS관리툴) 입니다.

이번 포스팅의 계기는 이러합니다.

편리함에 익어 둔해진 머리를 위해 과감히 DNSEver 를 버렸습니다

그런데 얼마전 NAS수리를 위해 렌선을 장기간 빼놨더니.. IP주소가 갱신되었고

접속을 할 수 없는 난감한 상황이 찾아와 DDNS의 소중함을 느꼈기 때문에 삽질을 시작했습니다.

물론 C, PHP 는 하나도 안쓰고 만들었습니다.

우선 환경은.... Bind, SSH가 설치되어 있는 Linux서버와 ssh 접속하능한 Linux 클라이언트.

SSH가 22번이여야지만 공개키 부분에서 문제가 생기지 않습니다.

자 서두가 길어지기 전에 후딱 본론으로 가겠습니다.

 

bind서버의 ip : 10.1.0.1
클라이언트 ip : 10.1.0.2

 

우선 DDNS 업데이트를 받을 클라이언트에 Telnet이나 SSH로 접속 후

계정을 하나 만들어 준 후 로그인을 하여 줍니다.

Bind가 설치되어 있는 서버에도 같은 이름이나 다른사람이 모를만한 이름으로

계정을 만든 후 비빌번호를 설정합니다.

 

로그인을 했다면 쉘에서 ssh-keygen -t dsa 입력후 엔터 세번

ddns@HJTech-NAS ~ $ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/ddns/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ddns/.ssh/id_dsa.
Your public key has been saved in /home/ddns/.ssh/id_dsa.pub.
The key fingerprint is:
****************** 생   략 ****************** ddns@HJTech-NAS
The key's randomart image is:
+--[ DSA 1024]----+
****** 생 략 ******

요롷게 됩니다. 그럼 ssh 폴더에 id_dsa 와 id_dsa.pub 가 생성이 되었을 것입니다.

이중에 id_dsa.pub 파일을 authorized_keys2 로 복사해줍니다.

cp id_dsa.pud authorized_keys2  

이제 복사한 authorized_keys2(공개키)를 scp로 서버에 복사해줍니다.

scp authorized_keys2 ddns@10.1.0.1

이때 주의할 점은 반드시 ip나 도메인 주소 뒤에 : 콜론 기호가 들어간다는 점!

The authenticity of host '10.1.0.1 (10.1.0.1)' can't be established.
RSA key fingerprint is ******************* 생 략 **********************
Are you sure you want to continue connecting (yes/no)? yes
ddns@10.1.0.1's password:

알려지지 않은 호스트에 접속할거라고 정말 접속할건지 물어보네요

당연히 yes입력후 엔터  그리고 비밀번호를 입력하여 scp 의 과정을 끝맞춰 줍니다.

 

ddns-updater.sh
다운로드

이제 블로그 첨부파일에서 ddns-updater.sh를 받아 계정에 압축을 풀어주고 서버의 주소만 변경해 주면

클라이언트에서는 준비 끝~ 

그럼 서버 셋팅으로 넘어가겠습니다.

bind 서버에 ssh 나 telnet으로 로그인 한후

아까 전송받은 authorized_keys2 파일을 .ssh 에 넣어줍니다.
mkdir .ssh
mv authorized_keys2 .ssh/

보안문제도 있으니 퍼미션도 조정해줍니다.
chmod 700 .ssh
chmod 644 .ssh/authorized_keys2

이제 블로그 첨부파일에 있던 server.tar.gz 를 받아 앞축을 풀어줍니다.

server.tar.gz
다운로드

vi 나 nano등의 편집기로 checkddns.sh 와 ddns_update 파일만 편집해주면 됩니다,

 그전에 bind 디렉토리가 어디에 위치해 있는지 부터 알고 있어야 합니다.

이 포스팅을 따라하고 있다는것은 이미 bind로 dns 서버를 구축해 논 상황이시겠죠?

우분투 12.04 LTS 기준으로 /etc/bind 네요...

9, 21, 31번째 줄 보면 /etc/bind 부분을 해당 서버의 zone 설정파일이 있는 곳으로 변경해 줍니다.

ddns_update 파일을 연후 경로와 도메인 호스트 이름을 지정해 준다.

자 이제부터 조금 집중모드에요~

/etc/passwd 파일의 ddns 혹은 ddns을 위해 만든 계정을 찾아

ddns:x:0:0:DDNS Update Script Executer:/usr/local/sbin/ddns:/bin/bash

요론식으로 변경해줍니다! 포인트는 0:0

 (권한을 루트로 바꿔주는것입다 bind의 데몬을 리스탓 해야 하기 때문이죠.)

자 다시 클라이언트로 돌아와서 크론텝에 아이피를 받아오는 파일을 추가해 주면 끝입니다.

예를 들어...

 

0 0 * * * ddns_update  > /dev/null 2>&1 이런식으로 추가해 주면 됩니다.

의미는..... 0시 0분 매일 매월 매요일에 해당 명령어를 실행하는데, 결과값이나 화면에 출력되는게 있다면 /dev/null 으로 보낸다는 것입니다.

 

자 이정도면 왠만하면 따라하셨으리라 생각합니다~

그리고 마지막!

서버의 DDNS업데이트 할 계정의 루트에서 vi. profile 엔터 

/usr/local/sbin/ddns/ddns_update

mesg n

exit

붙혀넣기 후 저장 
 
그러면 자동으로 SSH로 들어가 ip업데이트 한 후 변경내용 저장 까지~~

 이상 Bind 구축 포스팅이였습니다~ 

Posted by 현종이닷
,








[수정본] IP까지 남기도록 수정

파일 위치 : /usr/local/sbin/ddns_update.sh

 vi : /usr/local/sbin/ddns_update.sh

 

#!/bin/sh

 

 #* 변수 정의*#

mkdir -p /tmp/ddns/ 

dt=$(date +%y%m%d)

#* 도메인의 몸통만 적어주세요 예: wisegiga *#

NICK=''
#* 업데이트할 DDNS 주소를 입럭해 주세요 *#

DDNS_HOST=''
#* DNSEver 아이디와 DDNS 인증코드를 입력해 주세요 *#

USER=''
PASSWORD=''

#* 변경금지 변수 *#

WGET='/usr/bin/wget'
OPTS=-"O /tmp/ddns/ddns_${NICK}.tmp -o /dev/null"
curl -s ifconfig.me > "/tmp/ddns/tmp_ip_${NICK}"
IP=$(cat "/tmp/ddns/tmp_ip_${NICK}")

#* 로그가 남을 폴더를 지정해 주세요 $ 뒷부분은 수정 금지! *#
LOGDIR="/root/DDNS/${NICK}/"

mkdir -p ${LOGDIR}

${WGET} ${OPTS} --http-user=${USER} --http-passwd=${PASSWORD} "http://dyna.dnsever.com/update.php?host[${DDNS_HOST}]&"
sed -n '4p' /tmp/ddns/ddns_${NICK}.tmp | sed -n 's/.*code=\"\([^\"]\+\).*/\1/p' > /tmp/ddns/tmp_${NICK}

  case $(cat /tmp/ddns/tmp_${NICK}) in
    "720")
        echo -e "DDNS Update Success at $(date) -- $DDNS_HOST (${IP})" >> ${LOGDIR}/DDNS_Log_$dt
    ;;
    "201")
        echo -e "No Update Host Name at $(date) -- $DDNS_HOST (${IP})" >> ${LOGDIR}/DDNS_Log_$dt
    ;;
    "721")
        echo -e "Already Updated at $(date) -- $DDNS_HOST (${IP})" >> ${LOGDIR}/DDNS_Log_$dt
    ;;
    "304")
        echo -e "DDNS not registered or Not Your Domain at $(date) -- $DDNS_HOST (${IP})" >> ${LOGDIR}/DDNS_Log_$dt
    ;;
  esac

#* 임시 폴더 정리*#

rm -rf /tmp/ddns/ddns_${NICK}.tmp
rm -rf /tmp/ddns/tmp_${NICK} 

 

#* 스크립트 종료 *#

에디터 종료는 :wq

 

권한 설정  

chmod 750 /usr/local/sbin/ddns_update.sh

 

크론텝에 추가 for 4시간에 한번씩 실행

crontab -e

 

* */4 * * *        usr/local/sbin/ddns_update.sh

 

만일 크론텝이 안된다면

 

mkdir -p ${LOGDIR}

밑에 while ( : ) do

맨 밑에

sleep 4h

done

을 추가해 주시면 됩니다

 

 

Posted by 현종이닷
,