대개의 경우 내부망이라면 telnet과 ftp를 이용하겠지만 보안상의 이유로 혹은 기타의 이유로 내부망인데도 불구하고 ssh와 sftp를 써야하는 경우가 있다.(대외망은 아마도 대부분 telnet과 ftp를 사용하지 못할 거라 생각한다.)
이전에 ftp를 이용한 자동화에는 .netrc를 이용해서 자동화를 했는데(물론 .netrc를 사용한다는 것은 내 계정정보를 그냥 공개한다고 보면 된다.) sftp를 써야 하기 때문에 이런 기존의 자동화 방법을 적용할 수 없었다.
ssh, sftp 그리고 scp 등의 secure 툴(이 3가지 외에는 생각나는게 딱히 없다.)은 rsa를 이용해서 보안 로그인을 허용한다.
위의 .netrc를 이용하는 것보다는 훨씬 보안이 뛰어나다(라고 알고있다...;;).

먼저 제반사항으로는 당연히 secure 접속이 가능한 장비가 준비되어야 한다. ssh 설치 방법 등은 이 글에서 다루지 않는다.

sshd의 설정파일(/etc/ssh/sshd_config)에서 아래 부분을 수정한다. 기본적으로는 막혀있는 듯하다.
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

다음으로 접속하는데 쓸 rsa 키를 만들어보자.

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/fhan/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/fhan/.ssh/id_rsa.
Your public key has been saved in /home/fhan/.ssh/id_rsa.pub.

어디에 저장할지와 추가적인 보안키를 입력 받는데 필요없으면 입력하지 않아도 된다.
이제 $HOME/.ssh/id_rsa.pub 파일이 생겼다. 이 파일을 상대방의 장비에 authorized_keys란 이름으로 넣어주면 준비가 끝난다.
$ scp ~/.ssh/id_rsa.pub fhan@dev:~/.ssh/authorized_keys
이렇게 한 뒤에 scp를 다시 수행하면 패스워드를 물어보지 않는다. 혹 패스워드를 물어본다면 .ssh경로나 authorized_keys 파일의 권한을 700, 600으로 조정해보면 되기도한다.

문자열 가공 함수로 str로 시작하는 함수 중에 trim 기능이 있을거라 생각했는데 없다.
sscanf를 잘 쓰면 어케 되겠지만...여튼 인터넷을 뒤져보니 대중적인 소스가 있었는데 이걸 수행해 보니 ltrim은 정상 동작하지만 rtrim은 정상 동작하지 않더라...그래서 살짝 수정한 버전이다.

char* rtrim(char* s) 
{
    int i=0;

    for(i=strlen(s)-1;i>=0;i--)
    {
        if(isspace(s[i])) s[i]=0x00; else break;
    }

    return s;
}

char* ltrim(char* s) 
{
    char* i = s;

    while (*i != 0x00)
    {
        if (isspace(*i)) i++;
        else 
        {
            s = i;
            break;
        }
    }

    return s;
}

char* trim(char* s) 
{
    return ltrim(rtrim(s));
}

void main()
{
    char t[]="    AAAA          ";
    char* tt=t;

    printf("SRC [%s]\n", t);
    printf("rtrim [%s]\n", rtrim(tt));
    printf("SRC [%s]\n", t);
    printf("ltrim [%s]\n", ltrim(tt));
    //printf("trim [%s]\n", trim(t));
}

str로 시작하는 문자열 관련 함수가 꽤 있는데 이중에 문자열을 자르는데 유용한 strtok이란 함수가 있다.
아직 parser가 제대로 구현이 안되어 있어 이를 임시로 구현하는데 사용하게 되었다.
예제는 인터넷을 뒤지다가 찾은 것인데 이정도만 봐도 이해하는데 쉬울 것 같다. 출처를 표기해야하는데...까먹었네;
나중에 찾아보고 출처 기입해야함.

#include <STDIO.H>
#include <STRING.H>   //strtok함수는 string.h에 들어있습니다.

int main( )
{
    //분리된 문자열 보관용
    char *token = NULL;
    //분리할 문자열
    char str1[] = "This is\tStrtok,Test Program!!!! end\n";
    //' '이나 ','이나 '\t'이나 '\n'이 들어있는 문자열을 분리
    //구분자 지정
    char str2[] = " ,\t\n!";

    //strtok를 사용시 가장 유의할점은 원본이 손상 된다는 점입니다.
    //strtok에 넣어줄 첫번째 인자는 복사해서 사용하는 것이 좋습니다.

    //처음 토큰을 자른다.
    token = strtok( str1, str2 );
    //이후는 계속 반환된다.
    while( token != NULL )
    {
        //토큰별로 출력
        printf( "token = %s", token );
        //한칸 내리기
        putchar( '\n' );
        //반복해서 자르기. 첫번째 인자를 NULL처리하면 기존에 포인터에서 계속 자르게 됩니다.
        token = strtok( NULL, str2 ); 
    } 

    //strtok사용하고 난후의 원본 문자열이 손상된것을 알수 있습니다.
    printf("검색이 완료된 원본 문자열 : %s\n",str1);

    return 0;
}