How to Use the ntsCheck.sh Script to Test NTS Server Availability
The ntsCheck.sh script is a lightweight wrapper around chronyd that validates Network Time Security (NTS) server connectivity without modifying your system clock.
The jauderho/nts-servers repository provides the ntsCheck.sh utility to help administrators and contributors verify that NTS servers are reachable and responding correctly. This bash script located at scripts/ntsCheck.sh performs non-invasive availability tests using chronyd's query mode.
What Is ntsCheck.sh?
ntsCheck.sh is a diagnostic tool designed to test NTS server availability through a single command. Unlike full NTP client configurations, this script performs a one-time check that leaves your local time settings untouched.
How the Script Works
The implementation in scripts/ntsCheck.sh follows a three-step validation process:
-
Argument validation (lines 7-10): The script verifies that a server hostname or IP address is provided. If missing, it prints usage instructions and exits with status 1.
-
Variable assignment (line 13): The first positional argument is stored in the
NTS_SERVERvariable for use in the chronyd command. -
Chronyd query (line 16): The script executes
chronyd -Q -t 5 "server $NTS_SERVER iburst nts maxsamples 1", which:- Uses -Q flag for query mode (no clock adjustment)
- Sets a 5-second timeout with
-t 5 - Requests NTS encryption via the
ntskeyword - Sends an initial burst with
iburstfor faster response - Limits to one sample with
maxsamples 1
How to Use ntsCheck.sh to Test Server Availability
Prerequisites
Before running the script, ensure chronyd is installed on your system. The script relies on the chronyd binary being available in your system PATH, typically located at /usr/sbin/chronyd on Linux distributions.
Basic Usage
Execute the script from the repository root with the target server as the first argument:
./scripts/ntsCheck.sh time.cloudflare.com
For IPv6 addresses, enclose the address in quotes to prevent shell interpretation issues:
./scripts/ntsCheck.sh "2001:4860:1::68"
Interpreting Results
The script uses exit codes to indicate success or failure, making it ideal for automation and CI/CD pipelines:
- Exit code 0: The server responded successfully to the NTS query
- Exit code 1: The server failed to respond or NTS negotiation failed
Check the exit code immediately after execution:
./scripts/ntsCheck.sh time.cloudflare.com
echo $?
A successful test produces no output (chronyd runs in quiet mode), while failures display chronyd error messages such as no response or TLS handshake failures.
Common Use Cases
Pre-Submission Validation
The jauderho/nts-servers repository requires contributors to verify new server entries before submitting pull requests. According to the README.md usage guidelines, running ntsCheck.sh against proposed servers ensures they support NTS and are reachable from diverse network locations.
Troubleshooting Network Connectivity
System administrators use this script to diagnose NTS-specific issues without modifying production NTP configurations. The isolated test determines whether connectivity problems stem from NTS certificate issues, firewall rules, or general network unreachability.
Summary
- The
ntsCheck.shscript provides a safe, non-invasive method to test NTS server availability using chronyd's query mode. - Located at
scripts/ntsCheck.shin thejauderho/nts-serversrepository, it validates servers through a 5-second timeout query that requests NTS encryption. - The script exits with code 0 for responsive servers and code 1 for failures, making it suitable for both manual verification and automated CI/CD testing.
- Contributors must use this tool to validate servers before submitting pull requests to the repository.
Frequently Asked Questions
What does the ntsCheck.sh script do?
The ntsCheck.sh script tests whether a Network Time Security (NTS) server is reachable and properly responding to NTS queries. It wraps the chronyd command to perform a one-time connectivity check without modifying your system's clock or NTP configuration.
Do I need root privileges to run ntsCheck.sh?
No, root privileges are not required to run ntsCheck.sh because it uses chronyd's query mode (-Q flag), which does not adjust the system clock. However, you need read permissions on the script and the chronyd binary must be executable by your user account.
What does exit code 0 mean in ntsCheck.sh?
Exit code 0 indicates that the NTS server responded successfully to the query and supports NTS encryption as requested. Any non-zero exit code indicates failure, which could mean network unreachability, NTS protocol errors, TLS certificate issues, or timeout after 5 seconds.
Can I test IPv6 servers with ntsCheck.sh?
Yes, ntsCheck.sh supports IPv6 addresses. When passing an IPv6 address as an argument, enclose it in quotes to prevent the shell from interpreting the colons, for example: ./scripts/ntsCheck.sh "2001:4860:1::68".
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →