TIL- ssh Key vs Token

kyoungyeon·2024년 8월 15일
0

TIL

목록 보기
116/122

Status

  • git을 연동하려는데 계속 에러가 났다.
  • 가상서버에서 GIT CLONE을 하니 계속 authentication key가 잘못됬다고 나오는 상황
  • 처음엔 ssh 키 authentication이라고 하길래, 임의로 만든 ssh키가 작동을 안하나 해서 삽질
  • 이후에 ssh 키를 아무리 git repo에 연동 시켜도 git clone이 안되길래 분노에 휩싸였다가 가라앉음

Spec

local server :mac os
hypervisor server :rocky 9 linux (lts)
remote repository : git hub repository

  • 그외 연동 fly.io, mariadb 등등

원인

  • https 통신 에러
    secure fw 의 문제일 수 있다. -> selinux 내림
    firewalld 돌아갈 수있나? -> rocky9에 firewalld는 별도로 설치 해야함
    dnf install firewalld -y
  • ssl
    보안소켓 계층 문제인가? -> ssh config의 문제인가?
  • ssh
    • ssh key를 만드는 암호방식 rsa / ed25519

Remind

rsa / ed25519 비교

RSA

  • 일반적인 용도: 2048 비트로 시작하고 필요에 따라 4096 비트로 업그레이드
  • 예 : 리소스가 제한된 환경이나 빈번한 SSH 연결이 필요한 경우
    • 장점: 빠른 생성 및 처리 속도, 대부분의 상황에서 충분한 보안
    • 단점: 4096 비트에 비해 이론적으로 덜 안전

  • 고보안 요구: 처음부터 4096 비트 사용 고려
  • 예 :매우 중요한 데이터나 장기적인 보안이 필요한 경우
    • 장점: 더 높은 보안 수준, 장기적인 보안에 적합
    • 단점: 키 생성 및 처리 속도가 느림, 더 많은 리소스 사용

비트수가 크면 이론적으론 안전하지만 성능 저하 이슈가 있음

ED25519

  • Ed25519는 RSA 3072비트와 동등한 보안 수준을 제공하면서도 더 작고 빠릅니다.

  • 비교적 새로운 알고리즘 (2011년 도입)

  • 고정 키 크기 (256 비트)

  • 대부분의 최신 환경에서 Ed25519가 RSA보다 선호됩니다.

    • 보안성: Ed25519는 동등한 보안 수준의 RSA 키보다 훨씬 작은 키 크기로 높은 보안을 제공합니다.
    • 성능: 키 생성, 서명, 검증 속도가 RSA보다 빠릅니다.
    • 효율성: 더 작은 키와 서명 크기로 네트워크 대역폭을 절약합니다
  • 레거시 시스템(아주오래된 시스템의 경우) 호환성 문제가 발생할 수 있습니다.

    ssh-keygen -t ed25519 -C "your_email@example.com"
     ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    

git 접속 - 토큰 | sshkey 비교

  • Token (개인 접근 토큰):
    • 비밀번호 대신 사용되는 문자열입니다.
    • HTTPS 프로토콜을 통해 Git 저장소에 접근할 때 사용됩니다.
    • GitHub, GitLab 등의 웹 인터페이스에서 생성합니다.
    • 특정 권한을 부여할 수 있어 보안 관리가 용이합니다.
    • https[ssl/tls] protocol / 서비스 제공자(git hub..)
예: ghp_aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890
  • SSH Key:
    • 공개키/개인키 쌍으로 구성된 암호화 키입니다.
    • SSH 프로토콜을 통해 Git 저장소에 접근할 때 사용됩니다.
    • 로컬 시스템에서 생성하고 공개키를 Git 호스팅 서비스에 등록합니다.
    • 비밀번호 입력 없이 안전한 인증이 가능합니다.
    • ssh protocol /로컬 생성가능/ 추가 보안계층 제공
      • 공개키 암호화, 데이터 Integrity,사용자 인증, MFA등
예: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDcm...

Proxy 설정 경우

  • ssh agent (openssh에 설치된 내장 프로그램)에 ssh 키 추가
    • ssh agent는 ssh키를 메모리에 저장 관리 프로그램
    • 한번 등록시 이후 ssh 통신마다 키를 자동으로 쓴다
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

ssh-agent Process

a. ssh-agent 시작
b. 환경 변수 (예: SSH_AUTH_SOCK, SSH_AGENT_PID) 설정
c. ssh-add 명령으로 개인 키를 에이전트에 추가
d. SSH 연결 시 에이전트가 자동으로 적절한 키를 사용


  • git proxy 설정
git config --global http.proxy http://proxyserver:port
git config --global https.proxy https://proxyserver:port
  • ~/.ssh/config 에 프록시 설정 추가
# 글로벌 설정
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

# 프록시를 통한 특정 호스트 접속 설정
Host target-host
    HostName target-hostname-or-ip
    User your-username
    ProxyCommand nc -X connect -x proxy-server:proxy-port %h %p

