it-swarm.com.de

Wie kann ich vermeiden, ein Passwort für einen scp-Befehl eingeben zu müssen, indem ich das Passwort fest in mein Skript einkodiere?

Ich habe ein Bash-Skript erstellt, in das ich manchmal einige Informationen eingeben muss (anderes Computerkennwort/Benutzername), wenn ich es ausführe.

Gibt es eine Möglichkeit, dies zu verhindern, indem Sie diese Informationen in den Code eingeben (fest codieren)? Auf diese Weise läuft es beim Ausführen reibungslos, ohne dass ich aufgefordert werde, etwas einzugeben.

Dies ist der Befehl:

scp /home/machine1/backup/test.txt /home/machine2/backup

Anstatt das machine2-Passwort einzugeben, möchte ich es in meinem Skript fest codieren.

6
Taieb

Die SSH-Schlüsselauthentifizierung ist bequem und sicher

Bitte codieren Sie kein Passwort fest in das Shellscript, da es für andere leicht zu lesen ist.

  • Melden Sie sich mit Schlüsselauthentifizierung an, um ssh zu erhalten.

    Auf diese Weise benötigen Sie kein Passwort und es ist auch sicherer. Dies ist besonders wichtig, wenn der Computer im Internet sichtbar ist. Wenn Sie es nicht für wichtig halten, protokollieren Sie die Anmeldeversuche, die Sie für die nächste Woche erhalten.

    • Laufen

      ssh-keygen
      

      Ihnen wird wahrscheinlich angeboten, den Schlüssel mit einer Passphrase zu schützen.

    • Tun Sie es nicht (drücken Sie die Eingabetaste, um ohne eine Passphrase fortzufahren, wenn Sie nach ssh-keygen gefragt werden), da Sie kein Passwort eingeben möchten oder eine Passphrase, wenn Sie das Skript ausführen und zur Befehlszeile scp gelangen.

      Ohne Schlüsselauthentifizierung und mit Klartext-Passwörtern ist es sehr wichtig, dass das Shellscript über strenge Berechtigungen verfügt. Dies ist auch für sicherheitsrelevante Shellscripts ohne Klartext-Passphrase eine gute Idee. Die Standardberechtigungen für eine Skriptdatei (wenn sie in Ihrem Ausgangsverzeichnis erstellt wurde) lauten wahrscheinlich 644

      $ ls -l shellscript 
      -rw-r--r-- 1 sudodus sudodus 349 dec 23 10:54 shellscript
      

      und Sie können Ihren Skriptdateien Ausführungsberechtigungen für alle geben, 755

      $ chmod 755 shellscript
      $ ls -l shellscript 
      -rwxr-xr-x 1 sudodus sudodus 349 dec 23 10:54 shellscript
      

      aber du solltest es besser auf 600 reduzieren, keine Erlaubnis außer deiner eigenen Benutzer-ID und überhaupt keine Ausführungserlaubnis

      $ chmod 600 shellscript 
      $ ls -l shellscript
      -rw------- 1 sudodus sudodus 349 dec 23 10:54 shellscript
      

      und Sie können es nicht direkt mit ./shellscript ausführen, also verwenden Sie

      bash shellscript       # when shellscript in the current directory
      bash path-to-shellscript/shellscript  # from other directories
      
    • Machen Sie es (geben Sie eine Passphrase ein, wenn ssh-keygen Sie fragt), wenn Sie eine höhere Sicherheit wünschen, da Ihr privater Schlüssel geschützt (mit der Passphrase verschlüsselt) wird ), aber dann müssen Sie die Passphrase eingeben, wenn Sie das Skript mit scp ausführen.

    • Sie müssen eine Schlüsseldatei kopieren, zum Beispiel mit

      ssh-copy-id <username>@<Host>
      
    • scp verwendet ssh für die Datenübertragung. Wenn die Schlüssel vorhanden sind, sollte dies ohne Kennwort funktionieren.


  • Jeder Linux-Rechner kann durch Installation von openssh-server in Ubuntu mit ssh zu einem apt -Server gemacht werden.

    Sudo apt update
    Sudo apt install openssh-server
    

13
sudodus

Richten Sie den SSH-Zugriff auf Ihren Server mit einem öffentlichen/privaten RSA-Schlüsselpaar ein. Behalten Sie Ihren privaten Schlüssel im Speicher. Dann können Sie ohne Kennwort scp oder ssh auf den Server übertragen (die Authentifizierung von Schlüsseldateien ist nicht nur einfacher, sondern auch wesentlich sicherer als die Authentifizierung von Kennwörtern).

So richten Sie ssh für die Authentifizierung von Schlüsseldateien ein: https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2

1
Eric Mintz

Verwenden Sie sshpass. In Ubuntu kannst du es mit Sudo apt install sshpass installieren.

Diese allgemeine Syntax sollte den Trick machen:

sshpass -p<password> <source> <destination>

Dies ist jedoch nicht sicher. Wir sollten der grundlegenden Sicherheit nicht zu viel Bequemlichkeit einräumen. Jeder andere Benutzer im System kann die Befehle und Argumente sehen, die von anderen Benutzern ausgeführt werden. Zum Schutz können Sie sshpass aus einer Umgebungsvariablen lesen lassen.

export SSHPASS=<password>
sshpass -e scp <source> <destination>

Ich würde auch empfehlen, unset SSHPASS auszuführen, wenn etwas anderes in Ihrem Skript nicht vertrauenswürdig ist.

0
user728899