2017-07-25 3 views
0

J'ai créé un script qui se connecte à un serveur à l'aide de SFTP. Pour éviter de mettre le mot de passe dans le script en texte clair, je prévois de le mettre dans un fichier encodé en base64. Je peux lire dans le fichier sans problème. Mais je ne sais pas comment décoder base64 avec Expect. Donc, pour l'instant, le script lit le fichier et place le mot de passe (directement) dans le script. Comment le décoder? Je suis prêt à ramener tout le script vers Shell/bash s'il y a un bon moyen de le faire.Script d'attente: lecture du mot de passe Base64 à partir du fichier

Merci. Voici le code:

#!/usr/bin/expect 
set myPassword [open "sftp_auth.cfg" r] 
set data [read $myPassword] 

spawn sftp [email protected] 
expect "*assword:" 
send "$data\n" 
expect "sftp>" 
send "cd /repository\n" 
expect "sftp>" 
send "get Example.sh /home/User/Example2.sh\n" 
expect "sftp>" 
send "exit\n" 
interact 
+0

pour ceux qui cherchent à lire le nom d'utilisateur et mot de passe de fichier dans un script expect:. Https: // www. linuxquestions.org/questions/programming-9/expect-read-passphrase-from-a-file-287216/ – lesmana

Répondre

1

Vous pouvez utiliser la commande exec de Tcl pour décoder le mot de passe. Par exemple:

[STEP 101] # cat foo.exp 
set base64_passwd UGFzc3cwcmQ= 
set passwd [exec echo $base64_passwd | base64 -d] 
puts $passwd 
[STEP 102] # expect foo.exp 
Passw0rd 
[STEP 103] # 
+0

Puisque le mot de passe encodé est déjà dans un fichier, laissez base64 lire ce fichier: 'set passwd [exec base64 -d sftp_auth .cfg] ' –

+0

oui vous avez raison. – pynexj

+0

Merci. C'est exactement ce que je cherchais. – user52713

2
  1. puisque vous utilisez S ftp, la meilleure méthode consiste à utiliser l'authentification par clé publique. Chercher "clés publiques sftp"

  2. vous pouvez installer the tcllib package, puis faire

    package require base64 
    set f [open sftp_auth.cfg] 
    gets $f data 
    close $f 
    set pw [::base64::decode $data] 
    
  3. interpellent base64

    set pw [exec base64 -d sftp_auth.cfg] 
    

Mieux faire en sorte que auth fichier n'a pas monde autorisations lisibles: base64 n'est pas exactement cryptographiquement sécurisé.

+2

Oui, je sais à propos de base64. Je prévoyais de suggérer l'idée d'utiliser l'authentification par clé publique/privée pour l'équipe de toute façon. Merci – user52713

+0

parfois stocker un mot de passe en texte clair sur le système de fichiers est la solution la plus simple, si vous pouvez vivre avec le manque évident de sécurité. Dans ce cas, il est vraiment inutile d'obscurcir le mot de passe, d'autant plus que le script expect est également en texte brut et que la méthode de "décryptage" est là pour le voir. –

+1

Oui, je suis tout à fait conscient de cela merci de l'avoir signalé. Je vais creuser plus profondément dans ce sujet et voir ce que je peux faire. – user52713

0

Si vous utilisez Tcl 8.6, le soutien base64 (y compris le décodage) est construit en

set f [open "sftp_auth.cfg" r] 
set password [binary decode base64 [read $f]] 
close $f