Zum Inhalt

ssh - Secure Shell Remote Access

generieren

Umfassende SSH-Befehle für sicheren Fernzugriff, Tunneling und Systemverwaltung auf allen Plattformen.

Einfache Verbindung

Einfache Verbindung

Command Description
ssh user@hostname Connect to remote host
ssh user@192.168.1.100 Connect using IP address
ssh -p 2222 user@hostname Connect to custom port
ssh hostname Connect with current username

Verbindungsoptionen

Command Description
ssh -v user@hostname Verbose output for debugging
ssh -vv user@hostname More verbose output
ssh -vvv user@hostname Maximum verbosity
ssh -q user@hostname Quiet mode (suppress warnings)

Authentifizierungsmethoden

Passwort Authentication

```bash

Standard password login

ssh user@hostname

Force password authentication

ssh -o PreferredAuthentications=password user@hostname

Disable password authentication

ssh -o PasswordAuthentication=no user@hostname ```_

Schlüsselbasierte Authentifizierung

```bash

Generate SSH key pair

ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ssh-keygen -t ed25519 -C "your_email@example.com" # Modern, secure

Copy public key to remote server

ssh-copy-id user@hostname ssh-copy-id -i ~/.ssh/id_rsa.pub user@hostname

Manual key installation

cat ~/.ssh/id_rsa.pub|ssh user@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" ```_

Schlüsselverwaltung

Command Description
ssh-keygen -t ed25519 Generate Ed25519 key (recommended)
ssh-keygen -t rsa -b 4096 Generate 4096-bit RSA key
ssh-keygen -f ~/.ssh/custom_key Generate key with custom name
ssh-add ~/.ssh/private_key Add key to SSH agent
ssh-add -l List loaded keys
ssh-add -D Remove all keys from agent

Konfiguration

SSH Client Config (~/.ssh/config)

```bash

Global defaults

Host * ServerAliveInterval 60 ServerAliveCountMax 3 TCPKeepAlive yes

Specific host configuration

Host myserver HostName server.example.com User myusername Port 2222 IdentityFile ~/.ssh/myserver_key ForwardAgent yes

Jump host configuration

Host target HostName 192.168.1.100 User admin ProxyJump jumphost

Host jumphost HostName jump.example.com User jumpuser ```_

Gemeinsame Konfigurationsoptionen

Option Description Example
HostName Real hostname or IP HostName server.example.com
User Username for connection User admin
Port SSH port number Port 2222
IdentityFile Private key file IdentityFile ~/.ssh/id_rsa
ForwardAgent Enable agent forwarding ForwardAgent yes
Compression Enable compression Compression yes

Port Forwarding und Tunneling

Lokaler Hafen

```bash

Forward local port to remote service

ssh -L 8080:localhost:80 user@hostname

Forward to different remote host

ssh -L 3306:database.internal:3306 user@gateway

Multiple port forwards

ssh -L 8080:localhost:80 -L 3306:localhost:3306 user@hostname ```_

Remote Port Forwarding

```bash

Forward remote port to local service

ssh -R 8080:localhost:3000 user@hostname

Allow remote connections to forwarded port

ssh -R 0.0.0.0:8080:localhost:3000 user@hostname ```_

Dynamic Port Forwarding (SOCKS Proxy)

```bash

Create SOCKS proxy on local port 1080

ssh -D 1080 user@hostname

Use with applications

Configure browser to use SOCKS proxy: localhost:1080

```_

X11 Weiterleitung

```bash

Enable X11 forwarding for GUI applications

ssh -X user@hostname

Trusted X11 forwarding

ssh -Y user@hostname

Run GUI application

ssh -X user@hostname firefox ```_

Integration von Dateiübertragungen

SCP Integration

```bash

Copy file to remote host

scp file.txt user@hostname:/path/to/destination/

Copy from remote host

scp user@hostname:/path/to/file.txt ./

Recursive copy

scp -r directory/ user@hostname:/path/to/destination/ ```_

FTP Integration

```bash

Start SFTP session

sftp user@hostname

SFTP with custom port

sftp -P 2222 user@hostname ```_

Erweiterte Funktionen

Jump Hosts und Bastion Server

```bash

Connect through jump host

ssh -J jumphost user@target

Multiple jump hosts

ssh -J jump1,jump2 user@target

Using ProxyCommand

ssh -o ProxyCommand="ssh -W %h:%p jumphost" user@target ```_

SSH Agent und Key Management

```bash

Start SSH agent

eval $(ssh-agent)

Add key to agent

ssh-add ~/.ssh/id_rsa

Add key with timeout (1 hour)

ssh-add -t 3600 ~/.ssh/id_rsa

List agent keys

ssh-add -l

Remove specific key

ssh-add -d ~/.ssh/id_rsa

Remove all keys

ssh-add -D ```_

Verbindung Multiplexing

```bash

Enable connection sharing in ~/.ssh/config

Host * ControlMaster auto ControlPath ~/.ssh/sockets/%r@%h-%p ControlPersist 600

Create socket directory

mkdir -p ~/.ssh/sockets ```_

