Hallo Allerseits...
Ich muss über PHP auf eine Datenbank zugreifen um dort die IP + Passwort von bestimmten Rechnern zu erfahren. Die IP + Passwort soll an das Shellscript übergeben werden und zum transfer mehrerer Dateien via SCP genutzt werden.
Mir stellt sich die Frage, wie ich es schaffen könnte, das Passwort für den SCP-Befehl zur Verfügung zu stellen.
Abgesehen davon, gibt es teilweise Rechner, die "zum ersten mal" kontaktiert werden müssen. Das heißt ich habe deren Fingerprint noch nicht in meinen "known_hosts" und evtl. käme dann ja die Abfrage, ob man es zulassen wolle. Also müsste ich dann ggf. auch noch das "YES" mitgeben...
Funktioniert das auf diesem Wege eigentlich überhaupt.
Für eure Hilfe bedanke ich mich!
Gruß,
Guido
PS: Habe bereits in Google und in diesem Forum gesucht, leider ohne Erfolg...
shellscript mit scp und hinterlegtem Passwort
Re: shellscript mit scp und hinterlegtem Passwort
Hi,
was du da beschreibst hoert sich spannend an. Fuer ssh&telnet habe ich das ganze mal mit Expect in einem Perlscript gemacht. Wobei "habe ich" stimmt nicht ganz, ich hab's irgendwo gefunden und an meine Beduerfnisse angepasst. Expect gibt's soweit ich weiss auch "stand alone". Hier mal mein Script, vielleicht hilft's dir:
Das Script setzt eine .lmi Datei voraus, die pro Zeile die Daten eines Accounts enthaelt:
host user password tool(ssh/Telnet)
Das könntest du ja "reinpipen".
Was du allerdings machen muesstest waere die Strings/den Prompt, auf die das Script wartet anpassen.
was du da beschreibst hoert sich spannend an. Fuer ssh&telnet habe ich das ganze mal mit Expect in einem Perlscript gemacht. Wobei "habe ich" stimmt nicht ganz, ich hab's irgendwo gefunden und an meine Beduerfnisse angepasst. Expect gibt's soweit ich weiss auch "stand alone". Hier mal mein Script, vielleicht hilft's dir:
Code: Alles auswählen
#!/usr/bin/perl
# Expect Perlmodule installieren:
# $ perl -MCPAN -e shell
# cpam> i /Expect/ # zeigt eine Trefferliste von Modulen die Expect "enthalten"
# cpan> install Expect # Installiert das Modul Expect
# cpan> exit
use strict;
use Expect;
my $host = shift or die("use: lmi host");
my $pwdfile = $ENV{'HOME'}. "/.lmi";
my $timeout = 10;
my $user;
my $passwd;
my $prog;
# read password file
open IN, "<$pwdfile" or die("could not open $pwdfile!\n");
while (<IN>) {
my $line = $_;
# print $line;
if ($line =~ m/$host\s/) {
# (grep( /^$host\s/, 'ERROR[Unused arguments - too many, or wrong type] in:<IN>'))[0]
# or die("no entry in $pwdfile!\n");
($user, $passwd, $prog) = (split( /\s+/, $line))[1,2,3];
}
}
close(IN);
if (! $user){
die("no entry in $pwdfile!\n");
}
my $exp;
if($prog =~ m/ssh/) {
print "ssh -------- \n";
# start program
my $connect_string = $user . "@" . $host;
$exp = Expect->spawn($prog, $connect_string)
or die("Cannot spawn $prog: $!\n");
}
else {
print "kein ssh -------- \n";
# start program
$exp = Expect->spawn($prog, $host)
or die("Cannot spawn $prog: $!\n");
# Wait for login prompt
$exp->expect($timeout, 'ogin') or die("No 'login' prompt");
$exp->send("$user\n");
}
# Wait for password prompt
$exp->expect($timeout, -re => '[Pp]assword')
or die("No 'password' prompt");
$exp->send("$passwd\n");
# Wait for shell
$exp->expect($timeout, '$') or die("1No prompt!\n");
# Setup environment
$exp->send("PS1='MyPrompt:) '\n");
$exp->expect($timeout, 'MyPrompt') or die("2No prompt!\n");
# switch to interactive session
$exp->interact();
host user password tool(ssh/Telnet)
Das könntest du ja "reinpipen".
Was du allerdings machen muesstest waere die Strings/den Prompt, auf die das Script wartet anpassen.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
Re: shellscript mit scp und hinterlegtem Passwort
Alles klar. Vergebe doch gleich "passwort" als Passwort.Ich muss über PHP auf eine Datenbank zugreifen um dort die IP + Passwort von bestimmten Rechnern zu erfahren.
Generell würde ich in so einem Fall auf jeden Fall SSH-Keys benutzen. Damit kannst du dann kopieren ohne Benutzer und Passwort. Und vor allem ist das viel sicherer.
Wenn es doch so sein soll (Achtung unsicher) würde ich auch Perl und dann jedoch mit den zugehörigen SSH-Bibliotheken
http://search.cpan.org/dist/Net-SSH-Perl/
nutzen.Dort sollte man Passwörter als Parameter übergeben können.