fix: der Tunnel scheiterte am Benutzernamen, und die Meldung zeigte woandershin
Der Standard fuer -Benutzer war $env:USERNAME -- der Name am HEIMRECHNER. Auf dem Server heisst das Konto anders (hier "az319" gegen "Darkster"). Das Skript lief sauber durch, trug die Aufgabe ein, und der Tunnel kam trotzdem nicht. SCHLIMMER ALS DER FEHLER WAR DIE DIAGNOSE. Am Ende stand fest verdrahtet "Haeufigste Ursache: der oeffentliche Schluessel ist noch nicht hinterlegt" -- eine GERATENE Ursache, und sie war falsch. Wer dem folgt, prueft den Schluessel, findet ihn in Ordnung und sucht weiter an der falschen Stelle. Jetzt wird gemessen: schlaegt der Tunnel fehl, baut das Skript selbst eine SSH-Verbindung auf und wertet aus, was der Server antwortet -- "Permission denied" (dann Name ODER Schluessel, beides benannt), nicht erreichbar, Weiterleitung verweigert, oder ssh kommt durch und es liegt am Ziel-Port. Und -Benutzer hat keinen Standard mehr. Fehlt er, wird gefragt: "Wie heisst dein Konto AUF DEM SERVER? (nicht der Name hier am PC)". Einmal fragen ist besser als einmal in die Irre fuehren. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -25,7 +25,12 @@
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[string]$Server = '88.218.224.10',
|
||||
[string]$Benutzer = $env:USERNAME,
|
||||
# KEIN Standard aus $env:USERNAME. Der lokale Windows-Name und das Konto auf
|
||||
# dem Server sind oft verschieden -- hier hiess der eine "az319" und der
|
||||
# andere "Darkster". Das Skript lief dann sauber durch und der Tunnel kam
|
||||
# trotzdem nicht, mit einer Fehlermeldung, die auf den Schluessel zeigte
|
||||
# statt auf den Namen. Lieber einmal fragen als einmal in die Irre fuehren.
|
||||
[string]$Benutzer,
|
||||
# Der Port auf DIESEM Rechner. Nicht 3389 nehmen: Windows lauscht dort
|
||||
# selbst, und dann landet die Verbindung auf dem eigenen PC statt im Tunnel
|
||||
# -- mit der irreführenden Meldung "Konsolensitzung bereits aktiv".
|
||||
@@ -35,6 +40,12 @@ param(
|
||||
)
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
if (-not $Benutzer) {
|
||||
Write-Host "Wie heisst dein Konto AUF DEM SERVER? (nicht der Name hier am PC)" -ForegroundColor Yellow
|
||||
$Benutzer = (Read-Host ' Benutzername').Trim()
|
||||
if (-not $Benutzer) { Write-Host ' Ohne Benutzernamen geht es nicht.' -ForegroundColor Red; exit 1 }
|
||||
}
|
||||
function Schritt($t) { Write-Host "==> $t" -ForegroundColor Cyan }
|
||||
function Gut($t) { Write-Host " $t" -ForegroundColor Green }
|
||||
function Warnung($t) { Write-Host " $t" -ForegroundColor Yellow }
|
||||
@@ -163,8 +174,29 @@ if ($steht) {
|
||||
Write-Host " Nicht mehr auf $Server verbinden -- das ist gesperrt." -ForegroundColor DarkGray
|
||||
} else {
|
||||
Warnung "Der Tunnel steht noch nicht auf Port $LokalerPort."
|
||||
Warnung 'Häufigste Ursache: der öffentliche Schlüssel ist auf dem Server noch'
|
||||
Warnung 'nicht hinterlegt. Zum Nachsehen einmal von Hand, dann sagt ssh warum:'
|
||||
Write-Host ""
|
||||
Write-Host " ssh $Benutzer@$Server" -ForegroundColor White
|
||||
Write-Host ''
|
||||
# NACHSEHEN STATT RATEN. Die erste Fassung behauptete hier "der Schluessel
|
||||
# fehlt auf dem Server" -- und lag falsch: es war der Benutzername. Eine
|
||||
# geratene Ursache schickt den Suchenden in die falsche Richtung, und das
|
||||
# kostet mehr Zeit als gar kein Hinweis.
|
||||
Schritt 'Nachsehen, woran es liegt'
|
||||
$antwort = & $ssh -o BatchMode=yes -o ConnectTimeout=10 `
|
||||
-o StrictHostKeyChecking=accept-new "$Benutzer@$Server" 'exit' 2>&1 | Out-String
|
||||
|
||||
if ($antwort -match 'Permission denied') {
|
||||
Warnung 'Der Server nimmt den Schluessel nicht an. Zwei Ursachen sind haeufig:'
|
||||
Warnung " - Der Benutzername stimmt nicht. Du hast '$Benutzer' benutzt --"
|
||||
Warnung ' ist das dein Konto AUF DEM SERVER, nicht das hier am PC?'
|
||||
Warnung ' - Der oeffentliche Schluessel ist dort noch nicht hinterlegt:'
|
||||
Write-Host ''
|
||||
Write-Host (" " + (Get-Content "$schluessel.pub")) -ForegroundColor White
|
||||
} elseif ($antwort -match 'Could not resolve|timed out|refused|unreachable') {
|
||||
Warnung "Der Server ist nicht erreichbar: $($antwort.Trim())"
|
||||
} elseif ($antwort.Trim()) {
|
||||
Warnung "ssh sagt: $($antwort.Trim())"
|
||||
} else {
|
||||
Warnung 'ssh selbst kommt durch -- dann klemmt es an der Weiterleitung.'
|
||||
Warnung "Steht auf dem SERVER etwas auf Port $ZielPort und laesst er"
|
||||
Warnung 'Weiterleitungen zu (AllowTcpForwarding)?'
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user