note 72193 added to function.ssh2-tunnel
| From: | tim dot wood at datawranglers dot com | Date: | Sun, 07 Jan 2007 07:06:58 +0000 |
| Subject: | note 72193 added to function.ssh2-tunnel | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-121372@lists.php.net to get a copy of this message | ||
The tunnel command doesn't seem to support ssh2_auth_password. For people trying to go from
their own computer to a second box and then ssh one to a third box, here's an approach that
works for me. YMMV and IMKYD.
// the relay box
$ip1 = '192.168.1.1';
$user1 = 'usename';
$pswd1 = 'password';
// the destination box
$ip3 = '192.168.1.2';
$user3 = 'usename';
$pswd3 = 'password';
// PART 1
// set up a basic ssh2 connection:
$connection = ssh2_connect($ip1, 22);
ssh2_auth_password($connection, $user1, $pswd1);
$shell = ssh2_shell($connection,"bash");
// PART 2
// Create a basic expect script to handle
// a simple ssh login and then passes the session back to the user
// remove any existing login expect script
$cmd = "rm -f login-via-ssh.expect";
fwrite($shell,$cmd . "\n");
// see discussion with other commands on sleep vs other options
sleep( 1 );
// echo does not like #!/usr/bin/expect ... so gawk it over
$cmd = "echo \"\" | gawk '{ print \"#\" \"!\"
\"\/usr\/bin\/expect\" }' > login-via-ssh.expect";
fwrite($shell,$cmd . "\n");
// more bad sleep
sleep( 1 );
// Add in the rest of the expect script
$script = array(
'spawn ssh -l [lindex \$argv 1] [lindex \$argv 0]',
'expect \"password:\"',
'send \"[lindex \$argv 2]\r\"',
'interact'
);
$append = '>>';
foreach( $script as $line ) {
$cmd = 'echo "'. $line . '" '.$append.'
login-via-ssh.expect' . "\n";
fwrite($shell,$cmd);
sleep( 1 );
}
// Make it executable
$cmd = "chmod +x login-via-ssh.expect";
fwrite($shell,$cmd . "\n");
sleep( 1 );
// PART 3
// Get into the other server
// Pass an ip, username, password to the expect script
// The expect script happily logs the php script in.
// put together the command and execute it
$cmd = "./login-via-ssh.expect $ip3 $user3 $pswd3";
fwrite($shell,$cmd . "\n");
// A long bad sleep since ssh takes a while to respond
sleep( 15 );
while( $line = fgets( $shell, 4096 ) ) {
// flush the buffer
}
// do a test directory listing to show that we really got there
$cmd = "ls -alb /";
fwrite($shell,$cmd . "\n");
sleep( 1 );
while( $line = fgets( $shell, 4096 ) ) {
print $line;
}
Bingo... the php script is tunneled to the third box.
----
Server IP: 216.194.113.175
Probable Submitter: 71.39.48.81
----
Manual Page -- http://www.php.net/manual/en/function.ssh2-tunnel.php
Edit -- https://master.php.net/note/edit/72193
Del: integrated -- https://master.php.net/note/delete/72193/integrated
Del: useless -- https://master.php.net/note/delete/72193/useless
Del: bad code -- https://master.php.net/note/delete/72193/bad+code
Del: spam -- https://master.php.net/note/delete/72193/spam
Del: non-english -- https://master.php.net/note/delete/72193/non-english
Del: in docs -- https://master.php.net/note/delete/72193/in+docs
Del: other reasons-- https://master.php.net/note/delete/72193
Reject -- https://master.php.net/note/reject/72193
Search -- https://master.php.net/manage/user-notes.php