SSH et sqlplus

Bonjour à tous,

Je me permet de vous interroger car je n’arrive pas à trouver de solution a mon problème :
je souhaite me connecter à un poste Unix à distance via SSH et un user particulier pour interroger une base Oracle via un script SQL :
ssh user@host sqlplus -L -S loginOracle/pwdOracle@serviceOracle @/chemin/vers/mon/script.sql

Or le probleme est que lorsque la connection ssh se fait, il ne charge pas le .profile où se trouve les variables d’environnement nécessaires à Oracle.
Du coup il me sort un “sqlplus: not found”

Sauriez vous me dire s’il existe une option ssh ou un tout autre moyen pour que mon .profile de l’utilisateur distant soit chargé avant l’execution de la commande sqlplus?

Merci d’avance pour vos réponses.

Faut pas charger un truc dans le .bashrc ou une connerie du genre ?

Et de ce fait, tu as peut être l’option dans Putty?

Ca n’a rien à voir avec une option ssh car ce dernier se connecte au shell tout simplement. En fait le .profile est un fichier de paramétrage de sh et de ksh. Il n’est pas lu si ~/.bash_profile ou ~/.bash_login existent.

Bon, moi déjà ce que j’aurai fait (heu, non, que je fais :wink: ) ce serait d’extraire les variable d’environnement propre à la gestion Oracle (mais c’est pareil avec un env de dev) dans un fichier disons .profile_oracle. Ensuite, ajoute un

source .profile_oracle

en fin du .bashrc pour voir ou du .profile.

Tu sait dans quel shell tu est ?

Je vais essayé cette manip “source .profile_oracle”

J’avais pensé faire un source mais pas de cette manière.

C’est du ksh le shell sur la machine distante.

Mince… En effet normalement il devrait être lu. Question con, tu te connecte évidemment avec le même profile que lorsque tu le fait localement (autre quelstion, est tu sûr que la machine est allumée ? A tu essayé de l’éteindre et la rallumer ?.. heu… non, faut arréter IT Crowd :smiley: ). C’est le même shell dans les 2 cas ? Les procédures de lecture de fichiers de configs sont ils les même ?

Je suis en bash en local et ksh a distance.
Je suis en user root en local et user paulin à distance

[root@paulinPC ~]# ssh paulin@host . /home/paulin/.profile_oracle;sqlplus loginOracle/pwdOracle@serviceOracle @/chemin/vers/mon/script.sql

le .profile semble etre pris en considération mais il ne trouve pas pour autant le la commande sqlplus (du coup je doute…)

J’ai essayé avec le chemin complet vers le répertoire possédant la commande sqlplus… mais pas mieux…

La machine est allumée ( :smiley: )… Oracle est bien installé ( :stuck_out_tongue: )…

Ah oui mais attends, j’ai peur d’un truc…

Tu essaye d’envoyer la commande par ssh, et non pas te connecter par ssh pour lancer ta commande…

Oui alors là il peut y avoir des interrogation quand à la lecture des fichiers… Si tu te connecte et que tu lance ta commande ? Je présume que sqlplus est ajouté au path, si tu fait un echo $PATH >> logpath ?

oui c’est bien cela. J’essaie de lanser mon fichier sql (présent sur ma machine locale) avec la commande sqlplus d’Oracle (présent sur la machine distante)


Sur machine locale le "echo $PATH" me montre que le repertoire Oracle n'est pas ajouté malgré le ". /home/paulin/.profile_oracle"

sur ma machine distante il est bien renseigné.

:confused:

Bon ben apres quelques tentatives :
J’ai reussi a avancer dans le sens ou, si l’on ajoute des quotes ’ ’ la commande sqlplus est trouvée…

[root@paulinPC ~]# ssh paulin@host ‘. /home/paulin/.profile_oracle;sqlplus loginOracle/pwdOracle@serviceOracle @/chemin/vers/mon/script.sql’

