RE: [PHP] Howto send command over ssh using sockets
From: Radek Krejca > I am trying send command to remote host over ssh with sockets. But > I need to set up username/password. I am trying to modify this script > (from www.php.net - function fsockopen), but I dont know, where set > username/password because I got this message: > Bad protocol version identification 'password' from ip > > Library ssh2 is not currentu userfull for me, because I am not > admin of server. > / > * Author: Richard Lajaunie > * Mail : richard.lajau...@cote-azur.cci.fr > * > * subject : this script retreive all mac-addresses on all ports > * of a Cisco 3548 Switch by a telnet connection > * > * base on the script by: xbensemhoun at t-systems dot fr on the same page > **/ > > if ( array_key_exists(1, $argv) ){ >$cfgServer = $argv[1]; > }else{ >echo "ex: 'php test.php 10.0.0.0' \n"; >exit; > } > > $cfgPort= 23;//port, 22 if SSH > $cfgTimeOut = 10; > > $usenet = fsockopen($cfgServer, $cfgPort, $errno, $errstr), $cfgTimeOut); > > if(!$usenet){ >echo "Connexion failed\n"; >exit(); > }else{ >echo "Connected\n"; >fputs ($usenet, "password\r\n"); >fputs ($usenet, "en\r\n"); >fputs ($usenet, "password\r\n"); >fputs ($usenet, "sh mac-address-table\r\n"); >fputs ($usenet, " "); // this space bar is this for long output > Well, in the first place, you don't simply send a series of words to the other end after opening the connection. Most protocols define a conversation that happens between the two ends of a new connection. So you have to wait for the server to send you a welcome message with a prompt and reply to that. Then wait for the next prompt and reply to it. So instead of just blasting out these strings, you need a receive loop and parser to interpret what the server is saying to you. Once you know what it says at each step you can decide how to respond. SSH adds another layer in front of this to select key exchanges, ciphers, hashes, etc. You don't want to write an SSH client. It can take days just to read and understand the protocol definition. A few minutes on Google should produce some useable examples of clients for various protocols. It shouldn't take much work to read a basic Telnet client written in Perl and transpose it into PHP. Bob McConnell -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
RE: [PHP] Howto send command over ssh using sockets
Hello, thank you for response, more in you text: Instead of ssh, you could use telnet to connect to the Cisco router (which incidentally runs on port 23, but is likely to be disabled on I want to use my script against FreeBSD router and against RouterOS so I need ssh. I can use system function to call ssh command, but I can try it over php tools. Or if you do not like the idea of sending clear-text passwords to the router, you might want to learn about proc_open() (or popen()) and use the native ssh utility that most likely is present on the server, taking great care to READ THE MANUAL for the ssh command, because you most likely do _not_ want it to spit out ANSI-escapes to you script. It will be probably better way than system function. If I fail with using sockets I use this. Thank you very much. Radek
Re: [PHP] Howto send command over ssh using sockets
Instead of ssh, you could use telnet to connect to the Cisco router (which incidentally runs on port 23, but is likely to be disabled on the cisco router, unless you have a pre-SSH capable IOS running on it (like my old cisco crap :( ) ), because i strongly doubt you have written or are willing to write your own encryption libraries for this project, you might also want to read IETF RFC 854 [http://tools.ietf.org/html/rfc854] about the telnet protocol, as you are writing your own client, and not using a pre-made one, judging from your script. Or if you do not like the idea of sending clear-text passwords to the router, you might want to learn about proc_open() (or popen()) and use the native ssh utility that most likely is present on the server, taking great care to READ THE MANUAL for the ssh command, because you most likely do _not_ want it to spit out ANSI-escapes to you script. Kind regards from Johan Lidström Örnsköldsvik, Sweden irc://irc.freenode.net/Dr_Kao frozendude+php...@gmail.com P.S. currently borrowing a friends account. 2010/4/5 Radek Krejča : > Hello, > > I am trying send command to remote host over ssh with sockets. But I need to > set up username/password. I am trying to modify this script (from www.php.net > - function fsockopen), but I dont know, where set username/password because I > got this message: > Bad protocol version identification 'password' from ip > > Library ssh2 is not currentu userfull for me, because I am not admin of > server. > > Thank you > Radek > > > / > * Author: Richard Lajaunie > * Mail : richard.lajau...@cote-azur.cci.fr > * > * subject : this script retreive all mac-addresses on all ports > * of a Cisco 3548 Switch by a telnet connection > * > * base on the script by: xbensemhoun at t-systems dot fr on the same page > **/ > > if ( array_key_exists(1, $argv) ){ > $cfgServer = $argv[1]; > }else{ > echo "ex: 'php test.php 10.0.0.0' \n"; > exit; > } > > $cfgPort = 23; //port, 22 if SSH > $cfgTimeOut = 10; > > $usenet = fsockopen($cfgServer, $cfgPort, $errno, $errstr), $cfgTimeOut); > > if(!$usenet){ > echo "Connexion failed\n"; > exit(); > }else{ > echo "Connected\n"; > fputs ($usenet, "password\r\n"); > fputs ($usenet, "en\r\n"); > fputs ($usenet, "password\r\n"); > fputs ($usenet, "sh mac-address-table\r\n"); > fputs ($usenet, " "); // this space bar is this for long output > > // this skip non essential text > $j = 0; > while ($j<16){ > fgets($usenet, 128); > $j++; > } > stream_set_timeout($usenet, 2); // set the timeout for the fgets > $j = 0; > while (!feof($usenet)){ > $ret = fgets($usenet, 128); > $ret = str_replace("\r", '', $ret); > $ret = str_replace("\n", "", $ret); > if (ereg("FastEthernet", $ret)){ > echo "$ret \n"; > } > if (ereg('--More--', $ret) ){ > fputs ($usenet, " "); // for following page > } > $info = stream_get_meta_data($usenet); > if ($info['timed_out']) { > $j++; > } > if ($j >2){ > fputs ($usenet, "lo"); > break; > } > } > } > echo "End.\r\n"; > ?> > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP] Howto send command over ssh using sockets
Hello, I am trying send command to remote host over ssh with sockets. But I need to set up username/password. I am trying to modify this script (from www.php.net - function fsockopen), but I dont know, where set username/password because I got this message: Bad protocol version identification 'password' from ip Library ssh2 is not currentu userfull for me, because I am not admin of server. Thank you Radek 2){ fputs ($usenet, "lo"); break; } } } echo "End.\r\n"; ?> -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php