들어가며:

  우리가 ssh를 접속해서 무언가를 작업을 할때 세션이 타임아웃되서 실행중이던 작업이 종료될때가 있다. 그럼 정말 너무 화가 치밀어 오르며, 다시 접속을 한 뒤에 그전에 작업을 다시 실행한다. 그래서 ssh connection이 끊어져도 작업을 할 수 있는 방법을 찾아보니 nohup을 이용해서 하는 방법이 있다. nohup을 이용하면 결과적으로는 세션이 타임아웃이 되어도, 내가 실행한 작업은 백그라운드에서 계속 실행한다. nohup을 사용하는 방법은 아래와 같다.

nohub 사용하기:

$ nohup command 1>/dev/null 2>&1 &

  위에서 사용하는 명령어에 대해서 이해를 하기 위해서는 아래 내용을 읽어보시기 바랍니다. 

I/O Redirection:

  bash와 다른 shell에서는 I/O redirection을 제공합니다. I/O는 3가지 표준스트림이 존재합니다. 쉽게 말하면 화면에 키보드로 입력하는 스트림, 스크린에 출력을 해주는 스트림, 에러를 출력하는 스트림이 존재합니다. 아래 내용은 키보드, 스크린에 입력하고 출력하는 스트림을 redirection하는 방법에 대해서 설명합니다. 

I/O streams numbers :

- 표준입력(stdin): 0
- 표준출력(stdout): 1
- 표준에러(stderr): 2

1>/dev/null 이란?:

  아래 명령어를 쉘에서 실행을 하면 ls -al의 결과가 result.log에 저장이 됩니다. 

$ ls -al > result.log
$ ls -al 1>result.log

  그렇다면 ls -al의 결과를 화면에 출력하기 싫으면 어떻게 할까요? 간단하게 화면에 출력되는 표준출력을 result.log에 저장하면 됩니다. 파일로도 남기기 싫다면? 그냥 바로 쓰레기통(/dev/null)에 넣어버리면 됩니다. 결과적으로 아래와 같이 입력하면 어떤 값도 화면에 출력되지 않습니다.

$ ls -al > /dev/null
$ ls -al 1>/dev/null

2>&1 이란? (stderr redirect to stdout):

   아래와 같이 입력은 2번 표준에러 파일디스크립터를 1번 파일디스크립터로 redirection 라는 말입니다. 풀어 말하면 1번 표준출력을 /dev/null로 redirection을 했기 때문에, 2번 표준에러도 1번이 redirection하는 /dev/null로 redirection 해라 라는 말입니다. (2—> 1 —> /dev/null)

$ ls -al 2>&1

 & 이란?:

  &는 실행 작업을 백그라운드에서 실행하는 역할을 합니다. 결과적으로는

$ nohub command 1>/dev/null 2>&1

  위 실행을 &(백그라운드)로 보낸다. 입니다. 결과적으로는 로그아웃/세션 타임아웃이 되어도 실행된 커맨드의 화면출력 결과를 /dev/null로 버리고, 에러메시지도 화면에 출력하지 않습니다. 

들어가며

  Hadoop의 MapReduce와 HDFS 등 Hadoop Ecosystem을 설치하고, 설정을 하는게 매우 번거로운 작업이 많다. 그렇기 때문에 각종 Application을 패키지화 해서 개발자들에게 제공하는 회사들이 등장하기 시작한다. Cloudera와 Hortonworks가 바로 자신들만의 Manager를 통해서 각종 어플리케이션을 배포하고, 설정을 쉽고 빠르게 할 수 있도록 도움을 주고 있다. 그렇기 때문에 결과적으로 Hadoop, Spark, Hive, 그리고 Hue와 같은 기존에는 독립적으로 설치해서 사용했다면, 이제는 Cloudera에서 제공하는 Manager를 통해서 설치를 해보자.

