2
votes

Comment exécuter un fichier de script de chiffrement à partir du terminal avec la commande cypher-shell neo4j?

J'ai un fichier de script de chiffrement et je voudrais l'exécuter directement.

Toutes les réponses que j'ai pu trouver sur SO au meilleur de ma connaissance utilisent la commande neo4j-shell qui dans mon version (serveur Neo4j 3.5.5) semble être obsolète et remplacée par la commande cyphershell.

Utilisation de la commande sudo ./neo4j-community-3.5.5/ bin / cypher-shell --help J'ai reçu les instructions suivantes.

utilisation: cypher-shell [-h] [-a ADDRESS] [-u USERNAME] [-p PASSWORD] [--encryption {true, false}] [--format {auto, verbose, plain}] [--debug] [--non-interactive] [--sample-rows SAMPLE-ROWS] [--wrap {true, false}] [-v] [--driver-version] [--fail-fast | --fail-at-end] [chiffrement]

Un shell de ligne de commande où vous pouvez exécuter Cypher sur un instance de Neo4j. Par défaut, le shell est interactif mais vous pouvez utilisez-le pour le script en passant cypher directement sur la commande ligne ou en canalisant un fichier avec des instructions de chiffrement (nécessite Powershell sous Windows).

Mon fichier est le suivant qui tente de créer un graphique à partir de fichiers csv et il provient du livre "Algorithmes de graphes".

 sudo cat neo_4.cypher| sudo ./neo4j-community-3.5.5/bin/cypher-shell -u usr -p 'pwd'

Quand j'essaye pour passer le fichier directement avec la commande:

Invalid input 'n': expected <init> (line 1, column 1 (offset: 0))
"neo_4.cypher"
 ^

il demande d'abord le nom d'utilisateur et le mot de passe mais après avoir tapé le bon mot de passe (le mauvais mot de passe entraîne l'erreur Le client n'est pas autorisé en raison d'un échec d'authentification. ) J'obtiens l'erreur:

sudo ./neo4j-community-3.5.5/bin/cypher-shell neo_4.cypher

Quand j'essaye de faire un piping avec la commande:

WITH "https://github.com/neo4j-graph-analytics/book/raw/master/data" AS base 
WITH base + "transport-nodes.csv" AS uri
LOAD CSV WITH HEADERS FROM uri AS row
MERGE (place:Place {id:row.id})
SET place.latitude = toFloat(row.latitude),
  place.longitude = toFloat(row.latitude),
  place.population = toInteger(row.population)

WITH "https://github.com/neo4j-graph-analytics/book/raw/master/data/" AS base 
WITH base + "transport-relationships.csv" AS uri
LOAD CSV WITH HEADERS FROM uri AS row
MATCH (origin:Place {id: row.src})
MATCH (destination:Place {id: row.dst})
MERGE (origin)-[:EROAD {distance: toInteger(row.cost)}]->(destination)


0 commentaires

3 Réponses :


3
votes

Je pense que la clé est ici:

sudo cypher-shell arguments_as_needed < neo_4.cypher

Cela signifie que le paramètre est un véritable code de chiffrement, pas un nom de fichier. Ainsi, cela fonctionne:

cat neo_4.cypher | cypher-shell

Mais ce n'est pas le cas (car le texte "neo_4.cypher" n'est pas une requête de chiffrement valide)

example of piping a file:
  cat some-cypher.txt | cypher-shell

L'aide dit aussi:

cypher-shell neo_4.cypher

Donc:

GMc@linux-ihon:~> cypher-shell "match(n) return n;"
username: neo4j
password: ****
+-----------------------------+
| n                           |
+-----------------------------+
| (:Job {jobName: "Job01"})   |
| (:Job {jobName: "Job02"})   |

devrait fonctionner. Peut-être que votre problème est tout le sudo. Plus précisément le chat ... | sudo cypher-shell. Il est possible que sudo protège cypher-shell de certaines entrées arbitraires (bien que cela ne semble pas le faire sur mon système).

Si vous avez vraiment besoin d'utiliser sudo pour exécuter cypher, essayez d'utiliser le suivant:

cypher-shell -- help

... Stuff deleted

positional arguments:
  cypher                 an optional string of cypher to execute and then exit

Oh, aussi, votre script n'a pas de retour, donc il n'affichera probablement aucune donnée, mais vous devriez quand même voir les rapports récapitulatifs des enregistrements

Essayez peut-être d'abord quelque chose de plus simple, comme une simple requête match ... return ... dans votre script.

Oh, et n'oubliez pas de terminer la requête de chiffrement avec un point-virgule!


6 commentaires

Merci pour votre réponse. J'ai essayé avec une commande plus simple avec un résultat. Apparemment, j'ai besoin du sudo même pour des commandes simples telles que sudo ./neo4j-community-3.5.5/bin/cypher-shell "MATCH (n: Person) RETURN n LIMIT 25; " sinon aucune sortie n'est générée. De plus, votre exemple sudo cypher-shell arguments_as_needed ne produit rien.


Je me demande s'il y a un bug? Mon système fait la même chose. Il existe ce rapport de bogue similaire ici . Ce n'est pas exactement le même problème (mon fichier n'a pas de caractères de nomenclature) mais c'est similaire. Je vais continuer à jouer avec pour voir si je peux en savoir plus.


Merci pour votre aide. Le problème est que pour le chiffrement, chaque ligne doit se terminer par ; . J'ai encore besoin de sudo mais ce n'est pas un problème.


Après avoir dormi dessus, je suis arrivé à la même réalisation que j'avais (une fois de plus) oublié le point-virgule de fin de ma requête dans le fichier texte. Une fois ajouté, cela fonctionne comme prévu. J'ajouterai cela à la réponse :-)


@Francesco_Boi Si l'une de ces réponses vous a aidé, pourriez-vous s'il vous plaît accepter l'une d'elles comme réponse et "voter". Cliquez simplement sur la petite "coche" grise à côté de la réponse qui, selon vous, vous a le plus aidé.


J'ai voté pour le vôtre lorsque vous avez publié: en fait, il a un score de +1 (par moi). Ce qui a fonctionné est expliqué dans ma réponse.



1
votes

Le problème est dans le fichier de chiffrement: chaque ligne doit se terminer par un point-virgule: ; . J'ai encore besoin de sudo pour exécuter le programme.

Le fichier extrait du livre semble également contenir d’autres erreurs.


0 commentaires

3
votes

Utilisez cypher-shell -f yourscriptname . Vérifiez avec --help pour plus de description.


0 commentaires