Sicherheit und Härten

Sichere Verbindungsoptionen

```bash

Disable password authentication

ssh -o PasswordAuthentication=no user@hostname

Use specific key only

ssh -o IdentitiesOnly=yes -i ~/.ssh/specific_key user@hostname

Disable host key checking (development only)

ssh -o StrictHostKeyChecking=no user@hostname

Use specific cipher

ssh -c aes256-ctr user@hostname ```_

Host Key Verifikation

```bash

Check host key fingerprint

ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub

Remove host key from known_hosts

ssh-keygen -R hostname

Add host key manually

ssh-keyscan hostname >> ~/.ssh/known_hosts ```_

Zertifikatbasierte Authentifizierung

```bash

Generate user certificate

ssh-keygen -s ca_key -I user_id -n username user_key.pub

Use certificate for authentication

ssh -o CertificateFile=user_key-cert.pub user@hostname ```_

Fehlerbehebung

Verbindungsprobleme

```bash

Debug connection problems

ssh -vvv user@hostname

Test specific authentication method

ssh -o PreferredAuthentications=publickey user@hostname

Check SSH service status

systemctl status ssh # Linux service ssh status # Linux (older) ```_

Gemeinsame Probleme und Lösungen

Problem Symptoms Solution
Permission denied Authentication fails Check key permissions (600 for private key)
Connection timeout No response Check firewall, network connectivity
Host key verification failed Key mismatch warning Update known_hosts or verify host identity
Agent forwarding not working Keys not available on remote Enable ForwardAgent in config

Schlüsselberechtigungsfragen

```bash

Fix SSH key permissions

chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa chmod 644 ~/.ssh/id_rsa.pub chmod 644 ~/.ssh/authorized_keys chmod 644 ~/.ssh/known_hosts chmod 600 ~/.ssh/config ```_

Automatisierung und Schrift

Nicht interaktiv SSH

```bash

Run single command

ssh user@hostname "ls -la /var/log"

Run multiple commands

ssh user@hostname "cd /var/log && tail -f syslog"

Execute local script on remote host

ssh user@hostname 'bash -s' < local_script.sh

Execute with sudo

ssh user@hostname "sudo systemctl restart nginx" ```_

Batch Operationen

```bash

!/bin/bash

Deploy to multiple servers

servers=("web1.example.com" "web2.example.com" "web3.example.com")

for server in "\(\\\\{servers[@]\\\\}"; do echo "Deploying to \(server" ssh user@\)server "cd /var/www && git pull origin main" ssh user@\)server "sudo systemctl restart nginx" done ```_

SSH mit Expect (Password Automation)

```bash

!/usr/bin/expect

spawn ssh user@hostname expect "password:" send "your_password\r" interact ```_

Leistungsoptimierung

Kompression und Geschwindigkeit

```bash

Enable compression

ssh -C user@hostname

Disable compression for fast networks

ssh -o Compression=no user@hostname

Use faster cipher for trusted networks

ssh -c arcfour user@hostname ```_

Verbindung Persistence

```bash

Keep connection alive

ssh -o ServerAliveInterval=60 user@hostname

Persistent connection in background

ssh -f -N -L 8080:localhost:80 user@hostname ```_

Plattformspezifische Überlegungen

Windows (OpenSSH)

```powershell

Windows OpenSSH client

ssh user@hostname

Windows SSH config location

%USERPROFILE%.ssh\config

Start SSH agent on Windows

Start-Service ssh-agent ssh-add ~/.ssh/id_rsa ```_

macOS Keychain Integration

```bash

Add key to macOS keychain

ssh-add --apple-use-keychain ~/.ssh/id_rsa

Configure automatic keychain loading

Host * AddKeysToAgent yes UseKeychain yes ```_

Best Practices

Sicherheit

  1. **Benutze Schlüsselauthentifizierung*: Kennwort-Authentifizierung deaktivieren
  2. **Strong Keys*: Verwenden Sie Ed25519 oder 4096-bit RSA Schlüssel
  3. Key Rotation: Regelmäßig drehen SSH-Tasten
  4. **Principle of Least Privilege*: Benutzerzugriff beschränken
  5. Monitor Access: SSH-Verbindungen protokollieren und überwachen

Konfigurationsmanagement

  1. **Centralized Config*: Verwenden Sie ~/.ssh/config für gemeinsame Einstellungen
  2. **Host Aliases*: Wichtige Host-Aliase erstellen
  3. Könnungsmultiplikation: Reuse-Verbindungen für Effizienz
  4. ** Agent Forwarding*: Verwenden Sie vorsichtig, nur wenn nötig
  5. Dokumentation: Dokument benutzerdefinierte Konfigurationen

Betrieb

  1. **Backup Keys*: Sichere Sicherung privater Schlüssel
  2. **Test-Verbindungen*: Regelmäßig testen SSH-Zugang
  3. Update Software: SSH-Client/Server aktualisieren
  4. **Monitor Logs*: Uhr für verdächtige Aktivität
  5. Emergency Access: Alternativen Zugang erhalten