1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
| ' Gambas module file
'---------------------------------------------- ' Exemple d'utilisation du composant SshClient '----------------------------------------------
PUBLIC SSHConnection AS SshClient
'-----------------------------------------------------
PUBLIC SUB Main()
DIM ListeCmd AS NEW String[] DIM Cmd AS STRING DIM fichierDistant AS STRING DIM fichierLocal AS STRING DIM dirDistant AS STRING DIM donneeFichierLocal AS STRING DIM TimerStart AS FLOAT DIM TimerStop AS FLOAT DIM TimerDelay AS FLOAT DIM ModeShellCisco AS BOOLEAN
' Dans le cas ou la connexion ssh se fait sur des equipments Cisco ' il faut utiliser un shell pty ModeShellCisco = FALSE
PRINT "Paramétrage ssh" PRINT "Setting ssh"
' Creation d'une nouveau connexion SSH ' Creation of a new SSH connection SSHConnection = NEW SshClient AS "SSHConnection"
' Paramétrage de la connexion SSH ' Setting the SSH connection SSHConnection.Hostname = "127.0.0.1" SSHConnection.Port = 22 SSHConnection.User = "yourlogin" SSHConnection.Password = "yourpassword" SSHConnection.TimeoutConn = 10 SSHConnection.StrictHostKeyCheck = TRUE SSHConnection.AllowSSH1 = TRUE SSHConnection.AllowSSH2 = TRUE SSHConnection.ActiveLog = FALSE
' Définition de la liste des commandes a executer ' Definition of the list of commands to execute on remote machine ListeCmd.Add("ps -edf | grep X") ListeCmd.Add("ls -ltr") ListeCmd.Add("( cd /tmp ; ls -ltr ; pwd)") ListeCmd.Add("df -h")
' Pour tester sur un Routeur/Switch Cisco ' For test on Cisco Router/Switch 'ListeCmd.Add(" show ip int brief") 'ListeCmd.Add(" show int status") 'ListeCmd.Add(" show vlan") 'ListeCmd.Add(" show ip arp") 'ListeCmd.Add(" show arp") 'ListeCmd.Add(" show ip route | inc S") 'ListeCmd.Add(" show cdp neighbors detail")
' Connection SSH a la machine distante ' SSH connection to the remote machine IF SSHConnection.Connect() < 0 THEN PRINT "Connexion echouée !" PRINT "Connexion failed !" ELSE PRINT "Execution des commandes sur la machine distante." PRINT "Execute commands on remote machine." PRINT "-------------------------------------------------------------------------------------"
IF ModeShellCisco = FALSE THEN ' Mode d'execution de commande a distance par SSH FOR EACH Cmd IN ListeCmd PRINT "Mode: Execution de commande" IF SSHConnection.ExecRemoteCmd(Cmd) < 0 THEN PRINT "Execution de la commande '" & Cmd & "' échouée !" PRINT "Execution of command '" & Cmd & "' failed !" PRINT "Message: " & SSHConnection.MessageErreur ELSE PRINT "Data: " & SSHConnection.DataRemoteCmd ENDIF
PRINT "-------------------------------------------------------------------------------------" NEXT ELSE ' Mode d'execution de commande dans un shell PTY PRINT "Mode: Execution de commande shell PTY" IF SSHConnection.ExecRemoteCmdPty(ListeCmd) < 0 THEN PRINT "Execution liste de la commande '" & ListeCmd[0] & "' échouée !, etc..." PRINT "Execution of command list'" & ListeCmd[0] & "' failed !, etc..." PRINT "Message: " & SSHConnection.MessageErreur ELSE PRINT "Data: " & SSHConnection.DataRemoteCmd ENDIF END IF
PRINT "-------------------------------------------------------------------------------------"
' Affichage du contenu d'un fichier de la machine distante ' Display content of file of remote machine fichierDistant = "/etc/hosts" fichierLocal = "/tmp/hostsfile.sav"
PRINT "Lecture d'un fichier sur la machine distante: " & fichierDistant PRINT "Reading a file on remote machine: " & fichierDistant
IF SSHConnection.ScpReadFile(fichierDistant) < 0 THEN PRINT " -> Lecture du fichier distant échouée !" PRINT " -> Reading of remote file failed !" ELSE PRINT "Data:\n" & SSHConnection.DataReadFile PRINT " -> Lecture du fichier distant effectuée avec succès." PRINT " -> Reading a remote file with success." ENDIF
PRINT "-------------------------------------------------------------------------------------"
' Recuperation d 'un fichier de la machine distante vers local ' Retreiving a file on remote machine to local PRINT "Récupération d'un fichier de la machine distante en local:" PRINT "Retreiving a file on remote machine to local:" PRINT " - Remote: " & fichierDistant PRINT " - Local : " & fichierLocal
IF SSHConnection.ScpGetFile(fichierDistant, fichierLocal) < 0 THEN PRINT " -> Récupération du fichier distant vers disque local échouée !" PRINT " -> Retreiving remote file to local disk failed !" ELSE PRINT " -> Récupération du fichier distant vers disque local effectuée avec succès." PRINT " -> Retreiving remote file to local disk executed with success." ENDIF
PRINT "-------------------------------------------------------------------------------------"
'Envoi d'un fichier local vers la machine distante ' Sending a local file to the remote machine fichierLocal = "/tmp/hostsfile.sav" fichierDistant = "/tmp/hostsfile_remote.sav"
PRINT "Envoi d'un fichier local sur la machine distante: " & fichierLocal PRINT "Sending a local file to the remote machine: " & fichierLocal PRINT " - Local : " & fichierLocal PRINT " - Remote: " & fichierDistant
IF SSHConnection.ScpPutFile(fichierLocal, fichierDistant) < 0 THEN PRINT " -> Envoi du fichier local échouée !" PRINT " -> Sending local file failed !" ELSE PRINT " -> Envoi du fichier local effectué avec succès." PRINT " -> Sending local file with success." ENDIF
PRINT "-------------------------------------------------------------------------------------"
' Création d'un repertoire sur la machine distante ' Creation of a directory on the remote machine dirDistant = "/tmp/directory1"
PRINT "Création d'un repertoire sur la machine distante:" PRINT "Creation of a directory on the remote machine:" PRINT " - Directory: " & dirDistant
IF SSHConnection.ScpNewRemoteDir(dirDistant, "0755") < 0 THEN PRINT " -> Création du répertoire sur la machine distante échouée !" PRINT " -> Creation of the directory on remote machine failed !" ELSE PRINT " -> Création du répertoire sur la machine distante effectuée avec succès." PRINT " -> Creation of the directory on remote machine with success." ENDIF
PRINT "-------------------------------------------------------------------------------------"
' Création d'un nouveau fichier + data sur la machine distante ' Creation of a new file + data on the remote machine fichierDistant = "/tmp/newfile1.txt" fichierLocal = "/etc/hosts"
PRINT "Création d'un nouveau fichier + data sur la machine distante:" PRINT "Creation of a new file + data on the remote machine:" PRINT " - File: " & fichierDistant
TRY donneeFichierLocal = File.Load(fichierLocal) IF ERROR THEN PRINT "Lecture du contenu du fichier local impossible: " & fichierLocal PRINT "Reading the content of local file impossible: " & fichierLocal ELSE
IF SSHConnection.ScpNewRemoteFile(fichierDistant, donneeFichierLocal, "0644") < 0 THEN PRINT " -> Création du nouveau fichier + data sur la machine distante échouée !" PRINT " -> Creation of new file + data on remote machine failed !" ELSE PRINT " -> Création du nouveau fichier + data sur la machine distante effectuée avec succès." PRINT " -> Creation of new file + data on remote machine with success." ENDIF
END IF
PRINT "-------------------------------------------------------------------------------------"
TimerStop = Timer TimerDelay = TimerStop - TimerStart
PRINT "Temps d'execution: " & Format$(TimerDelay, "0.000") & "sec)" PRINT "Execution time: " & Format$(TimerDelay, "0.000") & "sec)"
END IF
' Fermeture de la connexion SSHConnection.Disconnect()
PRINT "Fin de la connexion..." PRINT "End of connection..."
END
PUBLIC SUB SSHConnection_ProgressGetFile(Pourcentage AS INTEGER)
' Evenement lorsque l'indice de progression de la copie d'un fichier distant vers local change ' Event when the progress index of the copy of a remote file to local change
PRINT "Progression GET fichier: " & Pourcentage & "%" PRINT "Progress GET file: " & Pourcentage & "%"
END
PUBLIC SUB SSHConnection_ProgressPutFile(Pourcentage AS INTEGER)
' Evenement lorsque l'indice de progression de la copie d'un fichier local vers distant change ' Event when the progress index of the copy of a local file to remote change
PRINT "Progression PUT fichier: " & Pourcentage & "%" PRINT "Progress PUT file: " & Pourcentage & "%"
END
PUBLIC SUB SSHConnection_sshError(MessageText AS STRING)
' Evenement lorsqu'une erreur apparait dans l'objet SshClient ' Event when an error appears in the SshClient object
PRINT "[SSH] " & MessageText
END
PUBLIC SUB SSHConnection_sshCmdRecieveData(sText AS STRING)
' Evenement: Données renvoyés par une commande executée a distance ' Event: Datas sended by the command executed on remote machine
'Print "[CMD] \n" & sText
END
|