January 2009 Archives
다음(Daum)이 2009년 1월 18일경 지도서비스를 새롭게 개편하고 고해상도 위성(항공)사진(스카이 뷰) 및 거리풍경을 보여주는 구글 스트릿 뷰(street view) 같은 로드뷰 서비스를 시작했다.
그중에서 다음 스카이뷰가 제공하는 항공사진은 선명도가 구글,야후,네이버지도 보다 뛰어나며 전국적 범위를 지원하고 있어 정말 마음에 든다.( 중요 시설물들은 흐리게 처리하는 것을 넘어 아예 숲 이미지 등으로 덮어버려서 사실을 왜곡한다는 문제점이 있으나 이것은 시대를 따라가지 못하는 관련 법에 의해 어쩔 수 없는 선택이니 이 정도는 애교로 봐주고 넘어가자.)
그래서 다음 스카이뷰와 투명하게 지형지물들을 겹쳐서 보여주는 하이브리드 오버레이를 구글어스 위에서 겹쳐보는 것을 만들어 봤다.
참고:
네이버 지도 위성영상 오픈기념 Naver map on Google Earth
한글 구글맵 기념 Google Maps on Google Earth
예전에는 구글어스에서 kml 파일을 불러오는 식으로 만들었었는데 사용자가 kml파일을 구글어스에 등록하고 보고 나서 지우지 않아 정작 한국 쪽을 보고 있지 않는데도 HTTP접속 요청이 계속적으로 들어오는 문제가 있어 구글어스 플러그인을 사용하여 웹상에서 보게 만들었다.
<동작화면>
사용해 보려면 아래의 링크로 가면 된다.
Daum Map On Google Earth ( http://aero.sarang.net/dmoge/ )
위 페이지를 열었을 때 구글어스 플러그인이 설치되어 있지 않으면 설치하라는 메시지가 뜨며, 안내대로 설치하고 나면 사용할 수 있다.( 구글어스 플러그인은 현재 Windows,Mac용이 나와있다.) 플러그인이 제대로 동작하여 구글어스가 뜨고 한국이 포커싱되고난 다음 스카이뷰, 다음 오버레이를 채크하면 해당 이미지가 구글어스 위에 겹쳐 보이게 된다.
주의: 이 서비스(?)는 관련업체의 태클혹은 개인적 사정에 의해 언제든지 중단될 수 있음
그중에서 다음 스카이뷰가 제공하는 항공사진은 선명도가 구글,야후,네이버지도 보다 뛰어나며 전국적 범위를 지원하고 있어 정말 마음에 든다.( 중요 시설물들은 흐리게 처리하는 것을 넘어 아예 숲 이미지 등으로 덮어버려서 사실을 왜곡한다는 문제점이 있으나 이것은 시대를 따라가지 못하는 관련 법에 의해 어쩔 수 없는 선택이니 이 정도는 애교로 봐주고 넘어가자.)
그래서 다음 스카이뷰와 투명하게 지형지물들을 겹쳐서 보여주는 하이브리드 오버레이를 구글어스 위에서 겹쳐보는 것을 만들어 봤다.
참고:
네이버 지도 위성영상 오픈기념 Naver map on Google Earth
한글 구글맵 기념 Google Maps on Google Earth
예전에는 구글어스에서 kml 파일을 불러오는 식으로 만들었었는데 사용자가 kml파일을 구글어스에 등록하고 보고 나서 지우지 않아 정작 한국 쪽을 보고 있지 않는데도 HTTP접속 요청이 계속적으로 들어오는 문제가 있어 구글어스 플러그인을 사용하여 웹상에서 보게 만들었다.
<동작화면>
사용해 보려면 아래의 링크로 가면 된다.
Daum Map On Google Earth ( http://aero.sarang.net/dmoge/ )
위 페이지를 열었을 때 구글어스 플러그인이 설치되어 있지 않으면 설치하라는 메시지가 뜨며, 안내대로 설치하고 나면 사용할 수 있다.( 구글어스 플러그인은 현재 Windows,Mac용이 나와있다.) 플러그인이 제대로 동작하여 구글어스가 뜨고 한국이 포커싱되고난 다음 스카이뷰, 다음 오버레이를 채크하면 해당 이미지가 구글어스 위에 겹쳐 보이게 된다.
주의: 이 서비스(?)는 관련업체의 태클혹은 개인적 사정에 의해 언제든지 중단될 수 있음
h0ney님의 irc 로그 분석이라는 포스팅을 보고 뭔가 떠오르는 것이 있어 나도 한 번 나름대로 분석을 해보기로 했다.
honey님은 단순히 2008년 동안 누가 얘기를 제일 많이 했느냐는 순위를 냈는데 난 2008년 동안 irc.freenode.org IRC서버의 #perl-kr 방(이 방은 irc.hanirc.org IRC서버의 #perl 방과 bot으로 relay된다.)의 대화에 참가한 주요 참가자들 간의 관계에 중점을 두어서 일종의 social network 형식의 분석을 했다.
분석한 방법은 다음과 같다.
1. XXX님 이라고 직접 이름을 지칭하며 부른 것들을 뽑아서 누가 누구를 지칭했는지를 caller callee 형식으로 저장한 파일을 만든다. ( 직접 이름을 지칭하며 많이 불렀다는 것은 그만큼 둘 간의 친밀도와 관심도가 높음을 나타내는 지표가 될 수 있다. )
예)
JEEN keedi
JEEN keedi_
JEEN pung
JEEN pung96
.
.
2. 사람을 부를 때 정확하게 id를 부르지 않을 경우가 많으므로 XXX님에서 다양한 형태의 XXX를 그 사람의 대표id로 그룹핑하여 대표id.txt 파일에 저장한다.
예) keedi.txt 파일
keedi
keedi_
키디
.
.
3. 1.과 2.에서 만든 데이터를 기준으로 정제된 caller,callee,횟수 형태의 자료구조로 만들어 정리한다.
4. 3에서 만든 자료구조 데이터를 시각화 하기 위해 그래프를 그린다.
(말로는 간단하지만 채팅 로그 자체가 정규화되지 않은 데이터라 정리하는데 적지 않은 노가다가 필요했다. T_T)
그래프로 데이터를 가시화 하기 위해 처음엔 Graphviz라는 프로그램을 사용하려고 했으나 예전에 인터넷을 돌아다니다 그 화려함에 반해서 언젠가는 한 번 사용해 봐야겠다고 눈여겨 둔 circos라는 것이 생각나서 circos로 해보기로 결정했다.
circos는 생물정보학에서 유전자 염색체간의 상호 관계를 가시화(visualization)하기 위한 프로그램이며 Perl로 만들어졌다. 하지만 New York Times에서 미국 대선 후보들이 토론에서 얼마나 상대를 언급했느냐를 circos를 사용하여 가시화시켜 기사를 낸 사례도 있듯이 그것이 꼭 유전자 염색체관련 정보가 아니라도 어떠한 상관관계를 가지는 것이면 가시화시킬 수 있다.
아래는 irc로그를 기반으로 뽑아낸 데이터를 circos로 가시화 시킨 그래프이다.
<이미지를 클릭하면 크게보임>

