Net::SSH3pm
Perl extension for secure shell
Usage
use Net::SSH qw(ssh ssh_cmd issh sshopen2 sshopen3);ssh('user@hostname', $command);issh('user@hostname', $command);ssh_cmd('user@hostname', $command);ssh_cmd( {user => 'user',host => 'host.name',command => 'command',args => [ '-arg1', '-arg2' ],stdin_string => "string\n",} );sshopen2('user@hostname', $reader, $writer, $command);sshopen3('user@hostname', $writer, $reader, $error, $command);
Overview
Simple wrappers around ssh commands.
For an all-perl implementation that does not require the system ssh command, see Net::SSH::Perl instead.
Subroutines
- ssh [USER@]HOST, COMMAND [, ARGS ... ]
-
Calls ssh in batch mode.
- issh [USER@]HOST, COMMAND [, ARGS ... ]
-
Prints the ssh command to be executed, waits for the user to confirm, and (optionally) executes the command.
- ssh_cmd [USER@]HOST, COMMAND [, ARGS ... ]
- ssh_cmd OPTIONS_HASHREF
-
Calls ssh in batch mode. Throws a fatal error if data occurs on the command's STDERR. Returns any data from the command's STDOUT.
If using the hashref-style of passing arguments, possible keys are:
user (optional)host (required)command (required)args (optional, arrayref)stdin_string (optional) - written to the command's STDIN
- sshopen2 [USER@]HOST, READER, WRITER, COMMAND [, ARGS ... ]
-
Connects the supplied filehandles to the ssh process (in batch mode).
- sshopen3 HOST, WRITER, READER, ERROR, COMMAND [, ARGS ... ]
-
Connects the supplied filehandles to the ssh process (in batch mode).
Examples
use Net::SSH qw(sshopen2);use strict;my $user = "username";my $host = "hostname";my $cmd = "command";sshopen2("$user\@$host", *READER, *WRITER, "$cmd") || die "ssh: $!";while (<READER>) {chomp();print "$_\n";}close(READER);close(WRITER);
Frequently asked questions
Q: How do you supply a password to connect with ssh within a perl script using the Net::SSH module?
A: You don't (at least not with this module). Use RSA or DSA keys. See the
quick help in the next section and the ssh-keygen(1) manpage.
A #2: See Net::SSH::Expect instead.
Q: My script is "leaking" ssh processes.
A: See "How do I avoid zombies on a Unix system" in perlfaq8, IPC::Open2, IPC::Open3 and "waitpid" in perlfunc.
Generating and using SSH keys
- 1 Generate keys
-
Type:
ssh-keygen -t rsaAnd do not enter a passphrase unless you wanted to be prompted for one during file copying.
Here is what you will see:
$ ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file in which to save the key (/home/User/.ssh/id_rsa):Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /home/User/.ssh/id_rsa.Your public key has been saved in /home/User/.ssh/id_rsa.pub.The key fingerprint is:5a:cd:2b:0a:cd:d9:15:85:26:79:40:0c:55:2a:f4:23 User@JEFF-CPU
- 2 Copy public to machines you want to upload to
-
"id_rsa.pub"is your public key. Copy it to"~/.ssh"on target machine.Put a copy of the public key file on each machine you want to log into. Name the copy
"authorized_keys"(some implementations name this file"authorized_keys2")Then type:
chmod 600 authorized_keysThen make sure your home dir on the remote machine is not group or world writeable.
Releases
11 releases since Debian 3.1 (Sarge); the text changed 4 times.