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
으로 설정합니다.
warning
파일 접근 권한은 로컬과 원격 모두 설정되어 있어야 합니다.
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>
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