Terraform 명령어로 EC2 생성
생성된 EC2 정보
- 퍼블릭 IPv4 주소:
52.79.236.180
- 프라이빗 IPv4 주소:
172.31.47.65
SSH EC2 접속
ssh -v -i ~/.ssh/linux.pem -o IdentitiesOnly=yes ec2-user@52.79.236.180
EC2 Connect 로그 분석
서버에 원격 접속하기 위해 연결 프로세스 시작
OpenSSH_8.6p1, LibreSSL 3.3.6
debug1: Reading configuration data/etc/ssh/ssh_config
debug1:/etc/ssh/ssh_config
line 21: include/etc/ssh/ssh_config.d/*
matched no files
debug1:/etc/ssh/ssh_config
line 54: Applying options for *
debug1: Authenticator provider$SSH_SK_PROVIDER
did not resolve; disabling
debug1: Connecting to52.79.236.180
[52.79.236.180]
port22
.
debug1:Connection established
.SSH 프로토콜 버전 교환
debug1: identity file
/Users/jinhyeokhong/.ssh/linux.pem
type -1
debug1: identity file/Users/jinhyeokhong/.ssh/linux.pem
-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.6
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.4
debug1: compat_banner: match: OpenSSH_7.4 patOpenSSH_7.0*
,OpenSSH_7.1*
,OpenSSH_7.2*
,OpenSSH_7.3*
,OpenSSH_7.4*
,OpenSSH_7.5*
,OpenSSH_7.6*
,OpenSSH_7.7*
compat 0x04000002
- SSH는 양측이 서로에게 버전 문자열을 보내는 것으로 시작됩니다. 핸드셰이크의 한 부분으로서 SSH 설계의 몇 가지 결함으로 인해 대부분의 최신 클라이언트와 서버는 SSH 2.0만 지원한다는 점에 유의해야 합니다.
키교환 과정(Elliptic Curve Diffie-Hellman 방식)
Elliptic Curve Diffie-Hellman Initialization
debug1: Authenticating to
52.79.236.180:22
as'ec2-user'
debug1: load_hostkeys: fopen/Users/jinhyeokhong/.ssh/known_hosts2
: No such file or directory
debug1: load_hostkeys: fopen/etc/ssh/ssh_known_hosts
: No such file or directory
debug1: load_hostkeys: fopen/etc/ssh/ssh_known_hosts2
: No such file or directory
debug1:SSH2_MSG_KEXINIT
sent
debug1:SSH2_MSG_KEXINIT
received
debug1: kex: algorithm:curve25519-sha256
debug1: kex: host key algorithm:ssh-ed25519
- SSH 키 교환(KEX)은 양쪽에서
SSH_MSG_KEX_INIT
메시지를 서로에게 보내면서 시작됩니다. 이 메시지는 선호도를 반영하는 순서로 지원하는 암호화 기본 형식의 목록입니다.- 암호화 기본 요소는 키 교환을 수행한 다음 대량 데이터 암호화를 수행하는 데 사용할 빌딩 블록을 설정하는 것입니다.
- 양측은 동일한 알고리즘을 사용하여 지원 목록에서 암호화 프리미티브를 선택하기 때문에 키 교환 초기화 후 키 교환을 즉시 시작할 수 있습니다.
ECDH(Elliptic Curve Diffie-Hellman)
으로 클라이언트가 임시 키 쌍(개인 및 관련 공개 키)을 생성하고SSH2_MSG_KEXINIT
메시지로 서버에 공개 키를 보내는 것으로 키 교환이 시작됩니다.
Key Exchange(KEX) Symmetric Cipher Message Authentication Code(Mac) Server Host Key Algorithm curve25519-sha256@libssh.org chacha20-poly1305@openssh.com hmac-sha2-256-etm@openssh.com ssh-rsa-cert-y01@openssh.com ecdh-sha2-nistp256 aes128-gcm@openssh.com hmac-sha2-256 ssh-rsa ecdh-sha2-nistp384 aes256-ctr ecdh-sha2-nistp521 aes192-ctr aes128-ctr 임시 키쌍 공유
debug1: kex:
server->client
cipher:chacha20-poly1305@openssh.com
MAC:<implicit>
compression: none
debug1: kex:client->server
cipher:chacha20-poly1305@openssh.com
MAC:<implicit>
compression: none
- 하지만 이 키 쌍은 임시적이며 키 교환 중에만 사용되며 나중에 폐기됩니다. 이러한 방식은 공격자가 미래의 언젠가 개인 키를 훔칠 기회를 엿보고 암호화된 트래픽을 수동적으로 기록하는 공격 클래스를 극도로 어렵게 만듭니다. 따라서 교환 중에 탈취당했다고 해도 키 교환 중에만 사용하고 폐기되는 키 쌍이기 때문에 무용지물이 됩니다. 이러한 속성을 순방향 비밀성이라고 합니다.
Elliptic Curve Diffie-Hellman Reply
debug1: expecting
SSH2_MSG_KEX_ECDH_REPLY
debug1:SSH2_MSG_KEX_ECDH_REPLY
received
debug1: Server host key:ssh-ed25519
SHA256:FZWagooddK7helloNQgMI1y3FLJF6q+lvz/PNj1Ads
debug1: load_hostkeys: fopen/Users/jinhyeokhong/.ssh/known_hosts2
: No such file or directory
debug1: load_hostkeys: fopen/etc/ssh/ssh_known_hosts
: No such file or directory
debug1: load_hostkeys: fopen/etc/ssh/ssh_known_hosts2
: No such file or directory
debug1: hostkeys_find_by_key_hostfile: hostkeys file/Users/jinhyeokhong/.ssh/known_hosts2
does not exist
debug1: hostkeys_find_by_key_hostfile: hostkeys file/etc/ssh/ssh_known_hosts
does not exist
debug1: hostkeys_find_by_key_hostfile: hostkeys file/etc/ssh/ssh_known_hosts2
does not exist
The authenticity of host'52.79.236.180 (52.79.236.180)'
can't be established.
ED25519
key fingerprint is SHA256:FZWaItntdK7wCjNJHELLOI1y3FLJF6q+lvz/Pgoods.
This key is not known by any other names로컬 데이터베이스에 호스트 키 추가
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added'52.79.236.180' (ED25519)
to the list of known hosts.
- 로컬 데이터베이스에 호스트 키를 추가하도록 요청하는 SSH 클라이언트. OpenSSH의 경우 일반적으로
~/.ssh/known_hosts
입니다.New keys
debug1: rekey out after 134217728 blocks
debug1:SSH2_MSG_NEWKEYS
sent
debug1: expectingSSH2_MSG_NEWKEYS
debug1:SSH2_MSG_NEWKEYS
received
debug1: rekey in after 134217728 blocks
debug1: Will attempt key:/Users/jinhyeokhong/.ssh/linux.pem
explicit
debug1:SSH2_MSG_EXT_INFO
received
debug1: kex_input_ext_info: server-sig-algs=<rsa-sha2-256
,rsa-sha2-512
>
debug1:SSH2_MSG_SERVICE_ACCEPT
received
- 교환 해시는 다음 필드의 해시(키 교환 알고리즘에 따라 SHA256, SHA384 또는 SHA512)를 사용하여 생성됩니다.
최종 연결
debug1: Authentications that can continue:
publickey
,gssapi-keyex
,gssapi-with-mic
debug1: Next authentication method:publickey
debug1: Trying private key:/Users/jinhyeokhong/.ssh/linux.pem
debug1: Authentication succeeded (publickey).
Authenticated to52.79.236.180
([52.79.236.180]:22)
.
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: filesystem full
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: client_input_hostkeys: searching/Users/jinhyeokhong/.ssh/known_hosts
for52.79.236.180
/ (none)
debug1: client_input_hostkeys: searching/Users/jinhyeokhong/.ssh/known_hosts2
for52.79.236.180
/ (none)
debug1: client_input_hostkeys: hostkeys file/Users/jinhyeokhong/.ssh/known_hosts2
does not exist
debug1: Sending environment.
debug1: channel 0: setting env LC_TERMINAL_VERSION = "3.4.15"
debug1: channel 0: setting env LANG = "ko_KR.UTF-8"
debug1: channel 0: setting env LC_TERMINAL = "iTerm2"
Learned new hostkey:RSA
SHA256:gtc6vF/Uit3fyV9LzqZshelloiUDQnM+Vz+pUorgood
Learned new hostkey:ECDSA
SHA256:XCIsShelloEscqDlKZfveryqgaakNRKZHPgoodM7Cc
Adding new key for52.79.236.180
to/Users/jinhyeokhong/.ssh/known_hosts
:ssh-rsa
SHA256:gtc6vF/Uit3fyV9LzqZshelloiUDQnM+Vz+pUorgood
Adding new key for52.79.236.180
to/Users/jinhyeokhong/.ssh/known_hosts
:ecdsa-sha2-nistp256
SHA256:XCIsShelloEscqDlKZfveryqgaakNRKZHPgoodM7Cc
debug1: update_known_hosts: known hosts file/Users/jinhyeokhong/.ssh/known_hosts2
does not exist__| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___|
https://aws.amazon.com/amazon-linux-2/
16 package(s) needed for security, out of 26 available
Run "sudo yum update" to apply all updates.
~/.ssh/known_hosts에 추가된 new key
- 서버의 공개키가 로컬에 저장되있는 것을 확인할 수 있다.
서버에 접속할 때 비밀번호 대신 key를 제출하는 방식이다.
SSH Key는 언제 사용하는가 ?
SSH Key는 공개키(public key)와 비공개 키(private key)로 이루어지는데 이 두개의 관계를 이해나는 것이 SSH Key를 이해하는데 핵심이다. 키를 생성하면 공개키와 비공개키가 만들어진다. 이 중에 비공개키는 로컬 머신(SSH Client)에 위치해야 하고, 공개키는 리모트 머신(SSH Server)에 위치해야 한다.
파일 | 설명 |
---|---|
id_rsa | private key (절대로 타인에게 노출되면 안된다) |
id_rsa.pub | public key 접속하려는 리모트 머신의 authorized_keys에 입력한다. |
authorized_keys | 리모트 머신의 .ssh 디렉토리 아래에 위치하면서 id_rsa.pub 키의 값을 저장한다. |