본문으로 건너뛰기

ssh 사용법

SSH agent 실행

eval "$(ssh-agent -s)"
.zshrc
plugins=(
ssh-agent
)

SSH 설정

키 생성

ssh-keygen -t ed25519 -N "" -C "[email protected]" -f <path>
ssh-keygen -t rsa -b 2048 -N "" -C "[email protected]" -f <path>

SSH 키는 기본적으로 ~/.ssh 디렉토리에 저장하고, 권한은 0600으로 설정합니다.

경고

파일 접근 권한은 로컬과 원격 모두 설정되어 있어야 합니다.

ssh-add ~/.ssh/<private>
ssh-copy-id -i ~/.ssh/<public> [<flag>] <user>@<host>
  • <flag>
    • -p <port>

config


  • ~/.ssh/config 또는 /etc/ssh/ssh_config 파일에 아래 설정을 추가하여 ssh 커맨드를 사용할 때 필요한 옵션을 미리 설정할 수 있습니다.
  • 커맨드와 파일에 중복 선언된 옵션이 있다면 우선순위에 따라 처리됩니다.
    • 우선순위 입니다.
      • 커맨드 -o <option>
      • ~/.ssh/config
      • /etc/ssh/ssh_config
    • 파일 내에서 여러번 선언된 옵션은 처음 선언된 값이 사용됩니다.
# 전역 설정
IdentityFile <path>

# 호스트별 설정
Host <alias> # 192.168.* 처럼 와일드카드도 사용 가능합니다.
HostName <host> # 선언하지 않으면 <alias>가 사용됩니다.
User <user>
PreferredAuthentications publickey
IdentityFile <path>
AddKeysToAgent yes

SSH로 원격 서버 접속

ssh <flag> <user>@<host> [<command>]

SSH Tunnel

/etc/ssh/sshd_config
AllowTcpForwarding yes
PermitTunnel yes
ssh -f -N \
-L <localPort>:<host>:<port> \
-p <tunnelPort> <tunnelUser>@<tunnelHost>

암호 입력이 나오면 <tunnelHost>의 암호를 입력합니다.

lsof -i4 -P | grep -i "listen" | grep <localPort>
nc -zv 127.0.0.1 <localPort>
ps -lef | grep ssh | grep "\-L \?<localPort>" \
| awk '{print $4}' | xargs kill -9

SSH ProxyJump

ssh -o 'ProxyJump <proxyArgs>[,<proxyArgs>]' \
<hostArgs>
  • <proxyArgs>
    • <proxyAlias>
    • <proxyUser>@<proxyHost>[:<proxyPort>]

-o ProxyJump-J로 대체할 수 있습니다.

ProxyJump를 지원하지 않는 버전의 경우 아래와 같이 ProxyCommand를 활용할 수 있습니다.

ssh -o 'ProxyCommand ssh -W %h:%p <proxyArgs>' \
<hostArgs>
  • <proxyArgs>에는 프록시 서버에 접속하기 위한 인자를 입력합니다.
  • <hostArgs>에는 목적지 서버에 접속하기 위한 인자를 입력합니다.

SSH Host Key

Host Key는 SSH 프로토콜에서 컴퓨터를 인증하는 데 사용되는 키 쌍입니다. 일반적으로 /etc/ssh/ssh_host_<type>_key, /etc/ssh/ssh_host_<type>_key.pub 가 저장되어있습니다.

SSH 서버에 최초 접속 시 인증을 통과하면 공개 키는 SSH 클라이언트의 ~/.ssh/known_hosts에 호스트와 함께 저장됩니다. 이후 접속 시 Host Key가 변경되었을 경우 저장된 공개키를 지우고 다시 인증 과정을 거쳐야합니다.

상황에 따라 Host Key를 무시하고 접속해야할 때가 있는데, 아래와 같이 옵션을 설정할 수 있습니다.

Host 192.168.*
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null