Pre-Installation

  설치하기 전에는 호스트 등록과, ssh-keygen을 통해 ssh-key를 등록을 해야한다. 이 작업을 하는 이유는 추후에 Cloudera Manager를 통해 설치할 호스트의 ip와 hostname을 등록을 하고, ssh-key를 등록하므로써, 비밀번호 없이 ssh로 호스트에 접근이 가능해야, 배포를 어떠한 제약이 없이 가능하다. 

1. ssh-key 등록

[Linux] SSH key 생성 및 패스워드 없이 로그인하기 을 참고해서 등록을 하면된다. 

2. 호스트 등록하기

  호스트는 /etc/hosts의 경로에서 등록이 가능하다. 맨 아래에 자신이 추가하고자 하는 ip hostname을 등록하자
예)  123.123.123.123 banana.hostname.com
이렇게 등록을 하고 나서 확인을 해야할 사항은 아래 커맨드를 입력했을때 아무런 반응없이 호스트에 연결이 되면 된다.
$ ssh <account>@banana.hostname.com
만약에 입력을 했는데, 비밀번호를 물어보면 1. ssh-key등록을 다시 수행하고, unknown hostname의 에러가 발생하면, 2번을 제대로 수행했는지 확인하면 된다. 

Cloudera Manager 다운로드, 설치, 배포

  이제는 본격적으로 Cloudera Manager를 다운로드 받고 설치하면 된다. Cloudera Manager는 클러스터의 노드 중에서 호스트로 사용할 노드 1대에 설치하면 된다. 느낌은 Cloudera Manager를 설치하고, 설치된 서버에서 각 노드로 Hadoop, Spark, Hive를 설치 배포를 하는 개념이다. 이러한 작업을 하기 위해서 설치하기 전에 앞서 ssh-key와 호스트를 등록했다. 

1. 바이너리 다운로드 및 설치

$ wget https://archive.cloudera.com/cm5/installer/latest/cloudera-manager-installer.bin
$ sudo chmod u+x cloudera-manager-installer.bin
$ sudo ./cloudera-manager-installer.bin 

설치가 완료되면, http://localhost:7180/으로 접속이 가능한지 확인한다. Cloudera Manager의 웹 사이트가 보이면 설치는 완료됬다. 이제 배포만 하면된다.

2. 배포하기

  서버에 Cloudera Manager가 설치가 됬다면,  admin/admin으로 로그인해서 안내를 해주는 순서를 따라가면된다. 만약에 에러가 생기면 /var/log/cloudera-scm-agent/cloudera-scm-agent.log를 sudo권한으로 보면 된다. 

$ sudo tail -F /var/log/cloudera-scm-agent/cloudera-scm-agent.log

  배포를 하다가 에러가 생기면 거의 대부분이 hostname에 관련된 오류일 것이다. 그러면 hostname이 정확하게 지정이 되어있는지 확인한다. 나같은 경우에는 parcel을 설치하는 freezing이 되었다. 이런 난관에서도 무엇을 보면 되느냐... 바로 로그를 확인한다. 이미 지나간내용이라면 아래와 같이 진행되는 로그를 보기 위해서는 위 커맨드를 수행하면 된다. 

$ sudo more -T /var/log/cloudera-scm-agent/cloudera-scm-agent.log

  위에서 freezing된 문제를 확인해본 결과 문제점은 이것 또한...  hostname때문이 이였음… 왜 호스트 네임이 지멋대루여, 컴퓨터는 거짓말안하는데 거짓말하는거 같단 말이지요. 이렇게 배포가 완료되면, 각 설정파일을 자신의 하드웨어 스펙에 맞게 수정하면 된다. 이제 마음껏 분산에서 처리를 해보시길.

