On-Premises Installation
On-Premises Installation
Section titled “On-Premises Installation”Install SSH-KLM directly on Linux servers for air-gapped environments or when container runtime is not available.
Use Cases
Section titled “Use Cases”- Air-gapped or restricted environments
- Compliance requirements prohibiting containers
- Direct hardware access requirements
- Legacy infrastructure integration
Prerequisites
Section titled “Prerequisites”| Requirement | Specification |
|---|---|
| OS | Ubuntu 20.04/22.04 LTS, RHEL 8/9 |
| CPU | 4+ cores |
| Memory | 8+ GB RAM |
| Disk | 50+ GB SSD |
| PostgreSQL | 14+ (local or remote) |
| Redis | 7+ (local or remote) |
Step-by-Step Guide
Section titled “Step-by-Step Guide”Step 1: Install Dependencies
Section titled “Step 1: Install Dependencies”Ubuntu/Debian:
sudo apt updatesudo apt install -y curl gnupg2 ca-certificatesRHEL/CentOS:
sudo dnf install -y curl gnupg2 ca-certificatesStep 2: Add Repository
Section titled “Step 2: Add Repository”# Add QCecuring GPG keycurl -fsSL https://packages.qcecuring.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/qcecuring.gpg
# Add repository (Ubuntu)echo "deb [signed-by=/usr/share/keyrings/qcecuring.gpg] https://packages.qcecuring.com/apt stable main" | \ sudo tee /etc/apt/sources.list.d/qcecuring.list
# Update package listsudo apt updateStep 3: Install SSH-KLM
Section titled “Step 3: Install SSH-KLM”sudo apt install -y ssh-klmStep 4: Configure Database
Section titled “Step 4: Configure Database”# Edit configurationsudo nano /etc/ssh-klm/config.yamldatabase: host: localhost port: 5432 name: sshklm username: sshklm # Password from environment variable
redis: host: localhost port: 6379
server: port: 8081 host: 0.0.0.0Step 5: Initialize Database
Section titled “Step 5: Initialize Database”# Run migrationssudo ssh-klm migrate up
# Create admin usersudo ssh-klm admin create \ --email admin@yourcompany.com \ --password your-secure-passwordStep 6: Start Services
Section titled “Step 6: Start Services”# Enable and start servicessudo systemctl enable ssh-klm-api ssh-klm-workersudo systemctl start ssh-klm-api ssh-klm-worker
# Check statussudo systemctl status ssh-klm-apiStep 7: Configure Firewall
Section titled “Step 7: Configure Firewall”# UFW (Ubuntu)sudo ufw allow 8081/tcp
# firewalld (RHEL)sudo firewall-cmd --permanent --add-port=8081/tcpsudo firewall-cmd --reloadExamples
Section titled “Examples”Systemd Service Files
Section titled “Systemd Service Files”[Unit]Description=SSH-KLM API ServerAfter=network.target postgresql.service redis.service
[Service]Type=simpleUser=sshklmGroup=sshklmEnvironmentFile=/etc/ssh-klm/envExecStart=/usr/bin/ssh-klm-api serveRestart=alwaysRestartSec=5
[Install]WantedBy=multi-user.targetEnvironment File
Section titled “Environment File”DATABASE_PASSWORD=your-secure-passwordREDIS_PASSWORD=your-redis-passwordJWT_SECRET=your-jwt-secret-minimum-32-charactersTroubleshooting
Section titled “Troubleshooting”Service Won’t Start
Section titled “Service Won’t Start”Issue: ssh-klm-api.service fails to start
Solution:
# Check logssudo journalctl -u ssh-klm-api -f
# Verify configsudo ssh-klm config validateDatabase Connection Failed
Section titled “Database Connection Failed”Issue: Cannot connect to PostgreSQL
Solution:
# Test connectionpsql -h localhost -U sshklm -d sshklm
# Check pg_hba.conf for local connectionssudo nano /etc/postgresql/14/main/pg_hba.conf