콘텐츠로 건너뛰기
쿼드(QUAD) 드론연구소

쿼드(QUAD) 드론연구소

  • 👨‍✈️ 초보 파일럿
  • 🎖️ 개발자
  • 🥇 전문가
  • 💎 다이아몬드
  • 🛠️ Tech-Tip
  • 📝 블로그
  • ⚠️ 저작권
login
쿼드(QUAD) 드론연구소
쿼드(QUAD) 드론연구소

🕰️PX4와 ArduPilot의 개발 배경

4
  • ArduPilot 주요 개발자
  • ArduPilot
  • PX4 주요 개발자
  • PX4

📚드론 개발 라이브러리

10
  • 1.드론 개발자 로드맵(Load-Map)
  • 2.드론 개발 소프트웨어 개요
  • 3.MAVLINK
  • 4.PyMAVLink
  • 5.MavProxy
  • 6.MAVSDK
  • 7.MAVROS
  • 8.PX4 uORB with ROS 2
  • 9.자율주행드론 개발 프로세스
  • 10.학습 로드맵(Road-map)

🧩자율주행드론 시스템 아키텍처

4
  • Smart UAV is Robot!
  • PX4 System 아키텍쳐
  • PX4 Software 아키텍쳐
  • 쿼드(QUAD) 자율주행드론 UAV 시스템 아키텍처

🐧Linux (Ubuntu) 기초

14
  • Ubuntu 22.04 설치 (PC에 직접 설치)
  • Windows 10/11 WSL2 설치
  • Linux 개요
  • 리눅스 쉘 기본 명령어
  • 자주쓰는 명령어 정리 (Ubuntu 사용)
  • 자주 사용하는 터미널 명령어
  • Linux Package 에 대한 이해
  • su와 sudo 명령어 활용법
  • 리눅스 파일 시스템 이해하기
  • 리눅스 권한에 대한 이해
  • 빌드 시스템에 대한 이해
  • Make(Makefile) 사용 가이드
  • CMake 의 이해
  • CMake 사용 가이드

픽스호크(Pixhawk) 기초

29
  • 쿼드(QUAD) 자율주행 드론(UAV) 개발 키트
  • 픽스호크 드론의 기초 개요
  • 드론에 사용되는 물리학
  • 멀티콥터의 동작 원리
  • ArduPilot vs. PX4 선택
  • PX4 시스템 아키텍처
  • 지상국(Ground Control System) 선택
  • Pixhawk 6C 비행 컨트롤러
  • Pixhawk 6X 비행 컨트롤러
  • 드론에서 사용되는 센서간 통신제어 방식
  • Pixhawk 배선
  • Pixhawk 전원 공급
  • GPS/나침반
  • 거리 측정기 (LiDAR)
  • 고도(Altitude) 이해
  • 컴패니언 컴퓨터
  • 오프보드(Offboard) 제어
  • 컴패니언 컴퓨터 GPIO를 이용한 FC 제어
  • ESC(전자속도제어기)
    • ESC (전자속도제어기)
    • BLHeli32 및 BLHeli_S ESC
    • DShot ESC
    • DroneCAN ESC
    • PWM, OneShot 및 OneShot125 ESC
  • 무선제어시스템(Radio)
    • 무선 제어 시스템 (Radio)
    • 조종기/수신기
    • 수신기 RSSI 강도 표시
  • Telemetry 라디오
    • Telemetry 라디오
    • SiK Radio 설정
    • 다중 Point-to-Point 설정

Q250 사용 가이드

17
  • Q250 빠른 시작 가이드
  • QGroundControl 설치
  • Q250 펌웨어 재설치 (선택)
  • Q250 파라메터 설정
  • FS-i6x 조종기와 수신기 설정
  • 비행 모드
  • 전원 설정
  • Actuators (모터) 설정
  • Flight Behavior 설정
  • 텔레메트리 연결
  • GPS 연결
  • 컴패니언컴퓨터 전원 공급장치(UBEC) 사용 가이드
  • LED 컨트롤러 사용 가이드
  • 컴패니언 컴퓨터와 FC의 UART 케이블 연결
  • Optical-Flow & LiDAR 설정
  • 지자계 간섭 문제 해결
  • fake_gps (가상 GPS)

