SSH란?

네트워크를 통해 다른 컴퓨터에 로그인하여 명령을 실행하기 위한, 통신을 암호화하는 프로토콜(및 그 명령). 서버는 기본으로 TCP의 22번 포트에서 대기한다. 인증에는 비밀번호 외에 공개 키 인증이 자주 쓰이며, 자신이 가진 개인 키에 대응하는 공개 키를 서버의 ~/.ssh/authorized_keys에 등록해 둔다. 같은 연결 위에서 scp나 rsync에 의한 파일 전송, 포트 포워딩도 할 수 있다.

일본어 명칭: SSH

SSH은(는) Linux와 커맨드 라인 기초, 네트워크 기초 등 2개 분야의 연습 문제 3개에 나와요.

분야: Linux와 커맨드 라인 기초

공개 키 인증의 구조

ssh-keygen으로 개인 키와 공개 키의 쌍을 만들고, 공개 키(.pub 파일)만 서버의 authorized_keys에 등록합니다. 접속할 때 클라이언트는 개인 키로 서명을 만들어 서버에 제시하고, 서버는 등록된 공개 키로 그것을 확인하므로 개인 키 자체는 네트워크에 흐르지 않습니다. 개인 키는 패스프레이즈로 보호하며, ssh-agent에 맡겨 두면 접속할 때마다 입력하는 수고를 줄일 수 있습니다.

서버 확인

처음 접속할 때 ssh는 서버 호스트 키의 지문(핑거프린트)을 보여 주며, 받아들이면 ~/.ssh/known_hosts에 기록합니다. 다음부터는 기록과 다른 키가 제시되면 경고를 내고 멈추므로, 위장한 서버를 알아챌 수 있습니다. 서버를 교체했다는 등의 이유가 없는데도 경고가 나왔을 때는 그대로 접속을 계속해서는 안 됩니다.

설계 현장에서의 사용법

EDA 도구가 동작하는 계산 서버에는 자신의 PC에서 ssh로 로그인하여 시뮬레이션을 투입하거나 결과를 확인합니다. ~/.ssh/config에 호스트의 별명, 사용자 이름, 키 파일, 경유 서버(ProxyJump)를 써 두면 ssh server1이라고만 입력해도 접속할 수 있습니다. 화면을 사용하는 도구는 X11 포워딩이나 원격 데스크톱 구조와 조합하여 사용합니다.

도전해 보기: SSH 관련 문제

SSH로 접속한 서버에서 시간이 걸리는 처리를 './run.sh &'로 시작한 다음 접속을 끊었더니 처리도 멈춰 버렸다. 접속을 끊은 후에도 처리를 계속하게 하는 시작 방법으로 가장 적절한 것은?

  1. A./run.sh > run.log 2>&1 &
  2. Bnice -n 19 ./run.sh > run.log 2>&1 &
  3. Cnohup ./run.sh > run.log 2>&1 &
정답과 해설 보기

정답: C. nohup ./run.sh > run.log 2>&1 &

접속이 끊기면 터미널의 행업을 알리는 SIGHUP이 셸(shell)에 보내지고, bash 등의 셸은 자신의 작업에도 SIGHUP을 보냅니다. SIGHUP을 받았을 때의 기본 동작은 종료이므로 백그라운드 작업도 멈춥니다. nohup은 명령이 SIGHUP을 무시하도록 하여 시작하며, 출력을 파일로 향하게 해 두면 접속을 끊은 후에도 처리가 계속됩니다. 출력을 리다이렉션하지 않고 터미널에서 시작하면, nohup은 출력을 nohup.out이라는 파일에 씁니다. tmux나 screen 같은 터미널 다중화 소프트웨어를 사용하여 나중에 같은 화면에 다시 연결하는 방법도 자주 쓰입니다.

자주 묻는 질문

'Permission denied (publickey)'라고 표시되며 접속할 수 없습니다. 무엇을 확인하나요?

서버의 ~/.ssh/authorized_keys에 사용 중인 개인 키에 대응하는 공개 키가 등록되어 있는지, 접속하는 사용자 이름이 올바른지를 확인합니다. 서버 측의 ~/.ssh나 authorized_keys의 권한이 너무 느슨하면(다른 사람이 쓸 수 있으면) 안전을 위해 키가 사용되지 않는 경우가 있으므로, ~/.ssh는 700, authorized_keys는 600 등으로 합니다. ssh -v를 붙이면 어느 키를 시도했는지가 표시됩니다.

scp와 rsync는 어떻게 구분해서 쓰나요?

둘 다 ssh 위에서 파일을 전송할 수 있습니다. scp는 단순한 복사에 알맞고, rsync는 전송처와의 차이만 보내므로 큰 디렉터리를 반복해서 동기화하거나 도중에 끊긴 전송을 다시 할 때 효율적입니다. rsync -av --delete처럼 사용하면 전송처를 전송원과 같은 상태로 맞출 수 있지만, --delete는 전송처에만 있는 파일을 지우므로 주의가 필요합니다.

해설 속 SSH

SSH이(가) 나오는 문제 (3)

  1. SSH로 접속한 서버에서 시간이 걸리는 처리를 './run.sh &'로 시작한 다음 접속을 끊었더니 처리도 멈춰 버렸다. 접속을 끊은 후에도 처리를 계속하게 하는 시작 방법으로 가장 적절한 것은?
  2. 자신의 PC에서 ssh-keygen을 사용하여 공개 키 인증용 키 쌍을 만들고, 서버 server1에 비밀번호 없이 ssh로 접속할 수 있게 하고 싶다. 키를 두는 방법으로 올바른 것은?
  3. 프로토콜과 그 서버가 표준으로 사용하는 포트 번호의 조합으로 올바른 것은?

관련 용어

셸(Shell) 입출력 리다이렉션(I/O Redirection) 포트 번호(Port Number) HTTP(하이퍼텍스트 전송 프로토콜) DNS(도메인 네임 시스템) 슈퍼유저(Superuser) 시그널(Unix 시그널) 심볼릭 링크(Symbolic Link) 정규 표현식(Regular Expression) 파이프(|)

용어집으로 돌아가기