[LG Gram] client_loop: send disconnect: Connection reset

발단: SSH 접속 끊김 현상과 추가 조치의 필요성

이전에 작성한 글이다.

그런데 위 글 설정처럼 해도 접속 유지가 안되는 것을 확인했다. 그래서 조금 더 자세히 알아보고 제대로 설정하는 법을 기록하고자 한다.


점검 환경: 서버 및 LG Gram 클라이언트 사양

먼저 접속 환경이다.

  • Server : Ubuntu 24.04 LTS
  • Client : Windows 11 Home (시작 메뉴 우클릭 후 나오는 터미널, PowerShell)
  • Client Device : LG Gram 15ZD90N-HX56K (with ①Intel(R) Wi-Fi 6 AX201 160MHz & ②Realtek USB GbE Family Controller #2)
  • Network Connection : ②Realtek USB GbE Family Controller #2 (본인의 경우 터미널 확인 시 “이더넷 3”)

1단계: Windows 11 SSH 클라이언트 KeepAlive 설정 (~/.ssh/config)

이러한 환경 하에서 Client 설정이다.

  1. 사용자 홈 디렉터리 ($env:USERPROFILE = C:Users<user_name>) 아래에 .ssh 폴더 생성 (-Force 옵션으로 이미 있어도 오류 없이 진행)
    New-Item -ItemType Directory -Force -Path "$env:USERPROFILE.ssh" | Out-Null
  2. config 파일을 메모장으로 여는데, 이때 파일이 없으면 메모장이 “새로 만들지” 물을 때 “Yes” 하고 저장 시 “config.txt” 아닌 “config”로 저장 이름으로 저장하고 이어서 터미널에서 move .config.txt config 명령 실행
    notepad "$env:USERPROFILE.sshconfig"
  3. 이후 메모장에 아래 내용 기입
    # <server_alias#1>1 서버 전용 별칭(alias) 설정: 이후로는 "ssh <server_alias#1>" 한 줄이면 접속 가능
    Host <server_alias#1>
    HostName <www.xxx.yyy.zzz>2
    User <ssh_user>3
    Port <ssh_port>4
    ServerAliveInterval 30
    ServerAliveCountMax 6
    TCPKeepAlive yes
    
    # <server_alias#2>5 서버 전용 별칭(alias) 설정 – 이후로는 "ssh <server_alias#2>" 한 줄이면 접속 가능
    Host <server_alias#2>
    HostName <www.xxx.yyy.zzz>
    User <ssh_user>
    Port <ssh_port>
    ServerAliveInterval 30
    ServerAliveCountMax 6
    TCPKeepAlive yes
    
    # 그 외 모든 호스트에 대한 공통 keepalive 설정 (안전망)
    Host *
    ServerAliveInterval 60
    ServerAliveCountMax 5
    TCPKeepAlive yes

2단계: LG Gram USB 랜카드 절전 모드(Selective Suspend) 비활성화

위 1단계 설정에서 종료되면 참 좋았을텐데, LG Gram 노트북이다 보니 1단계처럼 설정해도 USB 전원 관리 영역을 건드려주지 않으면 또 제목처럼 접속이 끊긴다. 따라서 시작 메뉴 우클릭 ⇒ 터미널(관리자) 실행 후, 이하 관리자 터미널에서 진행을 전제한다.

  1. 현재 시스템의 모든 네트워크 어댑터 목록과 절전 설정 상태 조회를 위해 아래 명령 입력 후 엔터
    # Get-NetAdapterPowerManagement: 어댑터별 PnP/WoL/SelectiveSuspend 등 절전 옵션을 표시
    Get-NetAdapter | ForEach-Object {
        Write-Host "=== $($_.Name) / $($_.InterfaceDescription) ==="
        Get-NetAdapterPowerManagement -Name $_.Name | Format-List *
    }
  2. 각 네트워크 어댑터 목록 중 SelectiveSuspend : Enabled 항목 확인 ⇒ 본인의 경우 ② 하나에서만 확인
  3. ②의 selective suspend 비활성을 위해 아래 명령 입력 후 엔터 (그 외 다른 항목은 혹시 몰라 같이 설정)
    Set-NetAdapterPowerManagement -Name "이더넷 3" `
        -SelectiveSuspend Disabled `
        -WakeOnMagicPacket Disabled `
        -WakeOnPattern Disabled `
        -DeviceSleepOnDisconnect Disabled
  4. 아래 명령을 통해 적용 결과 확인
    Get-NetAdapterPowerManagement -Name "이더넷 3" | Format-List SelectiveSuspend, WakeOnMagicPacket, WakeOnPattern, DeviceSleepOnDisconnect

    결과가 아래처럼 나오면 OK!!!

    $env:USERPROFILE 6 Get-NetAdapterPowerManagement -Name "이더넷 3" | Format-List SelectiveSuspend, WakeOnMagicPacket, WakeOnPattern, DeviceSleepOnDisconnect
    
    SelectiveSuspend : Disabled
    WakeOnMagicPacket : Disabled
    WakeOnPattern : Disabled
    DeviceSleepOnDisconnect : Inactive

3단계: Windows 업데이트 대비 레지스트리 영구 적용 (PnPCapabilities)

설정이 다시 풀릴 경우(e.g., Windows 업데이트 등)를 대비해서 레지스트리에도 등록하려면 아래처럼 입력 후 엔터한다.

$netClassPath = "HKLM:SYSTEMCurrentControlSetControlClass{4d36e972-e325-11ce-bfc1-08002be10318}"

$targets = Get-ChildItem $netClassPath -ErrorAction SilentlyContinue | Where-Object {
    $desc = (Get-ItemProperty -Path $_.PSPath -Name "DriverDesc" -ErrorAction SilentlyContinue).DriverDesc
    $desc -like "*Realtek*USB*GbE*"
}
if ($targets) {
foreach ($t in $targets) {
    $desc = (Get-ItemProperty -Path $t.PSPath -Name "DriverDesc").DriverDesc
    Write-Host "발견: 키=$($t.PSChildName), DriverDesc='$desc'"
    Set-ItemProperty -Path $t.PSPath -Name "PnPCapabilities" -Value 24 -Type DWord -Force
    Write-Host " → PnPCapabilities = 24 설정 완료"
}
Write-Host ""
Write-Host "어댑터 재시작 진행: 5~10초 인터넷 끊김 예상"

Restart-NetAdapter -Name "이더넷 3" -Confirm:$false
} else {
    Write-Host "Realtek USB GbE 키워드를 가진 어댑터 항목을 찾지 못했습니다."
}

검증 결과: 1시간 유휴 상태 연결 유지 확인

위와 같이 설정하고 Server 접속 후 1시간여 동안 점심 먹고 왔는데도 접속 연결이 끊기지 않는 것을 확인했다.

조회수: 36

Footnotes

  1. e.g, santa
  2. 111.222.333.444
  3. e.g, claus
  4. 따로 설정 안했을 경우 22
  5. rudolf
  6. PS C:Users<user_name>> 형태로 나오면 성공!!!

댓글 남기기