Не забыть выставить в sshd_config
PasswordAuthentication yes #!/usr/bin/perl
use warnings;
use strict;
use Net::SSH::Perl;
my $host = 'x.x.x.x';
my $user = 'user';
my $cmd = 'pwd';
my $ssh = Net::SSH::Perl->new($host);
print "Enter pass: ";
my $pass = <STDIN>;
chomp $pass;
$ssh->login($user, $pass) or die "Kiss my ass! $!";
my($stdout, $stderr, $exit) = $ssh->cmd($cmd);
print $stdout."\n";
print $stderr."\n" if defined $stderr;
print $exit."\n";
Так правильней, иначе плюётся на undef $stderr
Самому стало интересно, поискал, нашёл. ))
Вот выжимка.
#!/bin/sh
# remote host
HOST="x.x.x.x"
# user on remote host
USER="user"
TMP="/tmp"
out() {
echo -e "$@"
}
read_pass() {
out "Enter password for $USER on $HOST (will not echo): "
stty -echo
read PASS
stty echo
if [ -z "$PASS" ]; then
error "\n No password entered!"
fi
}
create_askpass() {
TMP=$(mktemp /tmp/$USER$HOST.XXXXXXXXXX) || $TMP="/tmp/$USER$HOST.$$"
if [ -z "$DISPLAY" ]; then
export DISPLAY=":0.0"
fi
out "#!/bin/sh\necho '$PASS'" > $TMP
chmod 500 $TMP
export SSH_ASKPASS=$TMP
}
cleanup() {
$(which rm) -f $TMP
}
main() {
read_pass
create_askpass
setsid ssh $USER@$HOST "ls -1"
cleanup
}
main "$@"
Источники:
http://www.linuxforums.org/forum/programming-scripting/10780...
http://andre.frimberger.de/index.php/linux/reading-ssh-passw.../
http://alexandr.sysoev.ru/node/136
http://pentestmonkey.net/blog/ssh-with-no-tty
http://www.nuclearcat.com/mediawiki/index.php/Ssh_askpass
http://superuser.com/questions/393506/can-i-automatically-lo...
Ложка дёгтя.
Во FreeBSD нет штатного setsid - для создания нового сеанса.
Но мир не без добрых людей.
http://freebsd.1045724.n5.nabble.com/setsid-not-found-on-fre...
http://lists.freebsd.org/pipermail/freebsd-hackers/2011-Febr...
Сцылки бывают дохнут, поэтому сюда скопипастю, на всякий случай.))
cat setsid.c
/*
* setsid.c -- execute a command in a new session
* Rick Sladkey <jrs@world.std.com>
* In the public domain.
*
* 1999-02-22 Arkadiusz Mi¶kiewicz <misiek@pld.ORG.PL>
* - added Native Language Support
*
* 2001-01-18 John Fremlin <vii@penguinpowered.com>
* - fork in case we are process group leader
*
* 2011-02-14 Jason J. Hellenthal <jhell@DataIX.net>
* - removed nls support for this simple command.
*
*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#define _(Text) (Text)
int
main(int argc, char *argv[]) {
if (argc < 2) {
fprintf(stderr, _("usage: %s program [arg ...]\n"),
argv[0]);
exit(1);
}
if (getpgrp() == getpid()) {
switch(fork()){
case -1:
perror("fork");
exit(1);
case 0: /* child */
break;
default: /* parent */
exit(0);
}
}
if (setsid() < 0) {
perror("setsid"); /* cannot happen */
exit(1);
}
execvp(argv[1], argv + 1);
perror("execvp");
exit(1);
}
gcc -O2 -o setsid setsid.c
Работает.
P.S.
или port
/usr/ports/net/nxproxy/files/setsid.c