Q500 사용 가이드

10
  • Q500 사용 가이드 개요
  • QGroundControl 설치
  • Q500 펌웨어 설정
  • Q500 파라메터 설정
  • Radiomaster 조종기 설정
  • 수신기의 전파 수신 강도(RSSI) 설정
  • Pixhawk 6X Ethernet 설정
  • 컴패니언 컴퓨터와 FC 연결 설정
  • 시뮬레이터 사용 가이드
  • fake_gps (가상 GPS)

Q650 사용 가이드

9
  • Q650 사용 가이드 개요
  • QGroundControl 설치
  • Q650 펌웨어 설정
  • Q650 파라메터 설정
  • 조종기 설정
  • 수신기의 전파 수신 강도(RSSI) 설정
  • Pixhawk 6X Ethernet 설정
  • 컴패니언 컴퓨터와 FC 연결 설정
  • H-Flow 설정 가이드

첫 비행 및 튜닝

12
  • 첫 비행 및 튜닝 개요
  • 첫 비행 지침
  • 수동비행 지침
  • 임무 비행
  • 지오펜스
  • 안전지점(Rally Points)
  • 비행 모드
  • 지형 추적/유지
  • PID 튜닝
  • 비행 기록 분석
    • 비행 기록 분석
    • Flight Review를 이용한 로그 분석
    • 비행기록 분석 실습

PX4-Toolchain 개발환경 구성

4
  • Windows 10/11 WSL2 설치
  • ROS(1) + PX4 Toolchain 구성
  • Gazebo Classic 시뮬레이터 사용하기
  • ROS2 + PX4 Toolchain 구성

MAVLink-Python 프로그래밍

17
  • MAVLINK 개요
  • Python MAVLink 라이브러리 사용
  • 드론에 연결하기(Connect)
  • MAVLINK 메시지 주고받기
  • 비행 모드 (PX4 멀티콥터)
  • MAV_CMD
  • PX4 ‘OFFBOARD” 와 Ardupilot ‘GUIDED’ 모드 차이
  • PX4 Offboard 모드에서만 유효한 주요 MAV_CMD
  • 드론에 시동걸기(MAV_CMD_COMPONENT_ARM_DISARM)
  • 이륙하기(MAV_CMD_NAV_TAKEOFF)
  • 이동하기(SET_POSITION_TARGET_GLOBAL_INT)
  • 이동하기(SET_POSITION_TARGET_LOCAL_NED)
  • 기수 방향과 속도 변경
  • [별첨]참고 자료
  • MAVLINK 신뢰성 보장
    • MAVLINK 신뢰성 보장
    • MAVLINK 2 메시지 서명
    • [참고]HMAC-SHA256이란?

🛠️Tech-Tip

2
  • MAVLink Router
  • 쿼드(QUAD) 자율주행 드론용 컴패니언컴퓨터 소프트웨어 – Jetson Orin-Nano 용 (Ver.3.1-Ubuntu 22.04)
카테고리 보기
  • Home
  • Docs
  • 🐧Linux (Ubuntu) 기초
  • 자주쓰는 명령어 정리 (Ubuntu 사용)

자주쓰는 명령어 정리 (Ubuntu 사용)

10 min read

디렉토리 목록 확인

$ ls $ ls -al : 감춰진 파일은 .이 붙는다. a 옵션을 사용하면 해당 파일을 확인할 수 있다. $ ls -l

새 디렉토리 생성

$ mkdir [디렉토리명] $ mkdir -p [디렉토리명/디렉토리명/디렉토리명…] : 여러 디렉토리 생성

디렉토리 이동