Mais mon fichier sql étant sur ma machine locale… cela ne semble pas réalisable…

A moins que vous voyez un contournement?

:confused:

Attends… Suite à ta seconde partie je ne comprends pas…

Tu est sur une machine locale.

Tu a une machine distante faisant tourner Oracle.

Tu veux lancer une commande de TA machine locale SUR la machine distante avec ssh.

D’une, ceci ne lance pas de shell d’après la doc (donc je ne suis pas sur que ça lise les fichiers de conf’). Deuze, la commande doit être considérée comme étant intégralement exécutée sur la machine distante. De ce fait, si ton script est sur ta machine locale, je ne suis pas certain que ça fonctionne.

En fait je viens de relever…

Tu a écrit que tu faisait :

[root@paulinPC ~]# ssh paulin@host . /home/paulin/.profile_oracle;sqlplus loginOracle/pwdOracle@serviceOracle @/chemin/vers/mon/script.sql

Ca, ça correspond à


[root@paulinPC ~]# ssh paulin@host . /home/paulin/.profile_oracle
[root@paulinPC ~]# sqlplus loginOracle/pwdOracle@serviceOracle @/chemin/vers/mon/script.sql

En claire tu exécute ta deuxième commande en local… :smiley:

Essaye

[root@paulinPC ~]# ssh paulin@host "/home/paulin/.profile_oracle;sqlplus loginOracle/pwdOracle@serviceOracle @/chemin/vers/mon/script.sql"

J’ai cependant des doutes sur le fait qu’il trouve le script.sql… Donc je ferai plutôt


[root@paulinPC ~]# scp /chemin/vers/mon/script.sql paulin@host:. 
[root@paulinPC ~]# ssh paulin@host "/home/paulin/.profile_oracle;sqlplus loginOracle/pwdOracle@serviceOracle script.sql"

N’oublie pas que sqlplus est une application présente sur la machine distante qui accède au système de fichier local par rapport à lui, donc sur la machine distante…


[quote="paulinlemalin"] Bon ben apres quelques tentatives : J'ai reussi a avancer dans le sens ou, si l'on ajoute des quotes ' ' la commande sqlplus est trouvée...

[root@paulinPC ~]# ssh paulin@host ‘. /home/paulin/.profile_oracle;sqlplus loginOracle/pwdOracle@serviceOracle @/chemin/vers/mon/script.sql’

Mais mon fichier sql étant sur ma machine locale… cela ne semble pas réalisable…

A moins que vous voyez un contournement?

:confused:
[/quote]

Lol, bon j’ai mis longtemps à écrire la réponse… :smiley:

Ok : tu a tout dans le dernier code. On peut paufiner comme ça :

[root@paulinPC ~]# scp /chemin/vers/mon/script.sql paulin@host:. 
[root@paulinPC ~]# ssh paulin@host "/home/paulin/.profile_oracle;sqlplus loginOracle/pwdOracle@serviceOracle script.sql;rm script.sql"

Oui je pense que tu as du mettre du temps a cogité pour moi… :wink:

Pour ma part, je vais voir comment je fait evoluer le probleme (mettre mes script directement sur ma machine distante ou les envoyé par scp comme tu le dis dans ton dernier bout de code…)

Dans tous les cas, je te remercie beaucoup d’avoir plancher sur mon problème…

:wink:

Lol, non, je te rassure, je dis pas que j’ai pas essayé avant d’écrire pour vérifier la syntaxe, mais j’étais pas 100% sur la réponse non plus :wink:

Sur le principe c’est la même chose : scp copie (scp) de manière sécurisée via ssh (scp) un fichier d’une machine à une autre. Le script sera donc sur la machine distante.

De rien :wink:

Ou alors tu routes les ports de connexion à Oracle


ssh paulin@host -L 1521:localhost:1521

Donc apres tu lances sqlplus en local, et tu te connect sur localhost:1521 comme si tu avais un serveur oracle sur ta machine local.
Edité le 23/07/2009 à 16:44