Logo

http://www.gdra.de - Projektseite

RaspberryPi, BananaPi, Programmierung, Let's Play

ssh aktivieren bei Rasperian
verfasst am 26.12.2019 in BananaPi und RaspberryPi: Rasperian

Bei einer Neuinstallation von Rasperian als Image ist die ssh-Funktion deaktivert. Dies bereitet doch erhebliche Probleme. Ich verwende meine Pi's ohne Monitor und greife generell nur via ssh darauf zu. Es gibt aber einen einfachen Weg, den ssh-Dienst direkt zu aktivieren.

Sobald das Image auf der SD-Karte erstellt wurden ist (z.B. mit Win32 Disk Imager oder balenaEtcher), geht dann auf die boot-Partition der SD-Karte und fügt einfach eine leere Datei mit dem Namen "ssh" hinzu, keine Dateiendung.

Bild

Jetzt ist der ssh-Dienst automatisch beim ersten Start mit aktiviert.



Zugang via root
verfasst am 26.12.2019 in BananaPi und RaspberryPi: Rasperian

Die Grundinstallation von Rasperian erlaubt es nicht, sich als "root" direkt auf dem Pi anzumelden. Das ist auf der einen Seite nachvollziehbar, teilweise aber auch sehr hinderlich.

Das lässt sich aber relativ einfach ändern. Als erstes muss daszu das Root-Passwort geändert werden.

Loggt euch auf den Pi ein, dann in den Benutzer root:
  sudo -i

Dann als nächstes das Passwort ändern, am besten so sicher wie möglich und fraktal:
  passwd

Als nächstes muss der ssh-Dienst angepasst werden:
  nano /etc/ssh/sshd_config

Sucht in der Datei die Stelle #PermitRootLogin und ändert diese in:
  PermitRootLogin yes

Danach den ssh-Dienst neu starten:
  /etc/init.d/ssh restart


Ab jetzt ist es möglich sich als "root" in den Pi direkt einzuloggen.



sec_pass - sichere Passwörter
verfasst am 22.12.2019 in Programmierung: php

Wegen einiger Nachfrage habe ich mich dazu entschlossen, das Script als verwendbare Web-Version zu gestalten.

Diese ist zu finden unter: http://sec_pass.gdra.de

Viel Spaß damit!



InfoPi - Statusübersicht für den Pi
verfasst am 03.10.2019 in Programmierung: InfoPi

InfoPi ist mein neues Projekt. Dieses verfolgt die Absicht, wichtigste Informationen (wie z.B. Temperatur, Auslastung, Speicher) über die Pi in einer Weboberfläche darzustellen. Ich selber besitze mehrere verschiedene Pi's (u.a. BananaPi M1, RaspberryPi 3B+, RaspberryPi 4) und diese haben auch verschiedene Aufgaben. Ich habe bisher kein geeignetes Programm gefunden, daher programmiere ich selber eines. Dieses werde ich auch kostenlos zur Verfügung stellen, sobald es die wichtigsten Grundfunktionen hat.

Aktuell ist es schon möglich, den freien Speicher aller angeschlossen Geräte anzuzeigen (wichtig für Dateiserver), dass sieht im Moment so aus:
Bild

Es entwickelt sich Stück für Stück. Mit dem Ziel der Version 0.10 (Auslastung, Speicher, nutzbare Oberfläche) werde ich das Programm hier zur Verfügung stellen. Weitere Informationen folgen.



eigener Kurz-URL-Dienst
verfasst am 24.09.2019 in Programmierung: php

Was ist die Idee dahinter? Ganz einfach, man möchte sich sehr lange URL's einfach mal abkürzen. Im Idealfall kann man sich die Kurz-URL-Links so gestalten, dass man sich diese einfach merken kann.

Was braucht man dazu?
- eine Domain
- einen Server oder Hoster mit php
- ggf. eine MySQL-Datenbank
- ein wenig Zeit

Getestet ist das ganze mit php7.3, sollte auch mit php5.6 funktionieren.

Als erstes benötigt man eine Ansicht zum erstellen, nennen wir sie "url.html".