들어가며

  linux에서 ssh키를 이용해 서버에 접속하는 경우가 많습니다. 특히 분산처리할때는 ssh키를 등록해 놓고 처리를 해야지 패스워드 없이 작업을 원활하게 진행이 가능합니다. 그렇다면 ssh키를 등록한다는 말이 무엇을까요? ssh-key는 내가 너의 비밀번호를 이미 알고 있으니, 다음부터는 너한테 비밀번호 물어보지 않고 접속할께 알겠지? 라는 의미라고 생각하시면 됩니다. 

  등록하는 방법은 서버와 클라이언트로 나누어서 생각하면, 서버는 내가 ssh를 통해 접속하고자 하는 컴퓨터를 의미하고, 클라이언트는 서버에 접속하기 위한 컴퓨터라고 생각하시면 됩니다. 클라이언트에서 ssh키를 생성하고, 생성된 키를 서버에다가 등록해주면 끝입니다. 그럼 생성하고 등록하는 방법에 대해서 알아보도록 하겠습니다.

ssh key 생성하기

$ ssh-keygen -t rsa

ssh key 등록하기

ssh-keygen으로 생성된 ~/.ssh/rsa.pub의 정보를 authorized_keys에 등록하시면 됩니다. 이때 등록하기 위한 방법은 rsa.pub을 접속하고자 하는 서버에 ~/.ssh/authorized_keys에 넣으면 됩니다. 이때 만약에 id_rsa.pub을 파일을 옮기기 위해서는 scp를 사용하시면 됩니다. 

$ cat id_dsa.pub >> authorized_keys

이렇게 등록을 하고나면 ssh로 접속할때 비밀번호를 물어보지 않고, 바로 접속이 가능합니다. 


ssh key 생성 및 등록 한방에

  위에서는 ssh를 생성하고, 등록하는 원리를 이해하시고 실제 하실때는 아래와 같이 하는게 훨씬더 수월합니다.  ssh-copy-id의 명령어를 사용하시면 됩니다. 이 명령어는 내가 접속을 하는 컴퓨터에서 ssh-copy-id를 사용하시면 되고 뒤에 쓰는 계정과 호스트는 서버를 쓰시면 됩니다. 예를 들어서 내가 host1에서 host2를 접속하고 싶을때는 host1에서 

$ ssh-copy-id account@host2

를 입력하면 알아서 host2의 ~/.ssh/authorized_keys에 host1의 ~/.ssh/id_dsa.pub의 내용이 복사가 됩니다. 

이후에는 host1에서 

$ ssh account@host2

를 하시면 비밀번호 없이 접속이 가능합니다.

  1. kirby 2017.03.22 10:12

    $ ssh-keygen -t dsa 오타났음요
    dsa -> rsa로 변경하셈

    • 2017.03.22 12:10

      비밀댓글입니다

Github 시작하기 및 ssh-key 등록하는 방법

들어가며

  Git은 코드 버전 관리를 해주는데 중요한 Software라고 할 수 있습니다. 우리가 흔히 학생때 조별 과제를 하게 되면 작은 프로젝트를 자주 진행하게 됩니다. 그 때 바로 등장한 멍청하지만 어떻게 보면 작은 프로젝트에 현명한... 방법중에 하나인 hand-merge 그냥 손머지죠. 이렇게 해왔는데, 프로젝트의 규모가 커지고, 기간이 길어지다 보면 자연스럽게 손머지는 한계에 부딪히게 됩니다. 저는 git을 코드관리도 중요하지만 공유하고 협업이라는 모두가 함께 만들어가는 opensource의 중요성에 대해서 더 중요하게 생각합니다. 소프트웨어 개발자라면 github 아이디 하나 정도는 갖고 있어야 하겠죠. 요즘에는 오픈소스 활동이나 stackoverflow 활동도 중요하기 때문에 없으면 가입을 합시다. 이번 포스팅은 Github 아이디에 SSH Key를 등록하는 방법에 대해서 설명해 드리겠습니다.   

