pause-café
destinée aux informaticiens sur plateforme IBM i.
Pause-café #58
Quelques nouvelles :
Zend vient de proposer au téléchargement une "cumulative" pour Zend Server (choisir l'onglet IBM i) permettant de passer le produit de version 5.0.4 à 5.1.0
Évolutions :
- une mise à jour de PHP en version 5.2.17 ou 5.3.6
- support complet du driver ODBC (en plus de DB2 Connect), incluant un correctif lié à odbc_setoption()
- un driver intégré pour Oracle (OCI8) version 1.4.5
- une version 3.0.36 du PHP Toolkit d'AURA
- une version bêta d'un nouveau PHP Toolkit écrit par Zend et IBM plus orienté POO (l'accord avec AURA ne serait pas reconduit)
-> plus d'infos sur http://files.zend.com/help/Zend-Server-IBMi/php_toolkit_xml_service_functions.htm- des correctifs pour IBMDB2i qui est toujours maintenu par IBM, malgré qu'il n'y ai plus de version MYSQL téléchargeable et supportée par Oracle
Cette PTF (fortement recommandée, de notre point de vue) s'installe via SAVF, puis comme une PTF "normale"
A ce propos la totalité de notre site, dont le forum et les sites des clubs utilisateurs Nord Ouest (Pays de Loire et Bretagne) utilisent maintenant Zend Server et non plus ZendCore, sur notre System i.
le produit OmniFind propose via une PTF (SI40272) l'indexation de fichiers SPOOLS et de fichiers de l'IFS.
plus d'informations à la prochaine Pause café (59 !) quand nous aurons décortiqué la documentation officielle, qui n'est pas à ce jour disponible.
Information trouvée sur le site Technology Update qui donne des informations sur les dernières PTF apportant de nouvelles fonctionnalités, pour les version 5.4 , 6.1 et 7.1
Où l'on apprend :
- qu'une partition peut maintenant être suspendue (VIOS uniquement)
- qu'une nouvelle console SDMC, basée sur IBM director, va remplacer la HMC.
Nous avons mis à jour notre mémo RPG pour la version 7 et nous vous proposons un nouveau mémo (en plus de celui pour SQL) sur RDI/RDP
Extrait (liste des fonctions intégrées)
Fonction(x) Retourne Exemple%ADDR l'adresse d'une variable EVAL prt= %addr(data)
%PADDR l'adresse d'une procédure (pour CALLB) %ELEM donne le nombre d'occurrences d'un tableau ou d'une DS if I < %elem(tbl_tva)%SUBST extraction d'une chaine de caractère if %subst(raisoc : 1 : 1) <> ' '
eval %subst(pgm : 1 : 1) = 'Q'%SIZE donne la longueur déclaré d'une variable if %SUBST(nom : %size(nom): 1) = *blank%DECPOS donne le nombre de décimales %TRIM élimination des espaces d'extrémité eval NP = %trim(nom) + ' ' + %trim(prenom)%TRIML|%TRIMR élimination des blancs de gauche/de droite %PARMS indique le nombre de paramètres recus if %parms > 2%ABS valeur absolue %DEC
%DECHtransforme une valeur numérique (char en V5.2,date en V5.3) en numérique condensé ou packé.
(%DECH applique un arrondi)eval DATAMJ = %dec(DATCDE : *YMD) %INT
%INTHtransforme une valeur numérique (ou caractère en 5.20)au format binaire signé
%UNS
%UNSHtransforme une valeur numérique (ou caractère ) au format binaire non signé
%FLOAT
transforme une valeur numérique (ou caractère) au format virgule flottante %EDITFLT
transforme de virgule flottante vers chaîne %EDITC
transforme du numérique en chaine avec application
d'un edit code eval msg = 'date de traitement' +
%editc(date : 'Y')
eval montanchar = %editc(
qte * prix : '3')%EDITW
idem %EDITC mais avec un mot d'édition %CHAR transforme date ou numérique en chaîne ZoneChar=%CHAR(ZoneDec) // 000123,45- ==> '-123,45'%STR transforme une chaine RPG en chaîne compatible C
(pointeur vers une chaine terminée par x'00' )%LEN
retourne la longueur d'une expression if %len(%trim(nom)) > 2eval L = %len(zone-variable)%SCAN
recherche si présence d'une chaîne de caractères eval chaine = 'ILE/RPG-IV'
eval pos = %scan('I' : chaine) [pos=1]
eval deb = pos + 1
eval pos = %scan('I' : chaine: deb) [pos=9]%REPLACE remplace par une chaîne l'information située à la position indiquée [var1 = 'AS/400']
eval x = %scan('4' : var1)
eval var2 = %replace('5': var1:x)
[var2 = 'AS/500']
eval var2 = %replace('X': var1 : 1 : 3)
[je remplace 3 caractères : var2 = 'X500']%NULLIND
test la val.nulle sur un champ base de données IF %NULLIND(datcmd) = *ON
EVAL %NULLIND(prime) = *OFF
EVAL prime = 1500%OPEN
indique si un fichier est ouvert if %open(clients)%EOF
indique si l'on est fin de fichier dow not %eof(clients)%ERROR
indique si on est en erreur
(à utiliser suite à un code avec (E).) if %error%STATUS
indique le n° d'erreur (code status) if %error and %status(clients) = 1252%EQUAL
indique
un positionnement par égalité (SETLL)
une recherche aboutie par égalité (LOOKUP)%FOUND
indique
un positionnement réalisé(SETLL,SETGT)
un recherche aboutie (CHAIN) ---- V4R40 ----%GRAPH
conversion en DBCS %UCS2
conversion en UNICODE %XFOOT
somme d'un tableau eval total = %xfoot(tb_salaire) + prime%DIV
résultat de la division (entiers uniquement) %REM
reste de la division (entiers uniquement) if %rem(an : 4 )= 0 ---- V5R10 ----%ALLOC l'adresse d'un nouvel espace mémoire EVAL prt= %alloc(nboctets)
%CHECK la position du premier caractère invalide Eval pos = %check('0123456789.' : variable)%CHECKR Idem %CHECK, mais en commencant à droite. %DATE convertit une variable (alpha ou dec) en date ou retourne la date du jour. eval datcmd = %DATE(datchar : *YMD0)//(c'est un zéro)%DAYS indique un nombre de jours eval datliv = datcmd + %DAYS(15)%DIFF exprime un écart entre deux dates ou heures eval ecart = %DIFF(datliv : datcmd : *DAYS)%SUBDT extrait une partie d'une date eval annee = %SUBDT(datliv : *YEARS)%HOURS exprime un nombre d'heures eval demain = maintenant + %hours(18)%LOOKUP
(%LOOKUPxx)indique si un élément est présent dans un tableau eval pos = %lookup('$' : monnaies) %MINUTES exprime un nombre de minutes voir %HOURS()%MONTHS exprime un nombre de mois voir %DAYS()%MSECONDS exprime un nombre de microsecondes
voir %HOURS%OCCUR positionne sur une occurrence de DS
%OCCUR(DS1) = 7 ou x = %occur(DS2)%REALLOC Réalloue un espace mémoire plus grand
voir %ALLOC%SECONDS
exprime un nombre de secondes voir %HOURS()%SHTDN
indique si le système est en phase d'arrêt if %SHTDN%TIME
convertit une variable (alpha ou dec) en heure ou retourne l'heure en cours. if %time(pointage : *HMS) = T'23:59:59'%TLOOKUP[xx]
indique si un élément est présent dans une table GAP voir %lookup%XLATE transforme une variable apha eval resultat = %XLATE('abcdef' : 'ABCDEF' : origine)%YEARS exprime un nombre d'années voir %DAYS ---- V5R20 ----%KDS Utilisation d'une DS en tant que liste de clés sur un CHAIN. CHAIN %KDS(dscli) clientf1;
// mais aussi CHAIN (DEPCLI : NOCLI) clientf1;%FIELDS Mise à jour d'une liste finie de zones lors d'un UPDATE . Update clientf1 %FIELDS(nomcli : depcli : ville) ;%BITNOT inverse les bits %BITNOT(x'00') = x'FF'%BITOR applique un OU logique bit à bit %BITOR(x'F0' : x'0F') = x'FF'%BITAND applique un ET logique bit à bit %BITAND(x'F1' : x'1F') = x'11'%BITXOR applique un OU exclusif bit à bit %BITXOR(x'F1' : x'1F') = x'EE' [1110 1110) ---- V5R30 ----%SUBARR une partie d'un tableau resultat = %xfoot( %subarr(tbl : i : 5) )// 5 postes ---- V5R40 ----%XML coordonnées des données XML à lire (cf XML-INTO) xml-into DS1 %xml(data : 'doc=string') ---- V7R10 ----%PARMNUM retourne la position d'un paramètre if %parms >= %parmnum(nocli) // nocli transmis ?%SCANRPL recherche et remplace une chaîne eval resultat = %SCANRPL('GAP' : 'RPG' : origine)
Proposition de remplacement des codes invalides en format libre, souvent par des fonctions :
Code Opération Remplacement ExempleADD + EVAL A = A +1 ou A = A+1 ou A+=1 ADDDUR + Datliv = datcmd + %DAYS(45) ALLOC %alloc ANDxx (test en libre) if A=B AND compteur<>0 CABxx (à éviter) CALL CALLP + EXTPGM CALLP* pgmA (parm1 : parm2) CALLB CALLP + EXTPROC idem CASxx IF + EXSR CAT + Message = 'date de traitement' + DATCHAR CHECK %check pos = %check('0123456789-+,' : qtechar) CHECKR %checkr idem *LIKE DEFINE déclaration en D avec LIKE( ) *DTAARA DEFINE déclaration en D avec DTAARA( ) DIV / DO FOR FOR i = 1 to 50 DOUxx DOU Dou %eof DOWxx DOW Dow not %eof END ENDxx (déja recommandé avant) ENDCS cf CAS EXTRCT %subdt mois = %SUBDT(DATCMD : *M) GOTO c'est quoi ? ;-) IFxx IF if GAP = 4 KFLD %KDS ou directement (K1 :K2) CHAIN (societe: nocli) clientf1 KLIST (cf ci-dessus) LOOKUP %lookup tva = %lookup(code : tbtva) MOVE EVALR , Convertir avec les fonction intégrées datcmd = %DATE(datchar:*ISO) ou chaine = %char(datcmd) MOVEL EVAL, idem pour les conversions MOVEA Pas d'équivalentvoir quand même %SUBARR dans certains cas. MULT * MVR %rem if %rem(AN : 4) = 0 OCCUR %occur ORxx cf ANDxx PARM Prototype en spécif D * PLIST cf PARM REALLAOC %realloac SCAN %scan QUATRE = %scan('4' : 'RPG4') SETOFF *inxx = *off SETON *inxx = *on SUB - SUBDUR - HIER = AUJOURDHUI - %days(1) ou SUBDUR %diff UN = %DIFF(aujourdhui : hier) SUBST %subst TAG cf GOTO TESTN %check if %check('0123456789' : QTECHAR) > 0 TIME %date() ou %time() aujourdhui = %date() WHENxx WHEN XFOOT %xfoot TVA = %xfoot(tbmt) * TAUX XLATE %xlate GRAND = %xlate(minuscles: majuscules: PETIT) Z-ADD EVAL Z-SUB EVAL - * CALLP est apparu en V3R60 et permet un appel en format libre, il est faculatif (on peut saisir EXEC directement):
il faut pour cela déclarer le programme et ses paramètres, avant, en spécif D, cela s'appelle un PROTOTYPE.
+-----------------------------------------------------------+
! DEXEC PR EXTPGM('QCMDEXC') !
! D 250 const !
! D 15P 5 const !
+-----------------------------------------------------------+ PR indique qu'il s'agit d'un prototype (même positions que DS)EXTPGM le nom du pgm externe (peut être qualifié)CONST sur un paramètre indique que ce paramètre peut ne PAS être une variable (constante, calcul, fonction intégrée, ...)
la réception des paramètres peut elle même être réalisée sur le même principe (si vous souhaitez rester en format libre),+-----------------------------------------------------------+Seule l'interface de procédure est obligatoire en V7 (avant il fallait un prototype)
! DSoldeClient PI !
! D nocli 6P 0 !
+-----------------------------------------------------------+
PASE
Comment crypter des fichiers ou une session de transfert de fichiers ? -> réponse SSH. Ce produit fonctionne sous PASE (option 33 de l'OS)
il s'agit de tous les binaires AIX sur IBM i, rendant celui-ci très compatible avec une machine UNIX.
PASE (AIX V5L sur OS/400)
|
pour lancer un "shell" PASE :
> CALL QP2TERM (pour une saisie utilisateur) > CALL QP2SHELL (pour exécuter un script) > l'API Qp2RunPase, pour lancer Pase depuis un pgm ILE.
+ le répertoire de PASE est /QOpenSys/usr/bin
Si un exécutable n'est pas trouvé dans le chemin indiqué, PASE essai en ajoutant "/QOpenSys" devant la racine ("/") du chemin, sauf à renseigner la variable d'env. "PASE_EXEC_QOPENSYS" à "N"
Les fonctions PASE qui retournent les utilisateurs et les groupes, retournent les noms en minuscules sauf "PASE_USRGRP_LOWERCASE" à "N"
Le shell lancé par PASE est le Khorn shell (/QOpenSys/usr/bin/sh)
pour voir la liste des commandes placez vous dans /QOpenSys/usr/bin par cd (vérifiez par pwd ,que vous n'y êtes pas déja) et lancez ls .
|
A cette liste, vous devez ajouter les commandes "internes" comme cd, ...
un certain nombre d'utilitaires ne pourront pas s'exécuter à partir d'une session 5250.(type de terminal non compatible)
vous devrez peut-être recourir à un environnement X11 (inclus dans PASE) depuis un serveur X (non fourni) à installer sur PC (ou Linux) .
Pour lancer une application X, démarrer un serveur X11/Xwindow (XthinPro ou Hummingbird Exceed ou bien un poste sous Linux)
-> renseignez la variable d'environnement DISPLAY avec l'adresse IP du serveur X, puis lancez ( xterm par exemple) depuis Qp2Term.
sinon, regardez les commandes suivantes : (extrait, bien sûr ...)
cat - affiche le contenu d'un fichier ln - créé un lien symbolique sur un fichier existant mkdir - création d'un répertoire rm - destruction de fichier(s) mv - déplace ou renomme un fichier
|
Ne confondez pas QSH (le shell de l'OS/400) et PASE (compatible AIX)
PASE possède plus de fonctionnalités, et quelques différences:
il peut tenir compte des retours chariot à l'affichage (F11) il est sensible à la casse (différence minuscules/MAJUSCULES), pas QSH. il ne transforme pas EBCDIC/ASCII sauf pour stdin,stdout et stderr, si vous fixez QIBM_PASE_DESCRIPTOR_STDIO à T (QSh utilise les CCSID)
par exemple : ------------
cat /qsys.lib/bdvin.lib/qsqlsrc.file/crt_base.mbr | grep -c date
compte le nombre de ligne du membre crt_base contenant le mot "date" (le fichier QSQLSRC est dans la bibliothèque BDVIN)
QSH donne 3 (il y a bien trois lignes) PASE indique 0 (data en EBCDIC)
il en sera de même pour wc (compte le nombre de mots), sort (tri), split (éclatement de fichiers) et sed (edition de fichier)
|
Exemples d'utilisation de PASE :
Aller chercher des binaires compilés pour AIX et les faire tourner sur votre machine.
voyez http://bio.gsi.de/DOCS/AIX/aixpdslib.seas.ucla.edu/ par exemple
vous trouverez sur ce site zip.2.3.tar.Z et unzip.5.50.tar.Z
Placez ces fichiers dans /QopenSys, puis lancez un terminal PASE
call Qp2term
décompressez le fichier par uncompress zip.2.3.tar.Z
puis restaurez par tar -xvf zip_2_3.tar
cela doit vous créer un répertoire user et des sous répertoires
placez vous dans /QopenSys/usr/local/bin (par cd)
|
tapez zip -h
cela doit vous afficher l'aide
# > zip -h Copyright (C) 1990-1999 Info-ZIP Type 'zip "-L"' for software license. Zip 2.3 (November 29th 1999). Usage: zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
vous pouvez maintenant zipper des fichiers par :
zip fichier-zip-à-créer fichier(s)-à-zipper
ou bien par : (depuis un CL ou une ligne de commande)
CALL QP2SHELL PARM('/QopenSys/usr/local/bin/zip' + '/chemin/archive.zip' + '/chemin/fichier(s)-à-zipper/')
|
Vous pouvez aussi utiliser 7zip,sur http://www.scottklement.com/p7zip/
Attention QP2SHELL n'est pas un shell, il en joue, en partie, le role : il lance l'exécutable.
vous ne pourrez pas profiter de certains services du shell
- globing (caractères génériques comme *)
- tubes [|] ou redirections [>], et commandes multiples [:]
dans ce cas demandez à QP2SHELL de lancer sh (le shell lui même) avec l'option -c (exécution d'une commande en paramètre)
CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh' + '-c' 'cp /repertoire1/*.txt /sauvegardes')
en CL
CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh' + '-c' &CDE)
|
Les exécutables sous PASE n'envoient pas de messages d'erreur interceptables par MONMSG, ils envoient un code retour.Pour le tester :
DCL VAR(&RCVVAR) TYPE(*CHAR) LEN(200) DCL VAR(&RCVVARLG) TYPE(*CHAR) LEN(4)
CHGVAR VAR(&CDE) VALUE('cp /repertoire1/*.txt /sauvegardes') CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh' '-c' &CDE)
CHGVAR VAR(%BIN(&RCVVARLG)) VALUE(200) /* taille de RCVVAR */
CALL PGM(QUSRJOBI) PARM(&RCVVAR + &RCVVARLEN + 'JOBI0600' + '*' + ' ' ) IF (%BIN(&RCVVAR 109 4) *NE 0) THEN(DO) SNDPGMMSG MSGID(CPF9898) MSGTYPE(*ESCAPE) MSGF(QCPFMSG) + MSGDTA('commande de copie en erreur') ENDDO
|
Autre exemple : OpenSSH/OpenSSL
Ce produit (5733SC1) est obligatoire si vous installez la version officielle (et supporté par Zend) de PHP : Zend Core for I5/OS.
regardons ici OpenSSL, qui permet de générer des certificats afin de crypter des fichiers (pour transmission à un tiers, par exemple)
sous QP2TERM
openssl genrsa -out private.key 512|1024|2048 (lg de la clé, 2048 est bien)
-> cela génère votre clé privée dans un fichier private.key
puis
openssl req -new -days 365 -key private.key -x509 -out certificat.pem
cela génère un certificat (pour 365 jours) représentant votre société (clé publique) il faut répondre à des questions interactives :
|
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: >FR State or Province Name (full name) [Some-State]: >Bretagne Locality Name (eg, city) []: >Nantes Organization Name (eg, company) [Internet Widgits Pty Ltd]: >société Organizational Unit Name (eg, section) []: >division Common Name (eg, YOUR name) []: >moi Email Address []: >moi@societe.com
|
vous devez ensuite générer un fichier ".rnd", qui servira pour initialiser les fonctions aléatoires de cryptage
a/ saisissez des données par EDTF (commande OS/400) ou b/ passez la commande ls /* > .rnd
le certificat ainsi obtenu "certificat.pem" doit être transmis à votre interlocuteur, de même vous devez recevoir le sien (par ex. client.pem)
pour crypter un fichier, a lui envoyer ensuite (FTP, mail...) :
openssl smime -encrypt -inkey private.key -signer certificat.pem -binary -in texte1.txt client.pem > texte1.p7m
pour décrypter un fichier recu:
openssl smime -decrypt -in texte2.p7m -inkey private.key -recip certificat.pem > resultat.txt
(ce fichier ne pouvant être décrypté QUE par vous)
|
Suite : OpenSSH (même produit)
Vous pouvez lancer le démon SSh (sshd) afin de vous connecter à votre serveur de manière sécurisée :
en V5R40, sous PASE (QP2TERM) lancez sshd
en V6R1 STRTCPSVR *SSHD
la sécurité de SSH est basé sur une paire de clés asynchrones
clé privée (locale), clé publique (transmise à l'interlocuteur)
un serveur SSH posséde une paire de clé permettant de l'authentifier
pour un utilisateur, il peut se connecter avec mot de passe ou en utilisant lui aussi une paire de clés et en transmettant au serveur sa clé publique.
|
en V6R1 les clés serveur sont générées automatiquement
en V5R4, lancez :
ssh-keygen -N "" -t rsa1 -f ssh_host_key
ssh-keygen -N "" -t dsa -f ssh_host_dsa_key
ssh-keygen -N "" -t rsa -f ssh_host_rsa_key
(la chaine vide derrière -N est en fait un mot de passe)
Vous pouvez maintenant vous connecter avec puTTY ou psftp (même produit)
pour se connecter à un serveur SSH, sa clé doit être stockée dans ~/.ssh/known_hosts sur le poste client
pour récupérer la clé lancez :
ssh-keyscan -t rsa serveurlinux(par ex) >> ~/.ssh/known_hosts
|
Si la clé du serveur n'est pas celle mémorisée (reconfig suite à un crash) vous verrez :
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is 16:a2:f6:a9:2f:e2:14:2e:25:53:34:9a:59:fb:2c:e7. Please contact your system administrator. Add correct host key in /home/CM/.ssh/known_hosts to get rid of this message Offending key in /home/CM/.ssh/known_hosts: 1 RSA host key for hmc.volubis.intra has changed and you have requested strict checking. Host key verification failed. $
Editez le fichier known_hosts et enlever la ligne correspondante (1 dans notre exemple)
|
SSH client :
Utilisez SSH pour passer des commandes sur un serveur Unix/linux ou HMC (le démon doit être lancé bien sur, voyez la doc HMC si nécessaire)
Vérifiez que le répertoire correspondant à votre HOMEDIR existe bien, et que votre nom de profil ne fait pas plus de 8 caractères !
lancez QP2Term et saississez
ssh user@serveur [serveur est votre serveur SSH, user votre profil]
si le serveur n'est pas enregistré dans la liste des serveurs autorisés le système vous informe que vous n'avez pas la clé: ____________________________________________________________________________
ssh cm@serveurlinux L'authenticité de l'hôte 'serveurlinux(10.3.1.10)' ne peut pas être établie L'empreinte digitale de la clé . est RSA. Voulez-vous poursuivre la connexion (oui/non) ? ____________________________________________________________________________ tapez oui, l'authentification se fera avec mot de passe
|
En cas de problèmes :
- l'option -T indique de pas allouer un terminal (tty)
- -v affiche des messages debug, plus il y a de v, plus c'est détaillé
- -o PreferredAuthentications=password
force une authentification par mot de passe, afin d'éviter le mécanisme de recherche préalable de clés .rsa dans .ssh.
enfin la commande hostname , affiche le nom du serveur sur lequel vous connecté (on peut se perdre...)
Vous pouvez passer une commande seule par ssh user@serveur "la-commande"
|
Vous pouvez éviter la phase d'authentification en important la clé avant.
il faut créer une paire de clé associée pour l'utilisateur
ssh-keygen -t rsa Création d'une paire de clés rsa publiques/privées. Enter file in which to save the key (/HOME/USER/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): Enter same passphrase again:
Votre identification a été sauvegardée dans /HOME/USER/.ssh/id_rsa Votre clé publique a été enregistrée dans /HOME/USER/.ssh/id_rsa.pub.
L'empreinte digitale de la clé est : fc:ee:bf:db:fd:ac:fb:8f:e4:03:cb:7e:8e:04:d1:8c user@AS400.volubis.fr
vous pouvez redemander l'affichage par ssh-keygen -l
|
Cette commande a généré deux fichiers :
id_rsa , votre clé privé, id_rsa.pub , votre clé publique dans le cache local, /HOME/(votre_nom)/.ssh
Transférez votre clé publique sur le serveur (par FTP par exemple)
puis ajoutez cette clé au fichier "authorized_keys" par : cat id_rsa.pub >> authorized_keys
si cela créé le fichier, donnez les droits par (sur unix) :
chmod 400 authorized_keys
Vous pouvez ensuite vous connecter, depuis ce client :
1/ en automatique, si vous n'avez pas saisi de "passphrase"
2/ en saisissant la "passphrase" (plutôt que votre mot de passe), dans le cas contraire.
|
Si vos clés ne sont pas dans le cache par défaut (/HOME/(votre_nom)/.ssh)
Sur la machine source, vous pouvez utiliser l'option -i de la cde ssh (indiquez votre clé privée et son chemin)
ou bien charger la clé en mémoire.
Pour cela, vous devez :
1/ définir l'agent pour lequel vous chargez la clé ($SHELL représente /usr/bin/sh)
2/ charger la clé en mémoire par ssh-add (par défaut id_rsa dans .ssh) la "passphrase" vous est demandée, si vous en avez saisi une lors de la création par ssh-keygen. ____________________________________________________________________________
ssh-agent $SHELL ssh-add Entrez le mot de passe composé de /HOME/USER/.ssh/id_rsa : Identité ajoutée : /HOME/USER/.ssh/id_rsa (/HOME/USER/.ssh/id_rsa)
|
Ensuite, connectez vous avec ssh :
ssh cm@serveurlinux Last login: Thu Apr 24 14:12:17 2008 from pc.volubis.intra cm@serveurlinux:~>
vous avez ici, une ligne de commande distante, tapez "exit pour sortir.
Vous avez aussi deux utilitaires pour faire des transferts de fichiers
scp -o IdentityFile=~/.ssh/id_rsa user@serveurlinux:remoteDIR/*.xml /localeDIR
copie tous les fichiers xml du repertoire remoteDIR dans localeDIR de l'IFS
sftp -b /DIR/input.txt -o IdentityFile=~/.ssh/id_rsa user@serveurlinux
execute les commandes sftp contenues dans input.txt de /DIR
|
contenu de input.txt get remoteDIR/*.xml /localeDIR rm remoteDIR/*.xml exit
utilisez les commandes get pour aller chercher, put pour déposer et la plupart des commandes unix:
- mkdir pour créer un répertoire - cd pour changer le répertoire en cours - rm pour détruire - quit ou exit pour sortir - help pour obtenir de l'aide
pour exécuter tout cela en batch, passez par QP2SHELL
SBMJOB CMD(CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh' 'sftp -b /HOME/CM/transfert.txt -o IdentityFile=~/.ssh/id_rsa + user@serveurlinux') JOB(TRANSFERT)
|
Enfin, vous pouvez utiliser certains outils du "IBM AIX Toolbox"
Commencez par vous rendre sur le site : http://www-03.ibm.com/systems/p/os/aix/linux/toolbox/download.html
et cliquez, sur le lien: Download the AIX installp image for the rpm package manager for POWER.
Cela va installer un utilitaire RPM sur votre system i (rpm.rte)
créez un répertoire, par exemple /QOpenSys/rpm et placez le fichier puis sous QP2TERM, saisissez les commandes suivantes
restore -xvqf rmp.rte mv /QOpenSys/rpm/usr/opt /QopenSys/ ln -s /QOpenSys/opt /QopenSys/var/opt ln -s /QOpenSys/opt /opt ln -s /QOpenSys/var/opt /var/opt cd /opt/freeware/lib ln -s libpopt.so.0.0.0 libpopt.so ln -s librpm.so.0.0.0 librpm.so ln -s librpmbuild.so.0.0.0 librpmbuild.so
|
Retournez sur le site http://www-03.ibm.com/systems/p/os/aix/linux/toolbox/alpha.html
choisissez un ou plusieurs utilitaires à téléchargez, placez les dans /QOpenSys/rpm
par exemple popt (library en C pour parser la ligne de commande) ou wget (utiliatire pour utiliser un serveur http en mode texte)
et tapez (en étant sous /QOpenSys/rpm)
/opt/freeware//bin/rpm --ignoreos --ignorearch --nodeps --replacepkgs -hUv wget-1.9.1-1.aix5.1.ppc.rpm
mntctl() failed to return fugger size: Le processus n'existe pas. group system does not exist - using root ... group system does not exist - using root wget ##################################################
#__________________________________________________________________________
|
Vous pouvez maintenant utiliser cet utilitaire, il a été placé dans /usr/bin
wget http://www.volubis.fr --16:18:08-- http://www.volubis.fr/ => `index.html' Résolution de www.volubis.fr... 213.41.176.157 Connexion vers www.volubis.fr[213.41.176.157]:80...connecté. requête HTTP transmise, en attente de la réponse...200 OK Longueur: 5,901 [text/html]
100%[====================================>] 5,901 --.--K/s
16:18:08 (12.85 MB/s) - « index.html » sauvegardé [5901/5901]
#
le fichier index.html a été placé dans le répertoire en cours.
Les versions 6.1 et 7.1 proposent un nouveau produit (non facturable) : 5761TS1 / 5770TS1, qui d'ailleurs fonctionne avec PASE.
Ce dernier propose en 6.1 qu'un PRTF génère un fichier dans l'IFS plutôt qu'un spool.
Par exemple
-OVRPRTF QPDSPLIB DEVTYPE(*AFPDS) TOSTMF('/tmp/')
puis DSPLIB xxx *PRINT
génère un fichier QPDSPLIB@Dt013.afp
-OVRPRTF QPDSPLIB DEVTYPE(*AFPDS) TOSTMF('/tmp/') WSCST(*PDF)
génère un fichier QPDSPLIBk3w5pz.pdf
-OVRPRTF QPDSPLIB DEVTYPE(*AFPDS) TOSTMF('/tmp/test.pdf') WSCST(*PDF)
génère un fichier test.pdf
La PTF SI43471 apporte de nouveaux paramètres à la commande CPYSPLF (7.1 uniquement), offrant un accès direct et en mode commande à la fonction Host Print Transform permettant de transformer un spool existant.Voyez le résultat suite à la commande WRKACTJOB OUTPUT(*PRINT)
CPYSPLF QPDSPAJB TOFILE(*TOSTMF) TOSTMF(/temp/wrkactjob.txt)
CPYSPLF QPDSPAJB TOFILE(*TOSTMF) TOSTMF(/temp/wrkactjob.tif) WSCST(QSYS/QWPTIFFG4)
CPYSPLF QPDSPAJB TOFILE(*TOSTMF) TOSTMF(/temp/wrkactjob.pdf) WSCST(*PDF)
Copyright © 1995,2011 VOLUBIS