Script um eine Datei via SSH hochzuladen

  • Hallo zusammen

    Scripte sind leider so überhaupt nicht meins. Folgende Prozedur würde ich gerne mit einem Script automatisieren:

    1. Verbindung via SSH und Anmeldung mit ssh-key
    2. Ausführen von curl https://rclone.org/install.sh | sudo bash
    3. Erstellen eines Files mit vorgegebenem Inhalt

    Dabei wäre es cool, wenn ich nach der IP gefragt werde. Also ich starte das Script, werde dann im Terminal nach der IP meines VPS gefragt und dann verbindet es automatisch via SSH, meldet sich an und überträgt dann die Datei bzw speichert einen bestimmten Text in dieser Datei.

    Zum Hintergrund:

    Es kommt immer wieder vor, dass ich große Dateien bzw Datenmengen via rclone von einem Server auf einen anderen übertragen möchte. Dafür nutze ich einen Hetzner VPS, da dieser nach Stunden abgerechnet wird und GBit-Anbindung hat. Ich erstelle also den Server und mein pub_key wird automatisch eingetragen. Das macht Hetzer ja. Danach verbinde ich mich via SSH, melde mich an (halt automatisch via ssh-key) und installiere rclone. Dann erstelle ich das config-file und kopiere meine vorhandene Config mit den enthaltenen Token hinein. Das würde ich gerne automatisieren, da sich der Inhalt der Config selten ändert.

    Jemand eine Anleitung für mich? Habe mit solchen Scripten null Erfahrung.

    Danke und Gruß

    Boris

    💾 AMD EPYC 7452 (8 Cores) 40GB | 💾 Unraid Homeserver i5-4570 16GB

    💻 Ryzen 9 7900X RX7800XT 32GB | 💻 MacBook Pro M2Pro 32GB

    EndeavourOS <3

  • Dann fange ich mit der SSH-Anmeldung an.

    Hatte die Tage in diesem Beitrag Zenity vorgestellt und schon haben wir einen Anwendungsfall. ;)

    Im Formular frage ich die notwendigen Angaben für die SSH-Anmeldung ab. Sollte der Port vom Standard 22 abweichen, dann müsstest du noch ein zusätzliches Feld einfügen. Für den Key habe ich ein Auswahlfeld gewählt, falls du mehrere Schlüssel haben solltest.

    Einmal editiert, zuletzt von Sojan (8. Februar 2023 um 04:18)

  • Das hier macht Chatgpt daraus.

    Es wird nach IP, Username und name des SSh-Keys gefragt. Wird kein Key sondern ein Passwort zur Identifikation benutzt einfach leer lassen

    #!/bin/bash

    # Get the IP address, username, and ssh key path

    echo "Enter the IP address of your VPS:"

    read vps_ip

    echo "Enter the username:"

    read username

    echo "Enter the path to your ssh key:"

    read ssh_key

    # Connect to the VPS using ssh and key-based authentication

    ssh -i .ssh/$ssh_key $username@$vps_ip << EOF

    # Run the curl command to install rclone

    curl https://rclone.org/install.sh | sudo bash

    # Create a file with the specified content

    echo "This is the content of the file" > test.txt

    EOF

    3 Mal editiert, zuletzt von Jan (8. Februar 2023 um 08:00)

  • Das würde ich weg lassen und lieber eine .ssh/config pflegen.

    Ansonsten würde ich so vorgehen:

    Befehl ausführen:

    Code
    ssh xxx.xxx.xxx.xxx -t 'curl https://rclone.org/install.sh | sudo bash'

    und das erstellen einer datei:

    Code
    ssh xxx.xxx.xxx.xxx -t 'echo "inhalt" > /home/test'


    Wobei, wenn du sowas öfters brauchst, solltest du dir mal ansible ansehen.

    Rollenspiel.Monster -Deine Fediverse Rollenspiel Nodes

    GPG

    System: TUXEDO Aura 15 - Gen1, AMD Ryzen 7 4700U, 32GB RAM, 1TB M.2 SATAIII, EndeavourOS(Gnome[Wayland])

  • Hier noch eine Version, bei der man den Dateinamen (inclusive des vollen Pfades z.b. /home/testuser/meinedatei.txt )

    angibt, und dann auch den Text in der Eingabe angibt.

    Mit Strg+D speichert und beendet man die Eingabe.


    #!/bin/bash

    # Get the IP address, username, ssh key path, and file name

    echo "Enter the IP address of your VPS:"

    read vps_ip

    echo "Enter the username:"

    read username

    echo "Enter the path to your ssh key:"

    read ssh_key

    echo "Enter the name of the file:"

    read file_name

    # Connect to the VPS using ssh and key-based authentication

    ssh -i .ssh/$ssh_key $username@$vps_ip << EOF

    # Run the curl command to install rclone

    curl https://rclone.org/install.sh | sudo bash

    # Create a file with the specified content

    cat > $file_name

    EOF

    # Input the file content after connecting to the VPS

    echo "Enter the content of the file, followed by [CTRL]+[D] to save and exit:"

    cat | ssh -i .ssh/$ssh_key $username@$vps_ip "cat >> $file_name"

  • Soll automatisch das Homeverzeichnis des User, der sich verbindet genutzt werden und darin die Datei anlegen werden, kann man dieses Script nehmen. So muss nur der Dateiname angegeben werden, ohne den kompletten Pfad.

  • Bei meinen Rechnern habe ich die IDs derjenigen, die auf andere zugreifen sollen, per ssh-copy-id geschickt.

    Soll das automatisch passieren, ist es wichtig, den ssh-key ohne Passwort zu erzeugen.

    Also erstmal:

    Code
    ssh-keygen
    [alles bestätigen, kein Passwort eingeben]
    dann
    
    ssh-copy-id <zielrechner>
    
    hier muss einmal das Passwort des Zielrechners eingegeben werden, da er ja den Schlüssel erst noch bekommt.

    Im Anschluss sollte man sich via ssh ohne Passwort vom lokalen Rechner auf dem Zielrechner einloggen können und auch scripte oder weiterleitungen zwischen beiden starten können.

    Wie das mit Anbietern funktioniert, weiß ich leider nicht, sollte aber ähnlich sein.

    Schinder und Knarren, statt Kinder und Narren...

    Alles ist so unsagbar schnell geworden.
    (EROC, Let's Gläntz)

    Vertrauen muss verdient werden. Man verschenkt es nicht.

    Ich stelle keine dummen Fragen. Du musst Dich mit Deinen Antworten schon ein bisschen anstrengen.

  • Ich nutze nun

    Klappt einwandfrei. Ich werde nach der IP gefragt, dann wird automatisch verbunden, rclone installiert und die config mit Token erstellt. Ich kann mich danach ganz normal anmelden und rclone verwenden.

    Danke euch

    💾 AMD EPYC 7452 (8 Cores) 40GB | 💾 Unraid Homeserver i5-4570 16GB

    💻 Ryzen 9 7900X RX7800XT 32GB | 💻 MacBook Pro M2Pro 32GB

    EndeavourOS <3

  • nur ne frage aber geht das mit scp nicht einfacher?

    scp pfad/zur/datei.txt user@host:/pfad/zum/ziehl/ordner

    PC:      Ryzen 9 7950 X3D, 64GB DDR5 RAM, Sapphire 7900 XTX - Arch Linux Plasma

    Laptop:    Lenovo Legion 5 AMD    - Manjaro KDE

    Server1:   Dedicated von Hetzner   - Debian Linux (für Xmpp+omemo, und Gameserver)

    ServerHome:   2x Xeon E5 2630v4, 64GB DDR4, 2x Raid5, 2x 512GB SSD - Debian Linux (als KVM host, NAS, ...)

  • Damit lassen sich direkt eine oder mehrere Dateien auf ein anderes System mittels scp (über ein ssh tunnel) transferieren.

    Das Herunterladen und Ausführen des Scriptes ist damit natürlich nicht machbar.

  • Damit lassen sich direkt eine oder mehrere Dateien auf ein anderes System mittels scp (über ein ssh tunnel) transferieren.

    Das Herunterladen und Ausführen des Scriptes ist damit natürlich nicht machbar.

    naja fürs herunterladen musste nur die 2 options umdrehen also erst server dann pc und dann noch was hinzu zum straten in einem script zb mit bash oder php, ... you name it

    PC:      Ryzen 9 7950 X3D, 64GB DDR5 RAM, Sapphire 7900 XTX - Arch Linux Plasma

    Laptop:    Lenovo Legion 5 AMD    - Manjaro KDE

    Server1:   Dedicated von Hetzner   - Debian Linux (für Xmpp+omemo, und Gameserver)

    ServerHome:   2x Xeon E5 2630v4, 64GB DDR4, 2x Raid5, 2x 512GB SSD - Debian Linux (als KVM host, NAS, ...)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!