CluPilotCloud/app/Console/Commands/ServerTerminalKey.php

51 lines
1.8 KiB
PHP

<?php
namespace App\Console\Commands;
use App\Services\Terminal\ServerIdentity;
use Illuminate\Console\Command;
/**
* Die öffentliche Hälfte der Serverkennung, eine Zeile, sonst nichts.
*
* Gerufen von `/usr/local/sbin/clupilot-host-step install-server-terminal` —
* der root-eigenen Hälfte auf dem Wirt, die daraus einen Eintrag in
* `/root/.ssh/authorized_keys` macht. Nach demselben Muster wie
* `apply-proxy-hosts`: der privilegierte Schritt HOLT sich den Wert selbst,
* statt ihn vom Dienstkonto gereicht zu bekommen, und prüft ihn dann hart.
*
* Nur die öffentliche Hälfte. Ausgabe eines Kommandos wandert in Protokolle
* und Terminalverläufe; was hier herauskommt, stünde ohnehin in jeder
* authorized_keys.
*
* Kein Erzeugen auf Zuruf: gibt es keine Kennung, endet das Kommando mit 3 und
* einem Satz, der sagt, wo sie entsteht. Ein Kommando, das im Vorbeigehen einen
* Schlüssel mintet, täte es unter niemandes Namen — und der Tresor hält fest,
* WER einen Wert gesetzt hat.
*/
class ServerTerminalKey extends Command
{
protected $signature = 'clupilot:server-terminal-key';
protected $description = 'Print the public half of the server terminal SSH identity';
public function handle(): int
{
$publicKey = ServerIdentity::publicKey();
if ($publicKey === null) {
$this->getOutput()->writeln(
'<error>Für den Server ist keine SSH-Kennung erzeugt. In der Konsole unter Einstellungen → Terminal zum Server anlegen.</error>',
);
return 3;
}
// Nur die Zeile, ohne Rahmen und ohne Farbe: der Aufrufer ist ein
// Skript, das sie zeichengenau weiterverarbeitet.
$this->getOutput()->writeln($publicKey);
return self::SUCCESS;
}
}