Steffen: Bash / SSH

Hi,

ich würde gern remote auf einem anderen Rechner ein Shell-Script ausführen und dabei aber auch Dateien mitgeben.

Das Script würde ich im Moment wie folgt ausführen.

  
ssh user@host bash < myscript.sh  

Mein Ziel wär es jetzt, nur eine SSH-Verbindung aufzumachen und darüber die Dateien zu transferieren und das Script auszuführen.

  
ssh user@host 'cat > targetfile' < sourcefile  

Wie kann ich das in einer SSH-Verbindung kombinieren?

Grüße

  • Steffen

PS
Ich habe die Dateien mal testhalber base64-encoded in das Script eingebettet, was schonmal funktioniert hat. Es war aber nicht ganz zu meiner Zufriedenheit.

  1. Mahlzeit,

    grundsätzlich sollte es so klappen:

    cat quelldatei | ssh user@remote 'umask 077; cat > zieldatei'

    Ob das umask sinnvoll/nötig ist, hängt von deinen Einstellungen ab.

    --
    eigentlich ist mir bewusst, dass ich hin und wieder einfach mal die Klappe halten sollte. Doch genau in den unpassendsten Momenten erwische ich mich dabei, wie ich dennoch etwas sage ...
    1. Danke!

      grundsätzlich sollte es so klappen:

      cat quelldatei | ssh user@remote 'umask 077; cat > zieldatei'

      Ob das umask sinnvoll/nötig ist, hängt von deinen Einstellungen ab.

      Das ist auch das, was mein zweites Beispiel tut.

      ssh user@host 'cat > targetfile' < sourcefile

      Ich würde das aber gern noch mit einem Remote-Script wie in meinem 1. Beispiel kombinieren.

      Die Ausgangsbasis ist als ein lokales Script (example.sh) und z.B. eine Zip-Datei (example.zip).
      Mein bisheriger Weg war folgender.

        
      # datei transferieren  
      ssh user@host 'cat > example.zip' < example.zip  
      # script ausfüren  
      ssh user@host bash < example.sh  
      
      

      Dafür sind aber 2 SSH-Verbindungen nötig, was ich gern vermeiden würde.
      Geht das? Irgendwelche Ideen?

      Grüße

      • Steffen
      1. Hallo,

        einen Weg, den ich mir gerade gebastelt habe ist folgender.

          
        ssh user@host /bin/bash <<EOF  
          
        echo "`base64 example.zip`" | base64 -d > example.zip  
          
        `cat example.sh`  
          
        EOF  
        
        

        Hier wird die ZIP-Datei in den Commands im STDIN für die Bash mit übertragen.

        Gibt es noch andere Möglichkeiten?

        Grüße

        • Steffen
        1. Mahlzeit,

          Gibt es noch andere Möglichkeiten?

          Was spricht gegen SCP oder SFTP?

          --
          eigentlich ist mir bewusst, dass ich hin und wieder einfach mal die Klappe halten sollte. Doch genau in den unpassendsten Momenten erwische ich mich dabei, wie ich dennoch etwas sage ...
          1. Gibt es noch andere Möglichkeiten?

            Was spricht gegen SCP oder SFTP?

            Nichts, spricht dagegen, außer dass ich dann zum Script ausführen wieder eine (zweite) SSH-Verbindung brauche.

            Steffen

            1. Mahlzeit,

              Nichts, spricht dagegen, außer dass ich dann zum Script ausführen wieder eine (zweite) SSH-Verbindung brauche.

              Ich würde das eh anders rum machen. Ich würde das Script anstossen, das sich dann die Datei abholt. Hat den Vorteil, dass das Script die Daten holt, wenn es Zeit hat. Damit schliesst du einen Flaschenhals als Fehlerquelle aus.

              --
              eigentlich ist mir bewusst, dass ich hin und wieder einfach mal die Klappe halten sollte. Doch genau in den unpassendsten Momenten erwische ich mich dabei, wie ich dennoch etwas sage ...