1. ssh-key 생성하기 및 ssh-agent에 추가

  생성하기 전에 기존에 사용하시던 ssh-key가 있는 경우에는 바로 등록을 하시면 됩니다. 만약 없으시다면 생성하는 방법을 따라하시면 됩니다. 터미널에서 아래와 같은 명령어를 입력하고, 결과가 없다면 ssh key를 생성하셔야합니다. ssh-keygen을 하는 과정에서 중간에 나오는 질문에는 엔터로 넘기면 됩니다. (패스워드 설정 등등)

# ssh-key가 있는지 확인
ls -al ~/.ssh
# ssh-key 생성
ssh-keygen -t rss -b 4096 -C "your_email@example.com"

의 결과로 public/private rss key pair가 생성되고, ssh-agent에 추가를 해야 합니다.  ssh-agent를 백그라운드에서 시작한 후에 추가를 합니다.

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

를 하시면 ssh-key 생성 및 ssh-agent에 추가가 완료 됩니다.


2. ssh-key 등록하기

  이제 생성된 ssh-key를 나의 github account에 추가하시면 됩니다. [Github 바로가기]

  사이트에서 로그인을 하게 되면 오른쪽위에 자신을 클릭하면 아래오 같은 화면에 보입니다. [Settings] --> [SSH and GPG keys] --> [New SSH key]를 클릭합니다. 그럼 아래와 같은 화면이 출력이 됩니다. 

클립 보드에 ~/.ssh/id_rsa.pub의 내용을 복사합니다. 아래 방법 중에 아무거나 사용하셔도 됩니다.  (만약 pbcopy가 없으면 ~/.ssh/id_rsa.pub의 경로에서 텍스트 에디터(vi)를 실행한 후에 복사 붙여넣기 하시면 됩니다.)

bcopy < ~/.ssh/id_rsa.pub
cat ~/.ssh/id_rsa.pub
vi ~/.ssh/id_rsa.pub

마지막으로 Add SSH key를 누르면 아래와 같은 화면이 나오면서 완료가 됩니다. 

여기까지 하시면 ssh key가 등록 되었습니다. 

[참고] https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/

[AWS] AWS EC2 ssh 접속 오류 Permission denied (publickey)

들어가며

AWS에서 EC2를 생성한 후에 터미널에서 ssh를 통해 접속을 시도할때 생기는 에러에 대해서 설명하려고 합니다. 아마존에서 인스턴스를 생성하고 나면 다운로드 받을 수 있는 파일이 *.pem 파일입니다. 해당 파일은 우리의 서버로 접속을 가능하게 해주는 인증을 해주는 역할이라고 생각하시면 됩니다. 해당 파일에는 인스턴스의 private key의 내용이 담겨 있습니다. 그 만큼 보안에 중요한 파일입니다. 어디에서나 해당 키가 있어야 접근이 가능합니다. 만약 *.pem파일을 분실하면 매우 번거롭게 다시 재발급을 받아야 하기 때문에 항상 백업을 해 놓는게 중요합니다. 


에러내용

ssh를 통해 -i 옵션으로 인스턴스의 private key를 파일로 인증을 하는데요. user는 계정명, host는 dns-server를 입력하시면 접속이 가능합니다. 하지만 최초 접속시에 아래 화면과 같이 에러가 발생하는데요. 에러 내용을 보면 Warning이 뜨면서 보안 관련된 문제가 발생합니다.

(It is required  that your  private key files are NOT accessible by others.)

$ ssh -i parasite.pem user@host


해결방법

이때  private key는 permission이 다른  그룹/ 유저로부터 접근 권한이 있어서는 안됩니다. 즉 권한을 변경해줘야 사용이 가능한데요. 해결하기 위해서는 parasite.pem파일의 권한을 변경 하면 됩니다. linux명령어인 chmod를 통해 600으로 변경해주면 접속이 가능합니다.

$ sudo chmod 600 parasite.pem


'클라우드 > AWS' 카테고리의 다른 글

[AWS] AWS EC2 ssh 접속 오류 Permission denied (publickey)  (0) 2016.03.19

+ Recent posts