$ cd [디렉토리명] $ cd .. : 부모 디렉토리로 이동

tip) 디렉토리명이 너무 길 때, 조금만 쓰고 tab키 누르면 자동완성

디렉토리 삭제

$ rm -r [디렉토리명] : -r (remove directories and their contents recursively; 해당 디렉토리 아래 있는 내용들도 삭제한다.)

파일 관련 명령어

비어있는 파일 생성

$ touch [파일명]

파일 삭제

$ rm [파일명]

파일 복사

$ cp [파일위치 및 파일이름] [목적지 파일위치 및 파일 이름]

파일 이동 (파일 이름을 바꿀 때에도 사용)

$ mv [파일위치 및 파일이름] [목적지 파일위치 및 파일 이름] $ mv [원래 파일 이름] [바꾸고 싶은 파일 이름]

파일 만들고 편집 (nano 에디터)

$ nano [파일명] : 새 파일 작성 or 존재하는 파일 수정

파일 내용 보기

$ cat [파일명]

파일 위치 검색

$ locate *.log : (확장자가 .log인 파일 찾기) : 디렉토리를 뒤지는게 아니라 데이터베이스(mlocate)를 뒤져서 찾는다.

$ find . *.log : 디렉토리 뒤짐

$ whereis ls $ whereis rm : 실행파일 위치 찾기

현재 위치 확인

$ pwd

명령창 내용 삭제

$ clear

명령어 도움말 확인

$ [명령어] –help $ man [명령어] : /[찾고싶은단어] 사용해서 단어찾기 가능, 그 상태로 n을 누르면 다음 단어 찾기

패키지 매니저 (Package Manager)

기본으로 내장되어 있는 패키지(프로그램)가 아닌 새로운 패키지(프로그램)를 설치하려고 할 때 도와주는 소프트웨어 (안드로이드의 구글플레이, iOS의 앱스토어 같은 ..)

apt, yum 등이 있음.

패키지 목록 업데이트

$ apt-get update

패키지 매니저를 통해 설치할 수 있는 패키지 목록들을 업데이트한다. (설치하기전에)

패키지가 설치되는게 아니라 패키지 목록들이 업데이트 되는 것.

패키지 찾기

$ apt-cache search [패키지명]

저장된 패키지 목록 중에 해당 패키지 찾기..?

관련된 패키지 목록까지 나온다.

패키지 설치

$ apt-get install [패키지명]

패키지 업그레이드

$ apt-get upgrade $ apt-get upgrade [패키지명]

패키지 삭제

$ apt-get remove [패키지명]

패키지를 설치하는 순서 (항상 이 순서를 따르는게 좋음.)

패키지 목록 업데이트 (apt-get update)

패키지 설치 (apt-get install)

다운로드

파일을 다운로드 (wget 사용)

$ wget -O [저장할 파일명] [다운로드 url]

소스코드 다운로드 (git 사용)

git 설치 $ apt-get install git

소스코드 다운 $ git clone [소스코드 url] [디렉토리명] : 명시한 디렉토리에 소스코드 다운받는다.

why CLI?

1. 순차적 실행 (using semicolon) ex) $ mkdir why; cd why

언제 유용한가?

하나하나의 명령들이 1000시간이 걸린다고 할 때, 명령어 하나하나씩 치는 것과 여러개를 한번에 치는 것은 차이가 있음. (여러 개 명령어를 한 번에 치면 알아서 마지막 결과만 나타남.)

2. 파이프라인

명령어의 연결

어떤 프로세스의 출력을 다른 프로세스의 입력으로 . . .

원하는 정보가 포함되어 있는 행을 출력

ex) $ grep linux linux.txt : ‘linux’가 포함된 행 출력 $ ls –help | grep sort : ls –help에서 ‘sort’가 포함된 행을 출력 (ls –help의 출력을 grep의 입력으로) $ ls –help | grep sort | grep file : ls –help에서 ‘sort’와 ‘file’이 포함된 행을 출력