<html>
        <head>
        </head>
        <body>
                <table align="center">
                        <tr>
                                <td><input type="text" id="link" size="64"></td>
                                <td><input type="button" value="URL erstellen" onclick="url()"></td>
                        </tr>
                        <tr>
                                <td align="center" colspan="2"><br/><br/><u><b>URL:</u></b> <input type="text" id="url" onmouseover="select();" size="64" readonly></td>
                        </tr>
                </table>
        </body>
</html>

Nun haben wir erstmal eine Ansicht, mit der man arbeiten kann. Oben schreibt man die komplette URL rein, unten soll dann der Kurzlink angezeigt werden.
Als nächste benötigen wir ein Javascript, welches die Anfrage weiter gibt und die Antwort erwartet.

<script>
        function url()
                {
                        var req = null;
                        try
                                {
                                        req = new XMLHttpRequest();
                                }
                        catch (ms)
                                {
                                        try
                                                {
                                                        req = new ActiveXObject("Msxml2.XMLHTTP");
                                                }
                                        catch (nonms)
                                                {
                                                        try
                                                                {
                                                                        req = new ActiveXObject("Microsoft.XMLHTTP");
                                                                }
                                                        catch (failed)
                                                                {
                                                                        req = null;
                                                                }
                                                }
                                }

//"&" umformen, macht ein wenig Probleme beim übertragen
                        var amp = document.getElementById("link").value;
                        var anzahl = amp.split("&").length-1;
                        for (i=0;i<anzahl;i++)
                                {
                                        amp = amp.replace("&","-Ampersand-");
                                }
                        req.open("GET","url.php?link="+amp,true);
                        req.onreadystatechange = function()
                                {
                                        switch(req.readyState)
                                                {
                                                        case 4:
                                                                if (req.status == 200)
                                                                        {
//deine.url ersetzen
                                                        document.getElementById("url").value = "http://deine.url/?id="+req.responseText;
                                                                        }
                                                        break;
                                                        default:
                                                                return false;
                                                        break;
                                                }
                                }
                        req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                        req.send(null);
                }
</script>

Jetzt ist das html erstmal fertig. Jetzt kommt das php, hier die "url.php", zum Einsatz. Ich habe mich für eine Variante mit MySQL-Datenbank im Hintergrund entschieden.
Die Datenbank besteht aus 3 Spalten: id, link, url

<?php

        define("SQL_HOST","MySQL-Server"); 
        define("SQL_USER","MySQL-Nutzer");
        define("SQL_DATABASE","MySQL-Datenbank");
        define("SQL_PASS","MySQL-Passwort"); 

        function sql($abfrage)
                {
                        return mysqli_query(mysqli_connect(SQL_HOST,SQL_USER,SQL_PASS,SQL_DATABASE),$abfrage);
                }
                
        function sql_assoc($abfrage)
                {
                        return mysqli_fetch_assoc(sql($abfrage));
                }

        function sql_num($abfrage)
                {
                        return mysqli_num_rows(sql($abfrage));
                }

        function sql_assign($abfrage,$wert)
                {
                        $abfrage = sql_assoc($abfrage);
                        return $abfrage[$wert];
                }
                
        function zahl($var)
                {
                        return preg_match("=^[0-9]+$=i",$var);
                }
                
        function sec_url($kb,$gb,$sz,$z,$u=0)
                {
                        if (!zahl($kb) or !zahl($gb) or !zahl($sz) or !zahl($z) or !zahl($u))
                                {
                                        return false;
                                }
                        else
                                {
                                        $url = array();
                                        $var["kb"] = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n",
                                                                                "o","p","q","r","s","t","u","v","w","x","y","z");
                                        $var["gb"] = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N",
                                                                                "O","P","Q","R","S","T","U","V","W","X","Y","Z");
                                        $var["sz"] = array("_","-");
                                        $var["z"] = array("1","2","3","4","5","6","7","8","9","0");
                                        for ($a=0;$a<$kb;$a++)
                                                {
                                                        $url[] = $var["kb"][rand(0,count($var["kb"])-(($u==1) ? 1 : 4))];
                                                }
                                        for ($a=0;$a<$gb;$a++)
                                                {
                                                        $url[] = $var["gb"][rand(0,count($var["gb"])-(($u==1) ? 1 : 4))];
                                                }
                                        for ($a=0;$a<$sz;$a++)
                                                {
                                                        $url[] = $var["sz"][rand(0,count($var["sz"])-(($u==1) ? 1 : 2))];
                                                }
                                        for ($a=0;$a<$z;$a++)
                                                {
                                                        $url[] = $var["z"][rand(0,count($var["z"])-1)];
                                                }
                                        $var = array();
                                        shuffle($url);
                                        for ($a=0;$a<count($url);$a++)
                                                {
                                                        $url_ret .= $url[$a];
                                                }
                                        $url = array();
                                        return $url_ret;
                                }
                }
                
        if (isset($_GET["link"]))
                {
//3-fache Prüfung ob Kurzlink eventuell existiert, verschiedene Variablen
                        $_GET["link"] = str_replace("-Ampersand-","&",$_GET["link"]);
                        $sec_url = sec_url(3,3,1,1,1);
                        if (sql_num("SELECT * FROM `url` WHERE `url` = '".$sec_url."'") > 0)
                                {
                                        $sec_url = sec_url(3,2,1,2,1);
                                        if (sql_num("SELECT * FROM `url` WHERE `url` = '".$sec_url."'") > 0)
                                                {
                                                        $sec_url = sec_url(2,2,1,3,1);
                                                }
                                }
//Prüfung ob der selbe Link schon existiert um doppelte Einträge zu vermeiden wird der alte Kurzlink ausgelesen
                        $da = sql_assign("SELECT `url` FROM `url` WHERE MD5(`link`) = '".md5($_GET["link"])."'","url");
                        if ($da == "")
                                {
                                        sql("INSERT INTO `url` (`link`,`url`) VALUES ('".mysql_real_escape_string($_GET["link"])."','".$sec_url."')");
                                        $da = sql_assign("SELECT `url` FROM `url` WHERE MD5(`link`) = '".md5($_GET["link"])."'","url");
                                }
                        echo $da;
                }
        else
                {
                        echo "Anweisung nicht verstanden.";
                }