그래프를 설명하자면 각 id는 고유의 색을 가지며 각 색은 그 색이 어떤 id를 나타내는지 라벨링 되어 있다. 차지하는 영역이 넓을수록 그 만큼 상대를 많이 지칭했고 지칭 당했음(존재감 혹은 사교성(?)이 있음)을 뜻한다. 자신의 색을 가지고 밖으로 나가는 띠와 그 굵기는 어떤 상대 id를 얼마나 많이 지칭했는지를 나타내며 어떤 id로 들어오는 다른 색은 해당 색을 가지는 다른 상대방이 해당 id를 지칭한 것을 나타낸다.
그래프를 보면 대화 참가자 상호 간의 친밀도가 확연하게 가시적으로 드러남을 볼 수 있으며 JEEN님과 whitecat(하얀고양이)님은 서로를 많이 찾는 애증(?)의 관계임을 알 수 있다. :)
그 외 나머지 그래프에 대한 분석은 나름대로 해보시길...
honey님은 단순히 2008년 동안 누가 얘기를 제일 많이 했느냐는 순위를 냈는데 난 2008년 동안 irc.freenode.org IRC서버의 #perl-kr 방(이 방은 irc.hanirc.org IRC서버의 #perl 방과 bot으로 relay된다.)의 대화에 참가한 주요 참가자들 간의 관계에 중점을 두어서 일종의 social network 형식의 분석을 했다.
분석한 방법은 다음과 같다.
1. XXX님 이라고 직접 이름을 지칭하며 부른 것들을 뽑아서 누가 누구를 지칭했는지를 caller callee 형식으로 저장한 파일을 만든다. ( 직접 이름을 지칭하며 많이 불렀다는 것은 그만큼 둘 간의 친밀도와 관심도가 높음을 나타내는 지표가 될 수 있다. )
예)
JEEN keedi
JEEN keedi_
JEEN pung
JEEN pung96
.
.
2. 사람을 부를 때 정확하게 id를 부르지 않을 경우가 많으므로 XXX님에서 다양한 형태의 XXX를 그 사람의 대표id로 그룹핑하여 대표id.txt 파일에 저장한다.
예) keedi.txt 파일
keedi
keedi_
키디
.
.
3. 1.과 2.에서 만든 데이터를 기준으로 정제된 caller,callee,횟수 형태의 자료구조로 만들어 정리한다.
4. 3에서 만든 자료구조 데이터를 시각화 하기 위해 그래프를 그린다.
(말로는 간단하지만 채팅 로그 자체가 정규화되지 않은 데이터라 정리하는데 적지 않은 노가다가 필요했다. T_T)
그래프로 데이터를 가시화 하기 위해 처음엔 Graphviz라는 프로그램을 사용하려고 했으나 예전에 인터넷을 돌아다니다 그 화려함에 반해서 언젠가는 한 번 사용해 봐야겠다고 눈여겨 둔 circos라는 것이 생각나서 circos로 해보기로 결정했다.
circos는 생물정보학에서 유전자 염색체간의 상호 관계를 가시화(visualization)하기 위한 프로그램이며 Perl로 만들어졌다. 하지만 New York Times에서 미국 대선 후보들이 토론에서 얼마나 상대를 언급했느냐를 circos를 사용하여 가시화시켜 기사를 낸 사례도 있듯이 그것이 꼭 유전자 염색체관련 정보가 아니라도 어떠한 상관관계를 가지는 것이면 가시화시킬 수 있다.
아래는 irc로그를 기반으로 뽑아낸 데이터를 circos로 가시화 시킨 그래프이다.
<이미지를 클릭하면 크게보임>