IO Redirection

output $ ls -l > result.txt : result.txt 확인해보면 ls -l 출력물 담겨있음.

error (에러 결과를 저장하려면? ‘2>’ 를 사용한다. (standard error를 가리킴)) ex) 해당 디렉토리에 rename2.txt가 없을 때 $ rm rename2.txt 2> error.log : error.log에 에러 내용이 담겨있음.

input $ cat hello.txt : cat의 cammand-line arguments로써 역할 $ cat < hello.txt : hello.txt 내용을 standard input으로.. $ head -n1 < linux.txt > one.txt : linux.txt 내용을 input, one.txt에 출력물을 저장

디렉토리 구조

/bin: 사용자가 사용하는 명령어 모음

/sbin: 관리자가 사용하는 명령어 모음

/etc: 프로그램 설정을 관리하는 디렉토리

/etc/init.d: daemon의 목적을 가진 프로그램들 있음.

/var: 내용이 바뀔 수 있는 파일들 모음

/tmp: 임시파일들. 컴퓨터가 꺼지면 날아간다.

/home: 사용자들의 파일들이 저장되는 디렉토리

/lib: /bin과 /sbin에 있는 프로그램들이 사용하는 라이브러리 모음

/usr: 유저가 다운받은 프로그램들 저장..

프로세스 관련 명령어

프로세스 목록 확인

$ ps

백그라운드 프로세스 목록까지 확인

$ ps aux $ ps aux | grep apache2 : ‘ps aux’의 출력에서 apache2가 포함된 행 출력

프로세스 강제 종료

$ kill [pid]

그 외 프로세스 목록 확인 명령어

$ top $ htop (top과 비슷하지만, 시각적인 면에서 더 좋음)

백그라운드 실행

ex) nano 에디터 실행하다가 ctrl + z -> 백그라운드에서 돌아가도록 등록

백그라운드로 돌아가는 프로그램 확인

$ jobs : +가 붙어있는 프로그램 -> fg 실행했을 때, 실행되는 프로그램 : -가 붙어있는 프로그램 -> fg 실행했을 때, + 다음으로 실행될 프로그램

foreground로 돌아가기

$ fg $ fg %번호 : 해당 번호 프로그램으로 돌아간다.

백그라운드 프로그램 죽이기

$ kill $ kill -9 %번호 : 강제종료

daemon: 항상 실행되고 있다.

테스트를 위해 apache2 웹서버 설치

$ sudo apt-get install apache2

설치 후 /etc/init.d에 가보면 apache2가 있다.

apache2 켜기

$ sudo service apache2 start

잘 켜진지 확인

$ ps aux | grep apache2

apache2 끄기

$ sudo service apache2 stop

꺼져있는지 확인

$ ps aux | grep apache2 : 목록에 나타나지 않음.

cron (정기적으로 실행시키고 싶은 작업이 있을 때)

$ crontab -e : 처음 실행했을 땐, 에디터 골라야 함

m h dom mon dow command

  • m: 분 주기 ex) 10: 매 시간 10분에 한 번 ex) */1: 1분에 한 번
  • h: 시간 주기 ex) *: 시간에 상관 없이 ex) 1: 매 1시에
  • dom: day of month ex) 24: 매 달 24일에 한 번
  • mon: month
  • dow: day of week (요일)
  • command: 주기적으로 실행할 명령어

테스트 1. command 자리에 date >> date.log 입력 (>>는 해당 파일 아래로 쭉 출력결과가 쌓임) 2. $ tail -f date.log (꼬리에 새로운 텍스트가 추가 될 때, 실시간으로 표시해줌.)

에러가 난 경우도 로그로 남기는게 좋다. */1 * * * * date >> date.log 2>&1 : 표준 출력을 date.log에 남기고 표준 에러가 발생하면 표준 출력으로 리다이렉션 : date.log에 에러도 함께 저장됨

단축키 만들기