?>

Damit wäre die Möglichkeit zur Erstellung von Kurz-URL-Links fertig. Jetzt muss man diese nur noch auslesen. Dafür brauchen wir eine "index.php" welche wir mit "?id=" ansprechen können.

<?php

        define("SQL_HOST","MySQL-Server"); 
        define("SQL_USER","MySQL-Nutzer");
        define("SQL_DATABASE","MySQL-Datenbank");
        define("SQL_PASS","MySQL-Passwort"); 

        function sql($abfrage)
                {
                        return mysqli_query(mysqli_connect(SQL_HOST,SQL_USER,SQL_PASS,SQL_DATABASE),$abfrage);
                }
                
        function sql_assoc($abfrage)
                {
                        return mysqli_fetch_assoc(sql($abfrage));
                }

        function sql_assign($abfrage,$wert)
                {
                        $abfrage = sql_assoc($abfrage);
                        return $abfrage[$wert];
                }
                
        if (isset($_GET["id"]))
                {
                        $da = sql_assign("SELECT `link` FROM `url` WHERE MD5(`url`) = '".md5($_GET["id"])."'","link");
                        if ($da == "")
                                {
//Fehlerseite das Link nicht da ist
                                        header("Location: http://deine.url/404");
                                }
                        else
                                {
                                        header("Location: ".$da);
                                }
                }
        else
                {
//Fehlerseite das keine Anfrage bzgl. Kurzlink angegeben wurde (?id= fehlt)
                        header("Location: http://deine.url/404");
                }
                
?>

Das wars im Prinzip schon. Funktioniert sehr gut, probiert es einfach mal aus.

Das Script zum downloaden:


ssh aktivieren bei Rasperian

Zugang via root

sec_pass - sichere Passwörter

InfoPi - Statusübersicht für den Pi

eigener Kurz-URL-Dienst

Allgemein (3)

BananaPi und RaspberryPi (2)
~~> Rasperian (2)

Programmierung (4)
~~> InfoPi (1)
~~> php (3)

sec_pass.gdra.de - sichere Passwörter

[+] Dezember 2019 (3)

[+] Oktober 2019 (1)

[+] September 2019 (2)

[+] August 2019 (1)

[+] Juli 2019 (2)

Datenschutzerklärung

Impressum

xapf.de

©2004-2020 Peter Höche | http://www.gdra.de | Version: 2019-1.02 | Impressum | Datenschutz