그래프를 보면 대화 참가자 상호 간의 친밀도가 확연하게 가시적으로 드러남을 볼 수 있으며 JEEN님과 whitecat(하얀고양이)님은 서로를 많이 찾는 애증(?)의 관계임을 알 수 있다. :)
그 외 나머지 그래프에 대한 분석은 나름대로 해보시길...
예전에 SSH로 많은 서버에 동시에 같은 명령내리기라는 포스팅을 통해 많은 서버에 일괄적으로 명령을 내리는 방법을 살펴보았다. 거기서 소개된 각종 프로그램들과 테크닉은 ssh을 접속할 때 인증을 위해 암호입력과정을 생략하기 위해 클라이언트쪽 공개키를 서버 쪽에 미리 다 등록해놓아야 한다는 문제가 있다.
만약 대상이 몇 대가 안된다면 수동으로 각 서버들에 로그인 해서 키를 등록하면 되겠지만 그 대상이 수십 대 단위를 넘어간다면 키를 등록작업을 위해 그 많은 서버에 손수 계정과 암호를 쳐서 로그인 하고 키를 등록하는 작업을 한다는 건 생각만 해도 지겹고 짜증 나는 일이 될 것이다.
네이버에서 만들었다는 자칭 대규모 시스템 운영/관리도구 라는 dist도 사용을 위해서는 모든 서버에 키를 등록해놓아야 한다. 그래서 어떤 사용자는 http://dev.naver.com/tracker/?func=detail&aid=521&group_id=14&atid=120 와 같은 문제점을 제기했는데 일리가 있는 말이다. 키를 등록하고 나면 로그인 때마다 계정/암호 입력 없이 바로 작업이 가능하지만 그 작업을 위한 준비과정에는 어차피 대상서버들에 계정/암호를 수동으로 입력해서 들어가서 키를 등록하는 노가다성 작업을 거쳐야 한다는 것이다. 이야말로 중이 제 머리를 못 깎는 황당한 시츄에이션이 아닌가?
위에서 질문한 사용자는 키 등록 방식이 아닌 계정/암호를 내부적으로 입력해줘서 ssh에 접근하는 python parakamio같은 모듈을 사용해서 그러한 상황에서 작업할 수 있도록 하는 게 좋을 것 같다고 얘기하고 있는데 그 외에 Perl에서도 Net::OpenSSH 같은 모듈을 사용하면 계정/암호를 지정해서 ssh로 접속해서 어떤 작업을 수행할 수 있다. 하지만 어떤 프로그래밍 언어들이 제공하는 모듈들을 사용하면 대상서버에 어떤 일괄 작업을 하려고 할 때 그런 작업들을 단편화 시켜 차례로 적용해가야 하는 번거로움이 있어 간단하고 빨리 일련의 작업들을 각 대상서버에 적용하고 싶을 때 사용하려면 그 역시 귀찮다. 역시나 커맨드라인의 일괄작업처리,안정성,편리성의 강점을 벗어버리기는 어렵다고나 할까?
그러면 ssh로그인 할 때 키보드로 인터렉티브하게 암호를 입력해야 하는 작업을 자동화시키는 방법은 없을까?
그 해답은 바로 sshpass 라는 작은 유틸리티에 있다. 이것은 많이 쓰는 ubuntu리눅스의 경우 따로 소스를 받아서 컴파일하고 설치하지 않아도 sudo apt-get install sshpass 라는 명령을 내리면 미리 만들어진 패키지를 설치할 수 있다.
그럼 sshpass가 어떻게 동작하는지를 살펴보자. 만약 어떤 유저로 어떤 대상서버에 ssh로 로그인해서 ls 라는 명령을 내리고 싶다고 하면 키가 등록되었을 때
ssh user@somehost ls
하면 된다. 하지만 키가등록되어 있지 않다면 암호를 수동으로 입력해야 할 것이다. 이런 암호입력 과정을 자동화시키고 싶으면 sshpass를 사용하여 다음과 같이 명령을 내린다.
sshpass -p password ssh user@somehost ls
잘 보면 기본 명령어에서 sshpass -p password 만 앞에 추가되었음을 볼 수 있다. sshpass는 이런 식으로 암호입력과정을 자동화시켜주며 이것은 ssh뿐만 아니라 scp,sftp같은 명령에도 똑같이 쓸 수 있다. expect같은 걸 써서 해도 되지 않느냐고 하는 사람도 있겠지만 그 편리성에서 비교도 안 됨은 말 안 해도 알 것이다. 게다가 커맨드 라인상에서 입력한 암호는 보안상 ps -ef 같은 명령으로 프로세스상태를 봐도 보이지 않게 숨겨주며 커맨드 라인상에서 암호를 직접 쓰기 싫으면 별도의 텍스트 파일에 암호를 저장해 놓고
sshpass -f pass.txt ssh user@somehost ls
처럼 쓸 수도 있다.( 이 경우 암호파일은 chmod명령어로 자신외에 읽기 권한을 빼서 보안에 주의하자.)
그런데 대상 서버에 처음 접속하는 경우에는 다음처럼
The authenticity of host 'somehost (XXX.XXX.XXX.XXX)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)?
known host에 추가할 것이냐는 질문을 하게 되는데 이런 경우에 sshpass는 동작하지 않으므로 이것을 암묵적으로 yes하고 넘어가려면 ssh에 -oStrictHostKeyChecking=no 옵션을 (이것은 한번 접속이 일어난 후에는 know_hosts에 등록되어서 다시 사용할 필요가 없다.) 그리고 사용하다 보면
Pseudo-terminal will not be allocated because stdin is not a terminal.
같은 경고메시지가 나오는 경우가 있는데 이것을 해결하려면 ssh에 -T 옵션을 줘서 다음 처럼하면 된다.
sshpass -p password ssh -T -oStrictHostKeyChecking=no user@somehost ls
그러면 지금까지 본 것을 종합하여 로컬에서 ssh 키를 생성하여 대상서버들에 키를 등록하는 과정을 자동화 시키는 스크립트를 한 번 만들어보자.
키를 만드는 과정은 http://www.xinublog.com/340 혹은 http://people.kldp.org/~eunjea/ssh/x87.html 를 참고하기 바란다.
key를 만들 때 pass phrase를 정하지 않고 그냥 엔터 치면 나중에 원격서버에 키를 등록하고 나서 해당 서버에 접속하면 바로 로그인 돼서 편리하지만 pass phrase를 어떤 값으로 입력하면 자신의 키가 등록된 서버에 접속하려면 그 pass phrase를 물어본다. 이것은 pass phrase를 빈 암호로 생성했을 때 자신의 비밀키가 유출되거나 해당 계정이 뚫렸을 경우 키를 등록해놓은 모든 서버들에 대한 제어권을 넘겨주게 되어 보안상 치명적이므로 그것을 방지하기 위한 것이다. 그래서 보안을 강화하고 싶으면 pass phrase를 사용하는 것이 좋다. 하지만 그렇게 되면 원격 서버에 접속할 때 pass phrase를 입력하는 작업도 수동으로 해야 하는데 그것을 자동화 시키고 싶으면 위의 링크의 마지막에 설명되어 있는 ssh-agent과 ssh-add를 사용하여 작업 전 한 번만 등록해놓으면 ssh-agent가 알아서 그 인증과정을 대리해준다. ssh-agent에 대한 더 자세한 사용법은 http://gypark.pe.kr/wiki/SSH 을 참고하기 바란다.
pass.txt에 암호가 담겨 있고 서버들의 리스트가 들어 있는 파일이 다음과 같다면
<hosts.txt>
somehost1
#somehost2
somehost3
somehost4
.
.
계속
다음과 같은 스크립트로 대상 서버들에 자신의 키 등록 작업을 일괄 처리할 수 있다.
<ssh_key_dist.sh>
#!/bin/bash
for m in `cat hosts.txt`
do
[[ ${m:0:1} == "#" ]] && continue # skip if comment
echo $m =======================================
sshpass -f pass.txt ssh -T -oStrictHostKeyChecking=no user@$m <<EOF1
if [ ! -e ".ssh" ]
then
mkdir .ssh
chmod 700 ~/.ssh
fi
EOF1
sshpass -f pass.txt scp ~/.ssh/id_dsa.pub user@$m:
sshpass -f pass.txt ssh -T user@$m <<EOF2
cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
chmod 644 ~/.ssh/authorized_keys
rm -f ~/id_dsa.pub
EOF2
done
위 쉘스크립트는 hosts.txt에서 접속대상 서버를 한 줄씩 읽어서 첫 문자가 #로 코멘트가 되어 있지 않으면 ssh로 접속해서 .ssh디렉토리가 존재하는지 채크해서 없으면 만들고 로컬에 생성된 공개키(여기서는 dsa방식을 사용했다 키파일 이름이 다르면 적절하게 고칠 것)를 접속대상 서버에 scp하고 다시 대상서버에서 로그인하여 복사한 공개키를 .ssh/authorized_keys 파일의 뒤쪽에 붙여서 키를 등록하고 복사했던 파일을 지우는 작업을 반복하는 것이다.
다시 생각해보니 ssh 연결을 3번씩이나 할 필요가 없어서 1번에 처리하도록 한 개정판 추가. (2009-02-16)
<개정판 ssh_key_dist.sh>
#!/bin/bash
PUBKEY=`cat ~/.ssh/id_dsa.pub`
for m in `cat hosts.txt`
do
[[ ${m:0:1} == "#" ]] && continue # skip if comment
echo $m =============================
sshpass -f pass.txt ssh -T -oStrictHostKeyChecking=no user@$m <<EOF1
if [ ! -e ".ssh" ]
then
mkdir .ssh
chmod 700 ~/.ssh
fi
umask 022
echo $PUBKEY >> .ssh/authorized_keys
EOF1
done
이것은 특정한 작업을 위한 예제이지만 http://aero.sarang.net/blog/2008/11/ssh.html 의 내용과 sshpass를 같이 응용하면 ssh을 이용한 다양한 작업을 키를 등록해놓지 않은 상황에서도 일괄적으로 편리하게 처리할 수 있을 것이다.
만약 대상이 몇 대가 안된다면 수동으로 각 서버들에 로그인 해서 키를 등록하면 되겠지만 그 대상이 수십 대 단위를 넘어간다면 키를 등록작업을 위해 그 많은 서버에 손수 계정과 암호를 쳐서 로그인 하고 키를 등록하는 작업을 한다는 건 생각만 해도 지겹고 짜증 나는 일이 될 것이다.
네이버에서 만들었다는 자칭 대규모 시스템 운영/관리도구 라는 dist도 사용을 위해서는 모든 서버에 키를 등록해놓아야 한다. 그래서 어떤 사용자는 http://dev.naver.com/tracker/?func=detail&aid=521&group_id=14&atid=120 와 같은 문제점을 제기했는데 일리가 있는 말이다. 키를 등록하고 나면 로그인 때마다 계정/암호 입력 없이 바로 작업이 가능하지만 그 작업을 위한 준비과정에는 어차피 대상서버들에 계정/암호를 수동으로 입력해서 들어가서 키를 등록하는 노가다성 작업을 거쳐야 한다는 것이다. 이야말로 중이 제 머리를 못 깎는 황당한 시츄에이션이 아닌가?
위에서 질문한 사용자는 키 등록 방식이 아닌 계정/암호를 내부적으로 입력해줘서 ssh에 접근하는 python parakamio같은 모듈을 사용해서 그러한 상황에서 작업할 수 있도록 하는 게 좋을 것 같다고 얘기하고 있는데 그 외에 Perl에서도 Net::OpenSSH 같은 모듈을 사용하면 계정/암호를 지정해서 ssh로 접속해서 어떤 작업을 수행할 수 있다. 하지만 어떤 프로그래밍 언어들이 제공하는 모듈들을 사용하면 대상서버에 어떤 일괄 작업을 하려고 할 때 그런 작업들을 단편화 시켜 차례로 적용해가야 하는 번거로움이 있어 간단하고 빨리 일련의 작업들을 각 대상서버에 적용하고 싶을 때 사용하려면 그 역시 귀찮다. 역시나 커맨드라인의 일괄작업처리,안정성,편리성의 강점을 벗어버리기는 어렵다고나 할까?
그러면 ssh로그인 할 때 키보드로 인터렉티브하게 암호를 입력해야 하는 작업을 자동화시키는 방법은 없을까?
그 해답은 바로 sshpass 라는 작은 유틸리티에 있다. 이것은 많이 쓰는 ubuntu리눅스의 경우 따로 소스를 받아서 컴파일하고 설치하지 않아도 sudo apt-get install sshpass 라는 명령을 내리면 미리 만들어진 패키지를 설치할 수 있다.
그럼 sshpass가 어떻게 동작하는지를 살펴보자. 만약 어떤 유저로 어떤 대상서버에 ssh로 로그인해서 ls 라는 명령을 내리고 싶다고 하면 키가 등록되었을 때
ssh user@somehost ls
하면 된다. 하지만 키가등록되어 있지 않다면 암호를 수동으로 입력해야 할 것이다. 이런 암호입력 과정을 자동화시키고 싶으면 sshpass를 사용하여 다음과 같이 명령을 내린다.
sshpass -p password ssh user@somehost ls
잘 보면 기본 명령어에서 sshpass -p password 만 앞에 추가되었음을 볼 수 있다. sshpass는 이런 식으로 암호입력과정을 자동화시켜주며 이것은 ssh뿐만 아니라 scp,sftp같은 명령에도 똑같이 쓸 수 있다. expect같은 걸 써서 해도 되지 않느냐고 하는 사람도 있겠지만 그 편리성에서 비교도 안 됨은 말 안 해도 알 것이다. 게다가 커맨드 라인상에서 입력한 암호는 보안상 ps -ef 같은 명령으로 프로세스상태를 봐도 보이지 않게 숨겨주며 커맨드 라인상에서 암호를 직접 쓰기 싫으면 별도의 텍스트 파일에 암호를 저장해 놓고
sshpass -f pass.txt ssh user@somehost ls
처럼 쓸 수도 있다.( 이 경우 암호파일은 chmod명령어로 자신외에 읽기 권한을 빼서 보안에 주의하자.)
그런데 대상 서버에 처음 접속하는 경우에는 다음처럼
The authenticity of host 'somehost (XXX.XXX.XXX.XXX)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)?
known host에 추가할 것이냐는 질문을 하게 되는데 이런 경우에 sshpass는 동작하지 않으므로 이것을 암묵적으로 yes하고 넘어가려면 ssh에 -oStrictHostKeyChecking=no 옵션을 (이것은 한번 접속이 일어난 후에는 know_hosts에 등록되어서 다시 사용할 필요가 없다.) 그리고 사용하다 보면
Pseudo-terminal will not be allocated because stdin is not a terminal.
같은 경고메시지가 나오는 경우가 있는데 이것을 해결하려면 ssh에 -T 옵션을 줘서 다음 처럼하면 된다.
sshpass -p password ssh -T -oStrictHostKeyChecking=no user@somehost ls
그러면 지금까지 본 것을 종합하여 로컬에서 ssh 키를 생성하여 대상서버들에 키를 등록하는 과정을 자동화 시키는 스크립트를 한 번 만들어보자.
키를 만드는 과정은 http://www.xinublog.com/340 혹은 http://people.kldp.org/~eunjea/ssh/x87.html 를 참고하기 바란다.
key를 만들 때 pass phrase를 정하지 않고 그냥 엔터 치면 나중에 원격서버에 키를 등록하고 나서 해당 서버에 접속하면 바로 로그인 돼서 편리하지만 pass phrase를 어떤 값으로 입력하면 자신의 키가 등록된 서버에 접속하려면 그 pass phrase를 물어본다. 이것은 pass phrase를 빈 암호로 생성했을 때 자신의 비밀키가 유출되거나 해당 계정이 뚫렸을 경우 키를 등록해놓은 모든 서버들에 대한 제어권을 넘겨주게 되어 보안상 치명적이므로 그것을 방지하기 위한 것이다. 그래서 보안을 강화하고 싶으면 pass phrase를 사용하는 것이 좋다. 하지만 그렇게 되면 원격 서버에 접속할 때 pass phrase를 입력하는 작업도 수동으로 해야 하는데 그것을 자동화 시키고 싶으면 위의 링크의 마지막에 설명되어 있는 ssh-agent과 ssh-add를 사용하여 작업 전 한 번만 등록해놓으면 ssh-agent가 알아서 그 인증과정을 대리해준다. ssh-agent에 대한 더 자세한 사용법은 http://gypark.pe.kr/wiki/SSH 을 참고하기 바란다.
pass.txt에 암호가 담겨 있고 서버들의 리스트가 들어 있는 파일이 다음과 같다면
<hosts.txt>
somehost1
#somehost2
somehost3
somehost4
.
.
계속
다음과 같은 스크립트로 대상 서버들에 자신의 키 등록 작업을 일괄 처리할 수 있다.
<ssh_key_dist.sh>
#!/bin/bash
for m in `cat hosts.txt`
do
[[ ${m:0:1} == "#" ]] && continue # skip if comment
echo $m =======================================
sshpass -f pass.txt ssh -T -oStrictHostKeyChecking=no user@$m <<EOF1
if [ ! -e ".ssh" ]
then
mkdir .ssh
chmod 700 ~/.ssh
fi
EOF1
sshpass -f pass.txt scp ~/.ssh/id_dsa.pub user@$m:
sshpass -f pass.txt ssh -T user@$m <<EOF2
cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
chmod 644 ~/.ssh/authorized_keys
rm -f ~/id_dsa.pub
EOF2
done
위 쉘스크립트는 hosts.txt에서 접속대상 서버를 한 줄씩 읽어서 첫 문자가 #로 코멘트가 되어 있지 않으면 ssh로 접속해서 .ssh디렉토리가 존재하는지 채크해서 없으면 만들고 로컬에 생성된 공개키(여기서는 dsa방식을 사용했다 키파일 이름이 다르면 적절하게 고칠 것)를 접속대상 서버에 scp하고 다시 대상서버에서 로그인하여 복사한 공개키를 .ssh/authorized_keys 파일의 뒤쪽에 붙여서 키를 등록하고 복사했던 파일을 지우는 작업을 반복하는 것이다.
다시 생각해보니 ssh 연결을 3번씩이나 할 필요가 없어서 1번에 처리하도록 한 개정판 추가. (2009-02-16)
<개정판 ssh_key_dist.sh>
#!/bin/bash
PUBKEY=`cat ~/.ssh/id_dsa.pub`
for m in `cat hosts.txt`
do
[[ ${m:0:1} == "#" ]] && continue # skip if comment
echo $m =============================
sshpass -f pass.txt ssh -T -oStrictHostKeyChecking=no user@$m <<EOF1
if [ ! -e ".ssh" ]
then
mkdir .ssh
chmod 700 ~/.ssh
fi
umask 022
echo $PUBKEY >> .ssh/authorized_keys
EOF1
done
이것은 특정한 작업을 위한 예제이지만 http://aero.sarang.net/blog/2008/11/ssh.html 의 내용과 sshpass를 같이 응용하면 ssh을 이용한 다양한 작업을 키를 등록해놓지 않은 상황에서도 일괄적으로 편리하게 처리할 수 있을 것이다.
구글맵 한글판이 얼마 전 오픈 되었지만 남한 전 지역을 커버하는 위성영상(엄밀하게는 위성영상과 항공영상의 적절한 조합이지만)은 제공하지 않고 있다. 이 틈을 타서 야후지도에서 전국 60cm급 위성영상을 지원하더니 이제는 네이버 지도에서도 위성영상을 전격적으로 제공하기 시작했다.
전국범위를 커버하는 위성영상 서비스에 대한 예비홍보 및 마케팅은 다음이 가장 요란하게 했던 것 같은데 야후에 이어 네이버에 까지 연속으로 선제공격을 당해 김이 새어버려 어쩌나 싶다. 뭐 그건 내 사정이 아니니깐 넘어가고~
그래서 새로운 네이버 지도 위성영상 오픈 기념으로 구글어스 위에서 네이버 위성영상과 도로와 지형지물 정보만 투명하게 나오는 오버레이를 겹쳐 보는 mashup을 만들어 봤다.
동영상을 보면 알겠지만 청와대 지역까지 확대해서 네이버 위성영상으로 변경해보면 청와대가 보안상 흐릿하게 처리된 것을 볼 수 있으며 구글에서 상세 위성영상을 제공하지 않는 팔당호 지역을 거쳐 양평 쪽으로 화면을 이동해 가면 네이버 위성영상이 그 부분을 잘 메워 줌을 볼 수 있을 것이다.
하지만 네이버 위성영상을 대강 사용해보니 부산을 포함 어떤 지역의 해상도는 고화질 영상을 확보하지 못했는지 모르겠지만 그 품질이 실망스러울 정도이며 비도심 지역 대부분에서도 야후의 위성영상 보다 질이 떨어지는 곳이 많다. 이외에도 어떤 지역에서는 확대시 세부정보가 아직 구축되어 있지 않는 등 급하게 내놓은 것 같은 흔적이 보여서 그 완성도가 좀 아쉽다.
이제 다음지도의 위성영상은 어떻게 나올지 기대해봐야겠다.
전국범위를 커버하는 위성영상 서비스에 대한 예비홍보 및 마케팅은 다음이 가장 요란하게 했던 것 같은데 야후에 이어 네이버에 까지 연속으로 선제공격을 당해 김이 새어버려 어쩌나 싶다. 뭐 그건 내 사정이 아니니깐 넘어가고~
그래서 새로운 네이버 지도 위성영상 오픈 기념으로 구글어스 위에서 네이버 위성영상과 도로와 지형지물 정보만 투명하게 나오는 오버레이를 겹쳐 보는 mashup을 만들어 봤다.
동영상을 보면 알겠지만 청와대 지역까지 확대해서 네이버 위성영상으로 변경해보면 청와대가 보안상 흐릿하게 처리된 것을 볼 수 있으며 구글에서 상세 위성영상을 제공하지 않는 팔당호 지역을 거쳐 양평 쪽으로 화면을 이동해 가면 네이버 위성영상이 그 부분을 잘 메워 줌을 볼 수 있을 것이다.
하지만 네이버 위성영상을 대강 사용해보니 부산을 포함 어떤 지역의 해상도는 고화질 영상을 확보하지 못했는지 모르겠지만 그 품질이 실망스러울 정도이며 비도심 지역 대부분에서도 야후의 위성영상 보다 질이 떨어지는 곳이 많다. 이외에도 어떤 지역에서는 확대시 세부정보가 아직 구축되어 있지 않는 등 급하게 내놓은 것 같은 흔적이 보여서 그 완성도가 좀 아쉽다.
이제 다음지도의 위성영상은 어떻게 나올지 기대해봐야겠다.
Sun사의 ZFS, DTrace, FMA, SMF등 각종 소프트웨어/하드웨어 기술들을 집약하여 차세대 스토리지를 만들고자 구성된 Fishworks Engineering Team에서 근무하는 Brendan이란 사람이 스토리지 앞에서 소리를 지르면 디스크에 지연현상을 발생시켜 성능을 떨어뜨린다는 것을 증명해 보인 동영상을 youtube에 올렸다.
어떻게 보면 우스꽝스럽지만 실제로 큰 소리를 지르면 그 진동에 의해 디스크의 기계적 구조상 non-repeatable runout (NRRO)라는 현상이 발생하여 디스크에 영향을 줄 수 있다고 한다. 그렇다면 서버에 바로 장착된 DAS형태의 디스크에도 마찬가지 현상이 발생할 수 있을 것 같은데 심심하면 직접 테스트해봐도 재미있을 것 같다.
헤더와 자기플레터같은 기계적 구조를 쓰지 않고 플래시 메모리를 쓰는 SSD를 쓰면 이런 현상을 피해갈 수 있겠지만 SSD가 아직 용량대비 고가라 SSD가 장착된 대형 스토리지는 그 시장이 이제 막 확대되어 가는 시기이므로 하드디스크가 SSD로 모두 대체되는 날이 오기 전에는 일하다 열받는다고 소리 지르지 말자. :)
참고 기사 및 자료:
http://blogs.sun.com/bmc/entry/catching_disk_latency_in_the
http://blogs.sun.com/brendan/entry/unusual_disk_latency
어떻게 보면 우스꽝스럽지만 실제로 큰 소리를 지르면 그 진동에 의해 디스크의 기계적 구조상 non-repeatable runout (NRRO)라는 현상이 발생하여 디스크에 영향을 줄 수 있다고 한다. 그렇다면 서버에 바로 장착된 DAS형태의 디스크에도 마찬가지 현상이 발생할 수 있을 것 같은데 심심하면 직접 테스트해봐도 재미있을 것 같다.
헤더와 자기플레터같은 기계적 구조를 쓰지 않고 플래시 메모리를 쓰는 SSD를 쓰면 이런 현상을 피해갈 수 있겠지만 SSD가 아직 용량대비 고가라 SSD가 장착된 대형 스토리지는 그 시장이 이제 막 확대되어 가는 시기이므로 하드디스크가 SSD로 모두 대체되는 날이 오기 전에는 일하다 열받는다고 소리 지르지 말자. :)
참고 기사 및 자료:
http://blogs.sun.com/bmc/entry/catching_disk_latency_in_the
http://blogs.sun.com/brendan/entry/unusual_disk_latency
나이를 먹어가니 새해를 맞는 기분이 과히 좋지만은 않다.
보신각 타종을 생중계하는 TV를 보며 2009년을 맞는데 아나운서가 하는말~
"기축년 새해가 밝았습니다."
미안하지만 양력으로 2009년이 된 것이지 기축(己丑)년이 올려면 아직 멀었다.
참고: http://www.google.co.kr/search?complete=1&hl=ko&q=%BE%E7%B7%C2+2009%B3%E2+1%BF%F9+1%C0%CF
소위 천간(天干)-갑을병정무기경신임계(甲乙丙丁戊己庚辛壬癸)과 지지(地支)-자축인묘진사오미신유술해(子丑寅卯辰巳午未申酉戌亥)의 조합으로 이루어지는 60갑자는 음력의 년,월,일에 각각 세차,월건,일진으로 붙이는 것으로 음력에 써야만 의미가 있다. 따라서 음력 2009년 1월1일(양력 2009년 1월 26일)이 되어야 기축년이 되는 것이다.
뭐 그런 것 가지고 꼬치꼬치 따지고 그러냐면 할 말 없지만 사실 자체는 알고 넘어가자는 얘기..
아참~ 썰렁한 저의 블로그를 찾아주시는 여러분 새해 복 많이 받으세요~ m(_ _)m
보신각 타종을 생중계하는 TV를 보며 2009년을 맞는데 아나운서가 하는말~
"기축년 새해가 밝았습니다."
미안하지만 양력으로 2009년이 된 것이지 기축(己丑)년이 올려면 아직 멀었다.
참고: http://www.google.co.kr/search?complete=1&hl=ko&q=%BE%E7%B7%C2+2009%B3%E2+1%BF%F9+1%C0%CF
소위 천간(天干)-갑을병정무기경신임계(甲乙丙丁戊己庚辛壬癸)과 지지(地支)-자축인묘진사오미신유술해(子丑寅卯辰巳午未申酉戌亥)의 조합으로 이루어지는 60갑자는 음력의 년,월,일에 각각 세차,월건,일진으로 붙이는 것으로 음력에 써야만 의미가 있다. 따라서 음력 2009년 1월1일(양력 2009년 1월 26일)이 되어야 기축년이 되는 것이다.
뭐 그런 것 가지고 꼬치꼬치 따지고 그러냐면 할 말 없지만 사실 자체는 알고 넘어가자는 얘기..
아참~ 썰렁한 저의 블로그를 찾아주시는 여러분 새해 복 많이 받으세요~ m(_ _)m

