728x90
SSH Multiplexing
SSH protocol은 TCP를 기반으로 실행되기 때문에 SSH를 사용해 원격 시스템에 연결할 때마다 새로운 TCP 연결을 생성해야한다. SSH 연결 협상은 약간의 시간이 소요되는데, 이때 multiplexing을 활용하게 되면 여러 SSH 세션이 동일한 TCP 연결을 공유하여 TCP 연결 협상이 처음에만 발생하도록할 수 있다.
multiplexing 과정
- 특정 host에 연결 시도 시 OpenSSH는 Master 연결을 시작
- OpenSSH는 원격 호스트와 연결된 Unix Domain Socket을 생성
- 이후 host에 ssh 연결 시도 시 OpenSSH는 새로운 TCP Connection 생성이 아닌 생성되어있는 Unix Domain Socket을 사용해 host와 통신
setup
우선 ~/.ssh/config
파일을 아래와 같이 수정한다.
전
Host we
Hostname 3.239.239.107
User ec2-user
후
Host we
Hostname 3.239.239.107
User ec2-user
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist 10m
ControlMaster auto
를 통해 SSH multiplexing을 가능케하고, Master 연결과 소켓이 존재하지 않을 시 생성하라고 SSH에 알린다.
ControlPath /tmp/%r@%h:%p
를 통해 유닉스 도메인 소켓 파일 생성 시 위치를 지정한다.
ControlPersist 10m
를 통해 SSH 연결이 10분 동안 지속되지 않을 경우, SSH에 Master 연결을 닫으라고 알린다.
Connect
이후 ssh we를 하게되면 자동으로 소켓 파일이 생성된다.
$ ssh we
Last login: Thu Jun 29 17:30:37 2023 from 104.28.211.26
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
29 package(s) needed for security, out of 35 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-0-122 ~]$ exit
logout
Shared connection to 3.239.239.107 closed.
$ ll /tmp/ | grep ec2-user
srw------- 1 anjin-u wheel 0 7 3 10:56 ec2-user@3.239.239.107:22=
-O check
를 통해 마스터 연결이 열려있는 지 확인할 수 있다.
$ ssh -O check we
Master running (pid=12473)
$ ps 12473
PID TT STAT TIME COMMAND
12473 ?? Ss 0:00.09 ssh: /tmp/ec2-user@3.239.239.107:22 [mux]
다음과 같이 master 연결을 종료할 수 있다.
$ ssh -O exit we
Exit request sent.
시간 측정
1회차
$ time ssh we /bin/true
real 0m3.328s
user 0m0.019s
sys 0m0.011s
2회차
$ time ssh we /bin/true
real 0m0.597s
user 0m0.001s
sys 0m0.003s
마스터 연결이 생성된 이후 연결 속도가 확연히 빨라진 것을 확인할 수 있다.
'Linux' 카테고리의 다른 글
Keepalive (0) | 2023.07.24 |
---|---|
TIME_WAIT 소켓과 keepalive (0) | 2023.07.24 |
vm.zone_reclaim_mode (0) | 2023.07.19 |