티스토리 뷰

리눅스 시스템은 시리얼 포트를 통해 모니터 출력을 제공한다. 직렬 포트로 직역해서 사용하기도 하는데 대충 아래 그림과 같이 생겼다. 아마도 예전 CRT 모니터쯤에서 흔히 봤음직한 포트인데, 이 단자를 통해 리눅스 시스템의 터미널로 접근이 가능하다.

시리얼 포트

 

putty나 SecureCRT 같이 SSH, Telnet을 지원하는 터미널 에뮬레이터에는 serial port옵션도 제공을 하니 많이들 사용하는 방법이다. 시리얼 포트는 기기에 일반적인 통신이 불가능한 상태에서 사용하게 된다. 보통 공장초기화 상태의 기기나, sshd, telnetd 같은 데몬이 정상적으로 서비스되고 있지 않아서 기기에 접속이 불가능한 경우에 사용하면 용이하겠다. 클라우드로 세상이 바뀌어가면서 시리얼 포트는 점점 잊혀갔지만 여전히 필요한 순간들이 있다. 어떤 경우로든 인스턴스에 접속이 불가능해진 경우라던지, 인스턴스 안에 방화벽으로 ssh 패킷을 차단시켜버렸다던지 등 경우의 수는 많다. 대부분이 사용자의 실수이거나 시스템이 의도치 않게 동작하는 경우인데 인스턴스를 재부팅해도 해결되지 않는 상황이 돼버렸다면 답답할 수밖에 없다. 이런 경우에 시리얼 포트로 접속해서 시스템을 정상화시킬 수 있겠다.

구글 클라우드에도 인스턴스에 시리얼 포트로 접속하는 기능을 제공하고 있는데 살펴보도록 하자. 우선 콘솔에 접속하고 시리얼 포트로 접속하려는 인스턴스를 들여다보자. 아래와 같이 Remote access에 Enable connecting to serial ports를 찾아볼 수 있을 것이다.

VM instance details

 

여기서 체크박스에 체크를 해도 되고, gcloud sdk가 편한 사용자는 아래와 같은 명령어를 터미널에서 입력해도 된다. instance-name만 접속하려는 인스턴스의 이름으로 바꿔주시라.

gcloud compute instances add-metadata instance-name \
    --metadata serial-port-enable=TRUE

 

그 다음으로는 ssh로 해당 인스턴스에 접속해서 비밀번호를 설정해줘야 한다. 시리얼 포트로 접속하게 되면 로그인부터 해야 하는데 구글 클라우드의 인스턴스는 기본적으로 비밀번호 기반 로그인을 허용하도록 구성되어 있지 않기 때문이다. 아래와 같이 인스턴스에 접속하면 되는데 기본 설정되어 있는 zone과 다른 영역의 인스턴스에 접속하려면 --zone 명령어를 사용하도록 하자.

gcloud compute ssh instance-name

 

이제 패스워드를 설정해준다.

sudo passwd $(whoami)

 

그러고 나서 시리얼 포트로 연결하는 명령어는 다음과 같다. 위와 마찬가지로 instance-name에 접속하려는 인스턴스의 이름을 넣어주면 된다.

gcloud compute connect-to-serial-port instance-name

 

접속하게 되면 계정의 접속 정보를 묻는 창이 나오는데 위에서 설정한 계정 정보로 로그인하도록 한다. 시리얼 포트에서 빠져나오기 위해서는 ~. 키를 연속으로 누르면 된다. 기타 다른 명령어는 ~?를 눌러서 확인하도록 하자.

$ ~?
Supported escape sequences:
 ~.   - terminate connection (and any multiplexed sessions)
 ~B   - send a BREAK to the remote system
 ~C   - open a command line
 ~R   - request rekey
 ~V/v - decrease/increase verbosity (LogLevel)
 ~^Z  - suspend ssh
 ~#   - list forwarded connections
 ~&   - background ssh (when waiting for connections to terminate)
 ~?   - this message
 ~~   - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

 

일반적으로 시리얼 포트로의 접속은 사용할 일이 없다. 하지만 필연적으로 접속해야 하는 상황이 온다면 위와 같은 방법을 인지하고 있으면 좋다. 뭐 극단적인 예를 들어서 우분투 방화벽을 공부하는 중인데 ssh 접속을 deny 시켜버려서 더 이상 터미널로 접속이 안된다던가. 기껏 설정해 놓은 인스턴스를 삭제하고 다시 만들 수는 없지 않은가 :-) 

 


레퍼런스 : Interacting with the serial console

댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday