ssh
OpenSSH 9.0+OpenSSH 빠른 참조: 연결, 키 관리, 사용자 설정 파일, 파일 전송(scp/rsync/sshfs), 포트 포워딩과 점프 호스트 — 자주 쓰는 옵션과 실전 예시까지 정리했습니다.
명령어 26개
연결
ssh <user>@<host>원격 호스트에 인터랙티브 SSH 세션을 엽니다.
-p PORT; -i identity_file; -l user (user@ 보다 우선); -E logfile 디버그; -v / -vv / -vvv 상세 수준
ssh -p 2222 [email protected]ssh <user>@<host> '<cmd>'원격 호스트에서 단일 비대화형 명령을 실행합니다.
ssh ops@db1 'sudo systemctl status postgresql'ssh -J <jumphost>SSH 연결을 점프 호스트(ProxyJump) 경유로 보냅니다.
-J user1@jump1:2222,user2@jump2; -o ProxyCommand=ssh -W ...
ssh -J [email protected] db1.private -i ~/.ssh/db1_keyssh -N -L <l:r> -f <host>셸을 열지 않고 백그라운드로 로컬 포트 포워딩. -L local:remote.
-N 원격 명령 없음; -f 백그라운드; -L 8080:localhost:80; -g 원격 측에서 로컬 측 연결 허용
ssh -N -L 5432:localhost:5432 -f db1 && psql -h localhostssh -N -R <r:localhost:l>리버스 터널 — 원격 측에 포트를 열어 로컬 포트로 다시 보냅니다.
-N; -f; -R 8080:localhost:3000; GatewayPorts yes (서버 설정)
ssh -N -R 8080:localhost:3000 [email protected]ssh -D <lport>SSH 서버를 통해 로컬 측에 SOCKS 프록시를 구성합니다.
-C 압축; -q quiet; -D 1080
ssh -D 1080 -q -N tunnel.example.com && curl --proxy socks5h://localhost:1080 https://ifconfig.messh -A <user>@<host>로컬 ssh-agent 를 원격 호스트로 포워딩(SSH 체이닝).
-A agent forward; -a 비활성화
ssh -A ops@bastion && ssh internal-db # uses your local keysssh -o <key>=<value>호출별 SSH 옵션을 전달합니다(설정 파일에 적을 필요 없는 일회성 변경에 유용).
StrictHostKeyChecking=no; UserKnownHostsFile=/dev/null (보안상 데모용만); RequestTTY=force
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected]ssh -F <configfile>대안 ssh_config 파일을 사용합니다(프로젝트/고객별 설정에 유용).
-F path; -G 연결 없이 설정을 파싱해 출력
ssh -F ~/.ssh/config.work -G devbox | grep -E 'hostname|user'키
ssh-keygen -t ed25519 -C '<email>'최신의 간결한 ED25519 키 쌍을 생성합니다(RSA 보다 권장).
-t ed25519|rsa|ecdsa; -b bits; -C comment; -f output_path; -N 'passphrase'; -q quiet
ssh-keygen -t ed25519 -C 'you@work' -f ~/.ssh/work_ed25519 -N ''ssh-keygen -lf <pubkey>공개 키의 fingerprint 와 길이를 표시합니다(SSH 배너 감사).
-E md5|sha256|shake256; -l 목록; -i stdin 에서 읽기
ssh-keygen -lf ~/.ssh/id_ed25519.pub -E sha256ssh-keygen -R <host>known_hosts 에서 호스트 키를 제거합니다(서버가 재구축/키 교체된 후).
-R '[host]:port' 비표준 포트 지원
ssh-keygen -R '[bastion.example.com]:2222'ssh-copy-id <user>@<host>원격 authorized_keys 에 공개 키를 설치합니다(패스워드 인증 필요).
-i identity.pub; -p PORT; -o options
ssh-copy-id -i ~/.ssh/work_ed25519.pub -p 2222 deploy@bastionssh-add [path]실행 중인 ssh-agent 에 개인 키를 추가합니다(패스프레이즈를 매번 입력하지 않아도 됨).
-l fingerprint 목록; -D 모두 삭제; -d path 삭제; -t N lifetime
eval $(ssh-agent) && ssh-add ~/.ssh/work_ed25519 && ssh-add -lssh-keyscan <host>원격 호스트 키를 출력합니다(known_hosts 사전 등록 / 부트스트랩 용).
-t rsa|ed25519|ecdsa; -p PORT
ssh-keyscan -t ed25519 -p 2222 bastion.example.com >> ~/.ssh/known_hosts설정 파일
~/.ssh/config사용자별 SSH 설정 — 호스트, 별칭, identity, 점프 호스트, keepalive 선언.
Host alias; HostName real; User; Port; IdentityFile; PreferredAuthentications; AddKeysToAgent yes; ServerAliveInterval 30; IdentitiesOnly yes; ProxyJump / ProxyCommand; LocalForward / RemoteForward; ControlMaster auto / ControlPath / ControlPersist
Host bastion
HostName bastion.example.com
Port 2222
User ops
IdentityFile ~/.ssh/work_ed25519
Host db*
ProxyJump bastion
User ubuntu파일 전송
scp <src> <dest>SSH 로 호스트 간 파일을 복사합니다(레거시지만 어디서나 사용 가능).
-r 재귀; -P PORT; -i identity; -C 압축; -p mode/time 보존; -l 대역폭 제한 (Kbit/s)
scp -P 2222 -r dist/ [email protected]:/srv/app/releases/1.4.2/rsync -avz -e ssh <src> <dest>델타 동기화로 미러링/복사 — 큰 트리를 반복 전송할 때 훨씬 빠릅니다.
-a 아카이브; -v verbose; -z 압축; -P 부분저장 + 진행률; --delete 미러; --exclude; --dry-run; -e ssh -p 2222
rsync -avz -e 'ssh -p 2222' ./build/ ops@bastion:/srv/app/current/sshfs <user>@<host>:<path> <mount>원격 파일 시스템을 SSH(FUSE) 로 마운트 — 로컬 도구로 원격 파일을 편집합니다.
-p PORT; -o reconnect; -o transform_symlinks; -C 압축
sshfs ops@bastion:/srv/app ./remote -o reconnect,transform_symlinkssftp <user>@<host>SSH 서브시스템으로 인터랙티브/스크립트 기반 파일 전송.
sftp -i id -P port; commands: get / put / sync / ls / lls / cd / lcd / chmod
sftp ops@bastion <<'EOF'
mkdir /srv/app/releases/1.4.2
put -r dist/* /srv/app/releases/1.4.2/
EOF문제 해결
ssh -vvv <host>연결 추적: KEX, 인증, 채널 설정. "왜 실패하지?" 에 최적.
-v / -vv / -vvv; -E file 파일로 기록
ssh -vvv -E /tmp/ssh.dbg ops@bastion 2>&1 | grep -E 'Authentications|method|Permission denied'ssh-keygen -y -f <private>개인 키로부터 공개 키를 유도합니다(개인 키만 있을 때).
-f file; -E hash algorithm
ssh-keygen -y -f ~/.ssh/id_ed25519 > /tmp/derived.pub && diff ~/.ssh/id_ed25519.pub /tmp/derived.pub && echo OKssh -o ConnectTimeout=<N> -o ConnectionAttempts=<K>불안정한 네트워크나 미리 워밍업된 점프 호스트에 맞춰 연결 타임아웃/재시도 조정.
ssh -o ConnectTimeout=5 -o ConnectionAttempts=2 ops@bastionssh -o ServerAliveInterval=30 -o ServerAliveCountMax=3NAT/방화벽 사이에서 유휴 SSH 연결을 살려 둡니다.
ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -L 5432:db:5432 -N ops@bastion신뢰 포워딩
ssh -W %h:%p <proxy>ProxyCommand 로 체이닝 — ProxyJump 의 구식 대안.
ProxyCommand ssh -W %h:%p myjumphost nc -q0 %h %p
ssh -o ProxyCommand='ssh -W %h:%p bastion.example.com' internal-db유지 보수
ssh -O stop / ssh -M -S <sock>ControlMaster — 여러 터미널에서 단일 SSH 세션을 공유해 속도를 높입니다.
-M master mode; -S socket path; -O check|forward|exit
ssh -M -S ~/.ssh/cm-%h bastion; ssh -S ~/.ssh/cm-%h bastion -O check관련 명령어 치트시트
상표 및 사용 안내
본 명령줄 도구 치트시트 모음은 오픈 커뮤니티 참고 자료입니다. 본 문서에서 언급되는 도구의 명칭, 로고, 상표(예: Git™, Docker™, Kubernetes®, kubectl, PostgreSQL®, MySQL®, Redis™, MongoDB®, Linux™, PowerShell™, Vim™ 등)는 각 권리자의 자산이며, 본 문서에서는 식별 및 참고 목적のみで 사용됩니다.
본 치트시트의 모든 내용은 독립적으로 작성된 단순화된 자체 완결형 참고 자료이며, 어떠한 공식 문서와도 계열·인정·출처 관계가 없습니다. 명령 목록, 플래그 설명, 예제는 모두 저자의 원본 단순화이며, 권위 있는 정보가 필요한 경우 각 도구의 공식 문서를 참조하시기 바랍니다.
명령 구문 및 옵션 플래그는 도구 버전에 따라 다를 수 있습니다. 표시되는 버전 태그는 안정 릴리스를 반영하며, 다른 버전에서는 동작이 다를 수 있습니다. 본 치트시트는 상표권자의 어떠한 선호나 권장도 의미하지 않습니다.
상표권자 또는 저작권자가 사이트의 일부 내용에 대해 권리 침해가 있다고 판단하시는 경우 [email protected]으로 이메일을 보내 주십시오. 유효한 권리 증명을 받은 후 합리적인 기간 내에 관련 내용을 수정하거나 삭제하겠습니다.
본 사이트는 사이트 정보의 이용으로 인해 발생하는 어떠한 직접적 또는 간접적 손해에 대해서도 법적 책임을 지지 않습니다.
OpenSSH 소개
OpenSSH는 사실상 표준이 된 보안 셸 구현으로, Tatu Ylönen이 1995년에 독점 소프트웨어로 발표했고, Theo de Raadt와 OpenBSD 팀이 1999년에 오픈 소스로 재구현했습니다. 현재 portable 버전은 OpenSSH 9.x이며, 모든 Linux 배포판, macOS(10.1 Panther 이후), Windows에서는 선택적 OpenSSH 클라이언트/서버 기능과 Win32-OpenSSH 포트로 제공됩니다. OpenSSH는 암호화된 원격 로그인(`ssh`), 안전한 파일 전송(`scp`, `sftp`), 포트 포워딩(로컬 `-L`, 원격 `-R`, SOCKS용 동적 `-D`), 점프 호스트(`-J`), 복호화된 개인 키를 메모리에 보관해 passphrase 재입력을 줄여주는 에이전트(`ssh-agent`)를 제공합니다. 인증은 비밀번호, 공개 키(Ed25519이 현재 권장, RSA-3072+ 또는 ECDSA-P256이 허용 가능한 대안), `sk-` 키 타입을 통한 FIDO2 하드웨어 토큰, 엔터프라이즈 네트워크의 Kerberos / GSSAPI를 지원합니다. 가장 과소평가된 기능은 사용자 설정 파일 `~/.ssh/config`로, 호스트 정보를 한 번 선언해두면 `ssh prod`가 어디서든 동작합니다. 개인 키는 비밀번호처럼 다루세요 — passphrase를 설정하고, 공유 머신에 절대 복사하지 말고, 오래된 RSA / DSA 키 타입 대신 `ssh-keygen -t ed25519`을 사용하세요.
치트시트 버전 1.0.0