$ alias l='ls -al' -> l을 입력하면 ls -al의 출력이 나옴

.bashrc 파일

bash가 시작되었을 때 실행됨.

다중 사용자

$ id : 현재 접속한 계정의 정보 확인 $ who : 이 컴퓨터에 누가 접속해있는가

~$로 끝나면 일반 사용자 ~#로 끝나면 root 사용자

sudo (super user do)

  • 리눅스는 다중 사용자 운영체제
  • 사용자마다 어떤 일에 대한 권한이 있음.
  • 중요한 일에 대한 권한은 super user(root)만 가지고 있음.
  • 따라서 super user의 권한이 필요할 때 sudo를 사용한다.
  • 직접 root계정에 접속해서 명령어를 실행 시킬 수도 있지만, 안전을 위해 일반 사용자로 로그인 후 sudo를 사용하도록 하자.

사용자 추가

$ sudo useradd -m [사용자명] -> /home에 가보면 사용자가 추가된 걸 볼 수 있음. -> 그러나, 이렇게 만들면 해당 계정에서 sudo 명령어를 사용할 수 없음.

sudo 사용할 수 있도록 변경

$ sudo usermod -a -G sudo [사용자명]

비밀번호 설정

$ sudo passwd [사용자명]

로그인 (su 사용)

$ su - [사용자명]

permission (권한)

$ ls -l
-rw-rw-r-- 1 egoing egoing 0 Dec 4 23:19 perm.txt

-file: -, directory: d[owenr 권한]rw-[group의 권한]rw-[other의 권한 (!owner && !group)]r–egoingegoing

권한 변경 (chmod)

u: owner g: group o: other (not owner, not group) a: all

$ chmod o-r perm.txt : perm.txt파일의 other read 권한 삭제

$ chmod o+r perm.txt : perm.txt파일의 other read 권한 허가

execute

$ nano hi-machine.sh

#!/bin/bash

echo ‘hi hi hi hi’

파일 실행 시도 1 $ ./hi-machine.sh -> 허가 거부 뜸

파일 실행 시도 2 $ /bin/bash hi-machine.sh -> 실행됨

owner 실행 권한 추가하기 $ chmod u+x hi-mashine.sh -> 해당 파일 초록색으로 표시됨

파일 실행 시도 3 $ ./hi-machine.sh -> 실행됨

directory

  • r 모드: 해당 디렉토리에 소속된 파일이나 디렉토리를 열람할 수 있는지?
  • w 모드: 해당 디렉토리 내부를 수정 할 수 있는지? (파일 생성, 수정, 삭제, 파일이름 변경 등)
  • x 모드: 해당 디렉토리로 들어갈 수 있는지?
  • chmod 명령어의 -R 옵션: 재귀적으로 해당 디렉토리 안에 있는 것들의 mode를 모두 바꾼다.

Numerical permissions

0none—
1execute only–x
2write only-w-
3write and execute-wx
4read onlyr–
5read and executer-x
6read and writerw-
7read, write and executerwx

ex) $ chmod 111 perm.txt -> –x–x–x로 변경됨.

‘=’ 사용

추가/삭제 개념이 아니라 아예 바뀌는 것

$ chmod a=r perm.txt -> owner, group, other read만 가능 $ chmod a= perm.txt -> owner, group, other 아무 권한 없음.

IP 주소 확인

$ ip addr : 컴퓨터 IP 확인 (private ip) $ curl ipinfo.io/ip : ipinfo.io/ip 입장에서 접속된 ip (public ip)

웹서버

웹서버 설치 (apache2)

$ sudo apt-get update $ sudo apt-get install apache2

웹서버 시작, 중지, 재시작

$ sudo service apache2 start $ sudo service apache2 stop $ sudo service apache2 restart

쉘을 통해 웹서버 접속 (쉘에서 웹브라우징) : elinks 사용

$ sudo apt-get install elinks $ elinks http://10.0.2.15/ (컴퓨터 IP 입력) -> local 서버 접속

