| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- custom printing
- react-native
- adb connect
- augmentedDevice
- react-native-dotenv
- github 100mb
- npm package
- 이미지 데이터 타입
- github pdf
- electron-packager
- animation
- nextjs
- rolldown
- Can't resolve
- 티스토리 성능
- Failed to compiled
- github lfs
- camera permission
- camera access
- ffi-napi
- adb pair
- device in use
- dvh
- html
- Recoil
- Each child in a list should have a unique "key" prop.
- vercel git lfs
- ELECTRON
- Git
- silent printing
- Today
- Total
Bleeding edge
SSH 접속 시 안내 메시지 띄우기 본문
공용으로 사용하는 장비나 특정 프로젝트에 할당된 PC를 운영하다 보면, 접속하는 사람에게 꼭 알려줘야 하는 내용들이 있습니다.
예를 들면 이런 것들입니다.
- 이 PC가 어떤 용도로 사용되는지
- 현재 누가 SSH로 접속 중인지
- 언제 전원이 꺼질 예정인지
- 장시간 작업 전에 공유가 필요한지
이런 내용은 문서나 메신저로 공유해도 되지만, 실제로는 접속하는 순간에 바로 보이는 것이 가장 확실합니다.
이번에는 SSH 접속 시점에 아래와 같은 안내 메시지를 띄우는 방법을 정리해보겠습니다.
==================================================
Data Foundry PC 안내
==================================================
현재 SSH 접속 목록
- IP: 10.0.19.110 세션 수: 1
장비 이름 : DATAFOUNDRY-PC4
안내 메모
- 이 PC는 Data Foundry에 할당된 PC입니다.
- 저녁 7시부터 아침 9시까지 전원을 끌 예정입니다.
- 해당 시간대에는 SSH 접속 및 원격 작업이 불가능할 수 있습니다.
- 장시간 작업이 필요한 경우, 사전에 담당자에게 공유해주세요.
==================================================
Linux와 Windows는 SSH 접속 이후의 처리 방식이 조금 다르기 때문에, 각각 나누어 정리하겠습니다.
1. Linux에서 SSH 안내 메시지 띄우기
Ubuntu 계열 Linux에서는 SSH 접속 시 MOTD(Message of the Day)를 출력합니다.
MOTD는 보통 아래 경로의 스크립트들로 구성됩니다.
/etc/update-motd.d/
이 디렉토리에 실행 가능한 스크립트를 넣으면, SSH 로그인 시 해당 스크립트가 실행되고 그 출력 결과가 로그인 메시지로 표시됩니다.
기본 Ubuntu 안내 메시지 줄이기
Ubuntu에 접속하면 기본적으로 이런 메시지가 나올 수 있습니다.
Welcome to Ubuntu 24.04.4 LTS
Applications를 위한 확장된 보안 유지보수 비활성화됨.
51개의 업데이트가 즉시 적용 가능합니다.
97 추가 보안 업데이트는 ESM Apps에 적용될 수 있습니다.
운영 장비에서는 이런 메시지가 필요한 경우도 있지만, 별도로 관리하고 있다면 로그인 화면에서는 숨기고 싶을 수 있습니다.
아래 명령으로 기본 MOTD 일부를 비활성화할 수 있습니다.
sudo chmod -x /etc/update-motd.d/00-header 2>/dev/null || true
sudo chmod -x /etc/update-motd.d/10-help-text 2>/dev/null || true
sudo chmod -x /etc/update-motd.d/50-motd-news 2>/dev/null || true
sudo chmod -x /etc/update-motd.d/88-esm-announce 2>/dev/null || true
sudo chmod -x /etc/update-motd.d/90-updates-available 2>/dev/null || true
sudo chmod -x /etc/update-motd.d/91-contract-ua-esm-status 2>/dev/null || true
sudo chmod -x /etc/update-motd.d/91-release-upgrade 2>/dev/null || true
sudo chmod -x /etc/update-motd.d/95-hwe-eol 2>/dev/null || true
주의할 점은, 위 명령은 업데이트 자체를 끄는 것이 아니라 SSH 로그인 시 출력되는 안내 문구만 끄는 것입니다.
실제 패키지 업데이트 관리는 별도로 해주어야 합니다.
Data Foundry 안내 메시지 추가
이제 원하는 안내 메시지를 출력하는 스크립트를 추가합니다.
sudo tee /etc/update-motd.d/99-data-foundry-info > /dev/null <<'EOF'
#!/bin/bash
BOLD="\033[1m"
RESET="\033[0m"
YELLOW="\033[33m"
CYAN="\033[36m"
RED="\033[31m"
echo -e "${CYAN}==================================================${RESET}"
echo -e "${BOLD}${YELLOW} Data Foundry PC 안내${RESET}"
echo -e "${CYAN}==================================================${RESET}"
echo
echo -e "${BOLD}현재 SSH 접속 목록${RESET}"
echo
SSH_LIST=$(ss -Htn state established '( sport = :22 )' 2>/dev/null | awk '
{
peer=$4
gsub(/^\[/, "", peer)
gsub(/\]:[0-9]+$/, "", peer)
gsub(/:[0-9]+$/, "", peer)
if (peer != "" && peer != "127.0.0.1" && peer != "::1") {
print peer
}
}' | sort | uniq -c)
if [ -z "$SSH_LIST" ]; then
echo " - 현재 확인 가능한 SSH 접속 IP가 없습니다."
else
echo "$SSH_LIST" | awk '
{
count=$1
ip=$2
printf " - IP: %-24s 세션 수: %s\n", ip, count
}'
fi
echo
echo -e "${BOLD}장비 이름${RESET} : $(hostname)"
echo
echo -e "${BOLD}${RED}안내 메모${RESET}"
echo -e " - ${BOLD}이 PC는 Data Foundry에 할당된 PC입니다.${RESET}"
echo -e " - ${BOLD}저녁 7시부터 아침 9시까지 전원을 끌 예정입니다.${RESET}"
echo " - 해당 시간대에는 SSH 접속 및 원격 작업이 불가능할 수 있습니다."
echo " - 장시간 작업이 필요한 경우, 사전에 담당자에게 공유해주세요."
echo -e "${CYAN}==================================================${RESET}"
EOF
sudo chmod +x /etc/update-motd.d/99-data-foundry-info
적용 여부는 아래 명령으로 바로 확인할 수 있습니다.
run-parts /etc/update-motd.d/
이후 SSH를 다시 접속하면 안내 메시지가 표시됩니다.
ssh tommoro@10.0.0.122
2. 현재 SSH 접속 목록을 확인하는 방식
처음에는 who 명령을 사용해서 현재 접속 목록을 보여주려고 했습니다.
who
일반적으로 who는 현재 로그인한 사용자를 보여주기 때문에 적절해 보입니다.
하지만 MOTD가 실행되는 시점에서는 현재 SSH 세션이 아직 who 결과에 잡히지 않는 경우가 있었습니다.
그래서 실제 TCP 연결 상태를 보는 방식으로 변경했습니다.
ss -Htn state established '( sport = :22 )'
SSH는 기본적으로 22번 포트를 사용하므로, 22번 포트에 ESTABLISHED 상태로 연결된 세션을 보면 현재 SSH 접속 IP를 확인할 수 있습니다.
이 방식은 로그인 기록이 아니라 네트워크 연결 상태를 기준으로 보기 때문에, MOTD 실행 시점에서도 비교적 안정적으로 현재 접속 중인 IP를 확인할 수 있습니다.
3. Windows에서 SSH 안내 메시지 띄우기
Windows OpenSSH에는 Linux의 /etc/update-motd.d/와 같은 구조가 없습니다.
그래서 Windows에서는 SSH 접속 후 어떤 쉘이 실행되는지를 먼저 확인해야 합니다.
프롬프트가 아래처럼 나오면 CMD입니다.
tommoro@DATAFOUNDRY-PC4 C:\Users\tommoro_window>
아래처럼 나오면 PowerShell입니다.
PS C:\Users\tommoro_window>
이번에는 CMD로 접속되는 환경을 기준으로 정리하겠습니다.
CMD에서는 PowerShell 명령을 그대로 실행할 수 없습니다.
예를 들어 아래와 같은 명령은 PowerShell 문법입니다.
New-Item
Write-Host
Where-Object
CMD에서 실행하면 다음과 같은 에러가 납니다.
'New-Item'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.
'Write-Host'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.
따라서 CMD 환경에서는 CMD의 AutoRun 기능을 사용했습니다.
CMD는 실행될 때 레지스트리에 등록된 AutoRun 명령을 자동으로 실행할 수 있습니다.
사용하는 경로는 아래와 같습니다.
HKCU\Software\Microsoft\Command Processor
여기에 배치 파일을 등록하면, 해당 사용자로 CMD가 시작될 때마다 배치 파일이 실행됩니다.
Windows OpenSSH가 CMD를 기본 쉘로 실행한다면, SSH 접속 시에도 같은 방식으로 안내 메시지를 띄울 수 있습니다.
흐름은 다음과 같습니다.
SSH 접속
↓
CMD 실행
↓
Command Processor AutoRun 실행
↓
banner.cmd 실행
↓
banner.ps1 실행
↓
안내 메시지 출력
4. Windows CMD 환경에 적용하기
먼저 기존에 등록된 AutoRun이 있다면 제거합니다.
reg delete "HKCU\Software\Microsoft\Command Processor" /v AutoRun /f
그 다음 아래 명령을 Windows SSH로 접속한 CMD 창에 그대로 붙여넣습니다.
mkdir "%USERPROFILE%\ssh-login-banner" 2>nul
(
echo $sshConnections = Get-NetTCPConnection -LocalPort 22 -State Established -ErrorAction SilentlyContinue ^| Where-Object { $_.RemoteAddress -and $_.RemoteAddress -ne '127.0.0.1' -and $_.RemoteAddress -ne '::1' } ^| Group-Object RemoteAddress
echo Write-Host '==================================================' -ForegroundColor Cyan
echo Write-Host ' Data Foundry PC 안내' -ForegroundColor Yellow
echo Write-Host '==================================================' -ForegroundColor Cyan
echo Write-Host ''
echo Write-Host '현재 SSH 접속 목록' -ForegroundColor White
echo Write-Host ''
echo if ^(-not $sshConnections^) {
echo Write-Host ' - 현재 확인 가능한 SSH 접속 IP가 없습니다.'
echo } else {
echo foreach ^($conn in $sshConnections^) {
echo Write-Host ^(' - IP: {0,-24} 세션 수: {1}' -f $conn.Name, $conn.Count^)
echo }
echo }
echo Write-Host ''
echo Write-Host ^('장비 이름 : {0}' -f $env:COMPUTERNAME^) -ForegroundColor White
echo Write-Host ''
echo Write-Host '안내 메모' -ForegroundColor Red
echo Write-Host ' - 이 PC는 Data Foundry에 할당된 PC입니다.' -ForegroundColor Yellow
echo Write-Host ' - 저녁 7시부터 아침 9시까지 전원을 끌 예정입니다.' -ForegroundColor Yellow
echo Write-Host ' - 해당 시간대에는 SSH 접속 및 원격 작업이 불가능할 수 있습니다.'
echo Write-Host ' - 장시간 작업이 필요한 경우, 사전에 담당자에게 공유해주세요.'
echo Write-Host '==================================================' -ForegroundColor Cyan
) > "%USERPROFILE%\ssh-login-banner\banner.ps1"
(
echo @echo off
echo powershell -NoProfile -ExecutionPolicy Bypass -File "%%USERPROFILE%%\ssh-login-banner\banner.ps1"
) > "%USERPROFILE%\ssh-login-banner\banner.cmd"
reg add "HKCU\Software\Microsoft\Command Processor" /v AutoRun /t REG_SZ /d "\"%USERPROFILE%\ssh-login-banner\banner.cmd\"" /f
바로 테스트하려면 아래 명령을 실행합니다.
"%USERPROFILE%\ssh-login-banner\banner.cmd"
정상적으로 적용되면 다음과 같이 출력됩니다.
==================================================
Data Foundry PC 안내
==================================================
현재 SSH 접속 목록
- IP: 10.0.19.110 세션 수: 1
장비 이름 : DATAFOUNDRY-PC4
안내 메모
- 이 PC는 Data Foundry에 할당된 PC입니다.
- 저녁 7시부터 아침 9시까지 전원을 끌 예정입니다.
- 해당 시간대에는 SSH 접속 및 원격 작업이 불가능할 수 있습니다.
- 장시간 작업이 필요한 경우, 사전에 담당자에게 공유해주세요.
==================================================
이후 SSH를 다시 접속하면 CMD가 시작되면서 안내 메시지가 자동으로 표시됩니다.
5. Windows 방식에서 주의할 점
이 방식은 HKCU에 등록됩니다.
HKCU\Software\Microsoft\Command Processor
즉 현재 사용자 계정에만 적용됩니다.
다른 Windows 사용자 계정으로 SSH 접속한다면, 그 계정에서도 별도로 설정해야 합니다.
또 하나 주의할 점은 CMD가 시작될 때마다 실행된다는 점입니다.
SSH 접속뿐 아니라 해당 사용자로 CMD를 직접 열어도 같은 안내 메시지가 표시될 수 있습니다.
이 점이 부담된다면, SSH 전용으로 분기하는 로직을 추가할 수도 있지만, 단순한 공용 장비 안내 목적이라면 AutoRun 방식만으로도 충분히 사용할 수 있습니다.
6. 제거 방법
Linux
실행 권한만 제거하려면 다음 명령을 사용합니다.
sudo chmod -x /etc/update-motd.d/99-data-foundry-info
완전히 삭제하려면 다음과 같이 실행합니다.
sudo rm /etc/update-motd.d/99-data-foundry-info
Ubuntu 기본 MOTD를 다시 켜고 싶다면 필요한 스크립트에 실행 권한을 다시 부여하면 됩니다.
sudo chmod +x /etc/update-motd.d/00-header
sudo chmod +x /etc/update-motd.d/10-help-text
sudo chmod +x /etc/update-motd.d/90-updates-available
Windows
AutoRun 등록을 제거합니다.
reg delete "HKCU\Software\Microsoft\Command Processor" /v AutoRun /f
생성한 파일까지 삭제하려면 다음 명령을 실행합니다.
rmdir /s /q "%USERPROFILE%\ssh-login-banner"
7. 보안 기능은 아니다
이 방식은 보안 기능이라기보다는 운영 편의를 위한 안내 기능입니다.
접속 권한을 제어하려면 SSH 키, 비밀번호 정책, 방화벽, 계정 권한을 별도로 관리해야 합니다.
이 배너는 다음과 같은 상황에 도움이 됩니다.
- 장비의 용도를 명확히 알리고 싶을 때
- 운영 시간을 접속자에게 알려야 할 때
- 현재 SSH 접속 중인 IP를 확인하고 싶을 때
- 공용 장비에서 작업이 겹치는 것을 줄이고 싶을 때
반대로 아래와 같은 문제를 직접 해결하지는 못합니다.
- 허가되지 않은 계정의 접속
- SSH 키 유출
- 잘못된 sudo 권한
- 방화벽 미설정
따라서 보안은 보안대로 관리하고, 이 배너는 운영 실수를 줄이는 용도로 사용하는 것이 좋습니다.
8. 정리
Linux에서는 /etc/update-motd.d/를 사용하면 SSH 로그인 시 안내 메시지를 쉽게 띄울 수 있습니다.
Windows에서는 Linux와 같은 MOTD 구조가 없기 때문에 기본 쉘을 확인해야 합니다.
CMD로 접속되는 환경에서는 Command Processor AutoRun을 사용하면 비교적 간단하게 동일한 목적을 달성할 수 있습니다.
정리하면 다음과 같습니다.
Linux
SSH 로그인
↓
/etc/update-motd.d/ 스크립트 실행
↓
안내 메시지 출력
Windows
SSH 로그인
↓
CMD 실행
↓
HKCU Command Processor AutoRun 실행
↓
banner.cmd 실행
↓
banner.ps1 실행
↓
안내 메시지 출력
공용 장비에서는 접속하는 순간에 필요한 정보를 보여주는 것만으로도 실수를 많이 줄일 수 있습니다.
중요한 정보는 문서에만 두기보다, 사용자가 실제로 장비에 들어오는 지점에 배치하는 편이 더 효과적입니다.
'CS' 카테고리의 다른 글
| ROS 2에서 ROS_DOMAIN_ID를 나눴는데도 Multicast Flooding이 발생하는 이유 (0) | 2026.05.19 |
|---|---|
| [Docker] 한 PC를 여러 대처럼? ipc: host 옵션으로 네트워크 경계 허물기 (1) | 2026.04.19 |
| JPEG 안의 FF C0와 FF C2는 무엇일까? (1) | 2026.04.14 |
| 각 코덱이 생긴 이유 (0) | 2026.04.04 |
| AV1와 NVENC의 차이 (0) | 2026.04.04 |