0 views
기초
1. 개요 및 정의
1.1 한줄 요약
- SSH는 Telnet의 취약한 통신에서 보안을 추가하여 안전한 원격 접속을 가능하게 해준다.
1.2 정의
- SSH(Secure Shell)는 보안이 취약한 네트워크 상에서 안전하게 시스템을 관리하고 파일을 전송하기
위해서 설계된 네트워크 프로토콜이다.
- OSI 7계층에서 애플리케이션 계층에서 동작하며 기본적으로 TCP 22번 포트를 사용한다.
- 기존 Telnet이나 Rsh와 다르게 모든 데이터를 암호화하여 전송한다.
2. 동작 원리
- 내부적으로 비대칭키와 대칭키 암호화 방식을 혼합한다.
2.1 간단한 분석
- 버전 교환
- 클라이언트 서버는 서로 지원하는 SSH 프로토콜 버전을 교환하여 호환성을 확인한다.
- 키 교환 및 세션 키 생성
- 공개키를 교환하지 않고 공용 비밀키를 생성하고 이후 모든 통신은 해당 키를 사용해서 비대칭 암호화 방식으로 이루어진다.
- 서버 인증
- 클라이언트는 접속하려는 서버가 위조된 서버가 아닌지 확인해야 한다.
- 최초 접속 시 클라이언트는 서버의 지문을 ~/.ssh/known_hosts 파일에 저장한다.
- 이후 접속 시 저장된 정보와 대조하여 MITM 공격을 방지함
- 사용자 인증
- 세션이 암호화된 터널을 통해 안전해지면, 서버는 클라이언트에게 접근 권한이 존재하는지 물어본다.
- 이때 비밀번호 방식 또는 SSH 키 페어 방식이 사용된다.
3. 사용법 및 구문
- 가장 널리 사용되는 OpenSSH 클라이언트를 기준으로 본다.
3.1 기본 접속 구문
ssh [옵션] [사용자명]@[호스트주소]
3.2 예시
-
기본 비밀번호 접속이 가장 일반적이다. (기본 22포트)
ssh Swoo@192.168.1.21 # 실행 후 Password 입력 -
특정 포트 지정 접속 (-p)
ssh -p 2222 Swoo@Swoo.com -
개인키를 이용한 접속 (-i)
ssh -i /경로/Swoo-Key.pem Swoo@Swoo.com -
디버깅 (-v)
ssh -vv Swoo@Swoo.com # v의 개수에 따라 디버깅 상세도가 달라짐
3.3 기타
- 보통 ssh 연결 방식을 추천한다.
- 또한 Root 로그인 차단 비밀번호 인증 비활성화 설정을 해놓는게 좋고 포트도 22가 아닌 다른것을 사용하는 것이 좋다.
- SSH 개인키 파일의 권한은 소유자만 읽을 수 있도록 변경하는 것이 좋다.
SSH 개인 키
1. 개요
- SSH 개인키는 비대칭 암호화 방식인 공개키 기반 구조에서 사용자를 인증하기 위해 생성되는 비밀 파일이다.
- 쌍을 이루는 공개키는 서버에 저장되어 자물쇠 역할을 하고 개인키는 클라이언트에 저장되어 그 자물쇠를 여는 열쇠 역할을 수행한다.
2. 동작 원리
- SSH 접속 시 비밀번호를 입력하지 않아도 되는 이유는 내부적으로 ‘Challenge-Response’ 프로토콜이 작동하기 때문이다.
2.1 인증 프로토콜
- 접속 요청
- 클라이언트가 서버에 "나 접속할래, 내 공개키 ID는 이거야"라고 요청한다.
- 검증 준비
- 서버는
authorized_keys파일에 해당 공개키가 있는지 확인한다.
- 서버는
- 챌린지(Challenge)
- 서버는 난수를 생성하여 클라이언트에게 보낸다. ("이 난수를 너의 개인키로 암호화(서명)해서 보내봐.")
- 서명(Signing)
- 클라이언트는 자신의 개인키를 사용하여 서버가 보낸 난수에 전자 서명을 하고, 이를 서버로 되돌려 보낸다.
- 검증(Verification)
- 서버는 가지고 있던 공개키로 클라이언트의 서명을 해독(검증)한다.
- 접속 허용
- 해독된 값이 처음에 보낸 난수와 일치하면, "진짜 열쇠를 가진 주인이 맞구나"라고 판단하고 접속을 승인한다.
3. 사용법 및 구문
3.1 키 생성 (Generate)
-
가장 강력하고 권장되는 Ed25519 알고리즘을 사용하여 키를 생성한다.
# -t: 타입(알고리즘), -C: 코멘트(주로 이메일) ssh-keygen -t ed25519 -C "admin@company.com" -
명령 실행 후, 키를 저장할 경로와 Passphrase(키 비밀번호)를 묻는다.
- 보안을 위해 Passphrase 설정을 권장한다.
3.2 파일 구조
- 생성된 키는 보통
~/.ssh/디렉터리에 저장된다.id_ed25519: 개인키. (절대 공개 금지)id_ed25519.pub: 공개키. (서버의~/.ssh/에 등록)
3.3 접속 시 사용 (i 옵션)
-
기본 경로(
~/.ssh/id_rsa등)가 아닌 다른 이름이나 경로의 키를 사용할 때는-i옵션을 쓴다.# ssh -i [개인키경로] [유저]@[서버주소] ssh -i ./my-secret-key.pem ubuntu@192.168.1.100
4. 주의
4.1 권한 설정
- SSH 클라이언트는 개인키 파일의 권한이 너무 개방되어 있으면(타인이 읽을 수 있으면), 이를 보안 위협으로
간주하고 접속을 거부한다.
-
필수 권한: 소유자만 읽기/쓰기 가능 (
600) -
설정 명령어
chmod 600 ~/.ssh/id_ed25519
-
SSH 접속 시 쉘 지정 및 변경
1. 개요
- SSH 프로토콜을 통해 원격 호스트에 접속할 때, 서버의
/etc/passwd에 설정된 기본 로그인 셸 대신 사용자가 명시한 특정 셸(bash, zsh, fish 등)을 실행하여 세션을 시작하는 기술이다.
2. 동작 원리
- 일반적으로 SSH 접속 시 서버는 사용자의 기본 셸을 실행한다.
- 하지만 특정 명령어를 인자로 전달하면 동작 방식이 달라진다.
2.1. 일반 접속 vs 명령어 전달 접속
- 일반 접속 (
ssh user@host):- 서버는 PTY(Pseudo-Terminal, 의사 터미널)를 할당한다.
- 로그인 프로세스가 사용자의 기본 셸(예:
/bin/bash)을 대화형(Interactive) 모드로 실행한다.
- 셸 지정 접속 (
ssh user@host /bin/zsh):- SSH는 원격지에서
/bin/zsh라는 단일 명령어를 실행하려 한다. - 문제점: 기본적으로 이 방식은 PTY를 할당하지 않을 수 있어, 셸이 실행되자마자 종료되거나 프롬프트가 뜨지 않는 비대화형(Non-interactive) 상태가 된다.
- 해결책: 클라이언트에서
t옵션을 사용하여 강제로 PTY 할당을 요청해야 한다.
- SSH는 원격지에서
3. 사용법 및 구문
3.1. 일시적 셸 지정 (접속할 때만 변경)
-
가장 많이 사용하는 방법이다.
- 서버의 기본 설정을 바꾸지 않고 이번 접속에서만 다른 셸을 쓰고 싶을 때 사용한다.
-
핵심 옵션:
-t(Force pseudo-terminal allocation)중요: 이 옵션이 없으면 셸 프롬프트가 뜨지 않거나 화살표 키, 자동 완성이 작동하지 않는다.
# 문법: ssh -t [사용자]@[호스트] [실행할 셸 경로] # 예시 1: bash로 접속 (서버 기본이 sh일 때 유용) ssh -t myuser@192.168.1.10 /bin/bash # 예시 2: zsh로 접속 (개인 설정이 있는 경우) ssh -t myuser@192.168.1.10 /bin/zsh # 예시 3: 로그인 셸처럼 동작하게 하려면 -l 옵션 추가 (설정 파일 로드) ssh -t myuser@192.168.1.10 "/bin/bash -l"
3.2. 영구적 셸 변경 (서버 설정 변경)
-
매번
-t옵션을 치기 귀찮다면, 서버에 접속한 후 아예 내 계정의 기본 셸을 바꿔버린다.# 1. 서버 접속 ssh myuser@192.168.1.10 # 2. 사용 가능한 셸 확인 cat /etc/shells # 3. 기본 셸 변경 (Change Shell) # chsh -s [셸 경로] chsh -s /bin/zsh # 4. 로그아웃 후 재접속하면 zsh가 기본으로 실행됨
3.3. SSH Config 파일 활용 (자동화)
-
로컬 컴퓨터의
~/.ssh/config파일에 설정을 저장하여, 명령어 입력 없이도 자동으로 특정 셸로 접속하게 만든다.# ~/.ssh/config 파일 수정 Host myserver HostName 192.168.1.10 User myuser RequestTTY force # -t 옵션과 동일 (터미널 강제 할당) RemoteCommand /bin/zsh # 접속 시 실행할 명령어 -
이제 터미널에서
ssh myserver만 입력해도 자동으로 zsh로 연결된다.
'Etc'카테고리의 다른 글
Loading comments...