웹서버의 설정

/etc/apache2 에 아파치 설정파일 있음. (apache2.conf) 웹서버가 어떤 storage에서 파일을 찾을 것인가는 설정파일에서 확인. default는 /var/www/html 인데, 설정 바꿔서 변경시킬 수 있음. 이때 /var/www/html를 document root라고 부른다. (웹페이지를 찾는 최상위 디렉토리)

웹서버의 로그 확인

/etc/apache2/sites-enabled/000-default.conf 가보면 로그는 어디에 기록할지 명시해둔 부분이 있다. (/var/log/apache2)

access.log: 누군가가 웹서버에 접속할 때마다 기록이 남겨짐. error.log: 에러 로그 확인 가능

실시간으로 확인하려면? $ tail -f /var/log/apache2/access.log

SSH

다른 컴퓨터를 원격제어 할 때 사용

클라이언트를 원격접속 시도하려는 컴퓨터, 서버를 원격접속 당하는 컴퓨터라고 한다면, 클라이언트 컴퓨터에는 ssh client 프로그램이 있어야하고 서버에는 ssh server 프로그램이 있어야 한다.

오늘날 대부분의 유닉스 계열 시스템에서는 ssh 서버가 설치되어있기 때문에 설치할 필요가 거의 없다.

원격 접속 시도 $ ssh 계정명@접속아이피 (처음 접속하면 진짜 접속할 건지 물어보는데 yes 하면 됨.)

포트번호와 함께 접속 시도 $ ssh -p 포트번호 계정명@접속아이피

ssh 심화수업 – 비밀번호 입력없이 로그인하기

접속을 시도하는 컴퓨터: 내 컴퓨터 접속 대상이 되는 컴퓨터: 원격 컴퓨터

원격 컴퓨터에 내 컴퓨터의 공개키를 저장해두면, 원격 컴퓨터에 로그인 없이 (비밀번호 입력없이/인증 없이) 로그인 가능

어떤 컴퓨터가 인증된 컴퓨터? 원격 컴퓨터의 ~/.ssh/authorized_keys 파일에 들어있는 키 목록을 보고 판단한다. (authorized_keys 파일은 있을 수도 있고 없을 수도 있음.)

원격 컴퓨터에 내 컴퓨터를 인증시키는 방법

ssh 공개키 비밀키 만들기 [내 컴퓨터에서 실행] $ ssh-keygen Q. Enter file in which to save the key?: (저장되는 위치) 엔터 Q. Enter passphrase: 비밀번호 쓰려면 입력하고 아니면 그냥 엔터 ~/.ssh 들어가보면 id_rsa(ssh private key), id_rsa.pub(ssh public key)가 있음. (id_rsa는 절대로 비공개)

authorized_keys 파일 끝에다가 내 컴퓨터의 id_rsa.pub 내용을 붙여넣는다. (ssh-copy-id 명령어를 사용하여 안전하게 붙여넣자.) [내 컴퓨터에서 실행] -> $ ssh-copy-id (원격 컴퓨터 계정)@(원격 컴퓨터 주소) -> 원격 컴퓨터의 비밀번호 입력

잘 붙여넣어졌는지 확인 [원격 컴퓨터에서 실행] $ cat ~/.ssh/authorized_keys

로그인 없이 로그인 시도 [내 컴퓨터에서 실행] $ ssh (원격 컴퓨터 계정)@(원격 컴퓨터 주소) -> 비밀번호 입력 없이 로그인 가능

포트 (port)

default port (기본적으로 쓰도록 약속) ex) 웹서버는 80, ssh 서버는 22

  • 각 서버들은 해당 포트에서 대기중이다. (listen)
  • 약 65000개의 포트가 있는데, 그 중에 1024개의 well-known 포트가 있다. (잘 알려진 포트)

