I've got a perl script that automatically logs me via ssh by spawning ssh with Expect.pm.
It actually works pretty well and here is my ouput :
$ ngh bestServerEver
GPG Pass :
root@**********'s password:
Linux **** 2.6.32-042stab059.7 #1 SMP Tue Jul 24 19:12:01 MSK 2012 x86
+_64 GNU/Linux
motd!!!!!!!!!!
Last login: Mon Feb 4 22:18:10 2013 from *******************
bash
[root@******:~]$ bash
[root@******:~]$
I'm trying to suppress this output to get to the server shell directly after typing my command. Like that :
$ngh BestServerEver
root@server#
I've tried that answer :
http://stackoverflow.com/questions/1376607/how-can-i-suppress-stdout-temporarily-in-a-perl-program
I've also tried :
local (*OUT, *ERR);
open OUT, ">&STDOUT";
open ERR, ">&STDERR";
close STDOUT;
close STDERR;
print "don't print";
open STDOUT, ">&OUT";
open STDERR, ">&ERR";
Both are okay when it's about standard STDOUT but Expect seems to be a different kind of handle or whatever.
I've also tried setting :
$exp->stty("-echo");
But it did not hide anything
Finally, here is the sub that spawns ssh
http://pastebin.com/pSL3AwBW <-- with color!
if you have some tips to give me on how to hide that junk :p
sub interactiveSsh
{
my ($pConfig,$pass)=@_;
my $exp = new Expect;
$exp->slave->clone_winsize_from(\*STDIN);
$exp->spawn("ssh root\@".$pConfig->{'host'});
my $spawn_ok;
$exp->expect(40,
[
qr'(yes/no)',
sub {
my $fh = shift;
$fh->send("yes\n");
exp_continue;
}
],
[
qr'assword:',
sub {
if ($spawn_ok) {
$exp->interact();
}
my $fh = shift;
$fh->send("$pass\n");
$spawn_ok=1;
exp_continue;
}
],
[
qr'#',
sub {
my $fh = shift;
$fh->send("bash\n");
$exp->send("stty -echo\n");
$exp->interact();
exp_continue;
}
],
[
eof =>
sub {
if ($spawn_ok) {
print BOLD GREEN, "SSH
+ close connexion to ".$pConfig->{'host'}.".\n", RESET;
exit 0;
} else {
die "ERROR: could not
+spawn ssh.\n";
}
}
],
[
timeout =>
sub {
die "No login.\n";
}
],
'-re', qr'[#>:] $',
);
$exp->interact();
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.