# SOCKS 프록시를 사용하는 경우
Host socks-host
    HostName socks-hostname-or-ip
    User your-username
    ProxyCommand nc -X 5 -x socks-proxy-server:socks-proxy-port %h %p

# HTTP 프록시를 사용하는 경우
Host http-host
    HostName http-hostname-or-ip
    User your-username
    ProxyCommand /usr/bin/corkscrew http-proxy-server http-proxy-port %h %p

# 특정 포트를 통해 프록시 연결
Host port-specific-host
    HostName port-specific-hostname-or-ip
    User your-username
    Port 2222
    ProxyCommand nc -X connect -x proxy-server:proxy-port %h %p
  • Rocky 9 .ssh/config 프록시 설정의 경우
# 글로벌 설정
Host *
    ServerAliveInterval 60 # 역할 ㅎ
    ServerAliveCountMax 3

# 프록시를 통한 특정 호스트 접속 설정
Host target-host
    HostName target-hostname-or-ip
    User your-username
    ProxyCommand nc -X connect -x proxy-server:proxy-port %h %p

# SOCKS 프록시를 사용하는 경우
Host socks-host
    HostName socks-hostname-or-ip
    User your-username
    ProxyCommand nc -X 5 -x socks-proxy-server:socks-proxy-port %h %p

# HTTP 프록시를 사용하는 경우
Host http-host
    HostName http-hostname-or-ip
    User your-username
    ProxyCommand /usr/bin/corkscrew http-proxy-server http-proxy-port %h %p

# 특정 포트를 통해 프록시 연결
Host port-specific-host
    HostName port-specific-hostname-or-ip
    User your-username
    Port 2222
    ProxyCommand nc -X connect -x proxy-server:proxy-port %h %p
  • 글로벌 설정
    • ServerAliveInterval과 ServerAliveCountMax는 연결을 활성 상태로 유지
  • 일반 프록시 설정
    • ProxyCommand를 사용하여 nc (netcat)을 통해 프록시 서버를 경유하여 연결
    • %h와 %p는 각각 대상 호스트와 포트
  • SOCKS 프록시
    • SOCKS 프록시를 사용할 때는 -X 5 옵션을 사용합니다 (SOCKS5 프로토콜).
  • HTTP 프록시
    • HTTP 프록시를 사용할 때는 corkscrew라는 도구
    • 별도 설치 필요 sudo dnf install corkscrew
  • 특정 포트 설정
    • Port 지시어를 사용하여 비표준 SSH 포트를 지정할 수 있습니다.

nc (netcat)이나 corkscrew와 같은 도구가 시스템에 설치되어 있어야야 함

ProxyJump
sftp proxy
Using the Connector on Rocky Linux/RHEL with a Web Proxy
Dante Socks Proxy..?

방화벽

iptables

  • iptables: 네트워크 방화벽 규칙 관리

firewalld (네트워크 level)

  • Rocky Linux 9에서는 iptables 대신 firewalld를 기본 방화벽으로 사용
   # 포트 개방 (예: 8080/tcp)
   sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent

   # 포트 차단
   sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent

   # 서비스 허용 (예: http)
   sudo firewall-cmd --zone=public --add-service=http --permanent

semanage (시스템 level)

semanage: SELinux 정책 관리 (접근 제어)

  • selinux를 안내리고도 쓸수 있다.
    yum provides /usr/sbin/semanage
    sudo semanage port -a -t ssh_port_t -p tcp 2222
  • semanage가 없는 경우 policycoreutils-python-utils 패키지를 설치하면 됩니다.
  • 일부 기능은 chcon, restorecon, setsebool 등의 명령어로 대체할 수 있습니다.

Process in rocky9

a. firewalld로 네트워크 레벨에서 포트를 개방합니다.
b. semanage로 SELinux가 해당 포트를 올바른 컨텍스트로 인식하도록 설정합니다.
c. 애플리케이션이 해당 포트를 사용할 수 있게 됩니다.


Error

  • 가끔 sudoer로 접속 안될때
    • PermitRootLogin을 yes로 바꾸는 방법도 고려해보자..

mistakes

  • ssh 통신 안되면 주석부터 처리하자
    sudo vi /etc/ssh/sshd_config
  • DMZ와 subnet은 유사하다?
    • DMZ(비무장지대)는 실제로 방화벽 설정과 네트워크 구성을 통해 생성되는 논리적인 네트워크 세그먼트 또는 서브넷
      • 방화벽 규칙 (iptables, firewalld)
      • in/outbound 규칙
      • port fowarding
        여기까진 aws 보안 그룹규칙과 유사
      • nat
  • ssl 과 ssh 가 헷갈렸다
    • ssl 은 https 사용시 적용됨
    • ssh 와 별도의 보안계층임.

AWS NAT gw

  • Private ec2> public subnet > bastion host > NACL(NAT gateway) > routing table > internet


profile
🏠TECH & GOSSIP

0개의 댓글