도메인과 DNS (Domain Name System)

  1. 사용자가 google.com 이라고 브라우저 주소창에 입력하면
  2. DNS 서버가 google.com 이름을 가진 IP를 찾아서 사용자 컴퓨터에 알려준다.
  3. 사용자 컴퓨터는 그 IP 정보로 google.com에 접속
  • /etc/hosts 파일: 아이피-도메인 명시해둔 것?
  • ex) hosts파일에 127.0.0.1 google.com 추가하고 브라우저에 google.com 이라고 입력했을 때, 127.0.0.1 웹서버와 매칭됨.
  • /etc/hosts에서 먼저 찾아보고, 찾아봤을 때 없으면, DNS 서버에서 찾고..
  • 만약 /etc/hosts에 있으면 DNS 서버는 관련없음.
  • /etc/resolv.conf -> nameserver 적혀있음.
  • $ host [도메인] -> 호스트 정보 나옴 (어떤 아이피로 연결되어 있는지)

서브도메인

  • 하나의 도메인 구입으로 여러 도메인 사용할 수 있음.
  • ex) admin.egoing.ga, blog.egoing.ga, news.egoing.ga
  • 서로 다른 아이피를 가리키게
  • 하나의 도메인으로 여러 사이트를 운영!

rsync

동작방법 예시

$ mkdir src $ mkdir dest

src 디렉토리안에 파일 생성 $ touch test{1..10}: test1~test10까지 생성됨.

$ rsync -a src/ dest -> src 아래 있는 파일들이 dest 폴더안으로 복사된다. (a 옵션 : 아카이브 모드로 동작. 파일 뿐만 아니라 디렉토리도 복사되고, 권한과 같은 파일/디렉토리 속성이 바뀌면 반영되고, 변경사항들만 전송)

dest 폴더 가서 test10 삭제 $ rm test10

$ rsync -av(더 자세하게 출력) src/ dest 실행 -> dest안에 있던 test10 다시 생김.

src 폴더 가서 추가 파일 생성 후, rsync 해보면 src에서 만든 파일 만이 dest 안에 생성된다.

컴퓨터와 컴퓨터 사이에 전송

$ rsync -azP ~/rsync/src/ k8805@대상아이피:~/rsync/dest az: 압축한다. P: 전송되는 상황을 progress bar로 보여준다.

암호화

대칭적인 방식

어떤 정보를 암호화/복호화 할 때 키를 사용하는데, 암호화 했을 때와 복호화 했을 때 같은 키를 사용한다면 대칭적인방식

비대칭적인 방식

  • ssh-keygen으로 만든 private key, public key를 사용
  • 암호화 할 때에는 private key, 복호화 할 때에는 public key를 사용
  • private key, public key는 짝꿍이다.
  • 대표 주자: RSA

RSA 동작방식

  1. ssh client로 ssh server에 접속하면
  2. ssh server는 랜덤한 키를 생성하여 client 컴퓨터에게 준다.
  3. ssh client는 id_rsa 파일(private key)이 있는지 찾는다. 있으면 그 파일을 이용해서 전달 받은 랜덤키를 암호화 시킨다.
  4. 암호화된 결과를 ssh server에게 전송
  5. ssh server는 authorized_keys에 저장된 공개키를 이용해서 전달받은 암호화된 파일을 복호화 한다.
  6. 복호화된 결과가 처음에 전달한 랜덤키와 같으면 인증 성공
업데이트된 날짜 2025년 11월 22일

당신의 감정은 어떤가요?

  • Happy
  • 보통
  • 슬픈

이 문서 공유 :

  • Facebook
  • X
  • LinkedIn
  • Pinterest

제공 BetterDocs

답글 남기기 응답 취소

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

© 2025 쿼드(QUAD) 드론연구소 - Kadence WP의 워드프레스 테마

  • 👨‍✈️ 초보 파일럿
  • 🎖️ 개발자
  • 🥇 전문가
  • 💎 다이아몬드
  • 🛠️ Tech-Tip
  • 📝 블로그
  • ⚠️ 저작권
Korean
English