2016-06-29 9 views
0

i bereits zu einem Remote-Server angeschlossen habe SSH2-Verbindung, und ich bin mit ssh2 _exec diesem Befehl "sshpass -p 'xxxx1248' ssh [email protected] " laufen, jetzt, wenn ich verbunden neuer Remote-Server Ich möchte auf ihre Shell zugreifen. Ich habe eine Aufgabe, um den Befehl dort im zweiten Remote-Server auszuführen. Wie würde ich tun?Remote-Verbindung von der ssh2_exec zu einem anderen entfernten und dem Zugang zu Shell neuer Verbindung

$connection = ssh2_connect($sIP, $iPort); 

$autherised = ssh2_auth_password($connection, $sUserName, $sPassword); 
$oResult = ssh2_exec($connection, "sshpass -p 'xxxx1248' ssh [email protected]"); 

wie auf die Shell von IP 1x2.1xx.3x.xx zugreifen.

Bitte lösen Sie diese, wenn jemand zuvor getan hat ....

+0

Möchten Sie einen Befehl auf dem Zielcomputer ausführen (1x2.1xx.3x.xx)? – ymas

+0

Ja, ich möchte einige Befehle auf dem Zielcomputer ausführen. und der erste Befehl gibt mir eine ENV-Variable und mit dieser Variable muss ich ein anderes Programm ausführen, das 2-5 Minuten dauert, bis es fertig ist, wird es funktionieren, wie ich es mache ??? –

Antwort

0

ich einen Code-Schnipsel zur Verfügung stellen, die den „ls“ Befehl auf dem Zielcomputer ausgeführt werden sollen. Lass es mich wissen, wenn du das willst.

$conn = ssh2_connect($host, $port); 
ssh2_auth_password($conn, $user, $pass); 
// runs the ls -al command on $targetHost 
$stream = ssh2_exec($conn, 
    "sshpass -p '{$passTarget}' ssh [email protected]$targetHost ls -al" 
); 

// retrieving the data 
stream_set_blocking($stream, true); 
$output = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO); 

echo stream_get_contents($output); 

Dieser Code gibt das Verzeichnis auf der $targetHost Maschine auflistet.

Ich hoffe, das hilft.

Edit:

ich hier ein Beispiel hinzufügen wird:

Auf meiner Zielmaschine, habe ich ein kleines Bash-Skript erstellt, test.sh:

export TEST_VAR=1 

Dann änderte ich die ssh2_exec Zeile:

$stream = ssh2_exec($conn, 
    "sshpass -p '{$passTarget}' ssh [email protected]$targetHost 'source test.sh; echo \$TEST_VAR'" 
); 

Ich bekomme die erwarteten Res ult: 1

+0

Danke, Ja das gleiche, was ich will, aber das ls, pwd diese Befehle funktionieren. aber wenn ich irgendwelche zwei Befehle ausführe, funktioniert das nicht. wie ich ein sh Programm wie dieses leite, '$ stream = ssh2_exec ($ conn, "sshpass -p '{$ passTarget}' ssh $ targetUser @ $ target 'Quelle sequencerConfig.sh; echo $ SEQUENCER_RUNS'" ); ' Siehe, die sh-Programmquelle, um die Umgebungsvariable $ SEQUENCER_RUNS zu erhalten, die ich als zweiten Befehl echo mache. Diese Ausgabe ist eine leere Zeichenfolge. –

+0

Hallo Amey, um auf der sicheren Seite zu sein, habe ich eine ähnliche Situation eingerichtet und alles funktioniert gut für mich. Ich glaube, dass du dem '$' Zeichen nicht entkommen bist. Versuchen Sie: echo \ $ SEQUENCE_RUNS'. Ich werde meine Antwort mit einem kleinen Beispiel bearbeiten. – ymas

Verwandte Themen