judgemstr has asked for the wisdom of the Perl Monks concerning the following question:

Hello All, I am a beginner in Perl and I am trying to write a script to help automate checking on a few freebsd servers that we maintain. I have the basics down on what needs to happen with the script but I am running into an error. I must su into another user after running a few commands and once my script hits the su command the script just pauses. Below is a copy of the script I am using right now. The end result that I am looking for is to have the script run and paste the output into one txt file that lists the results for each command for each host (39 of them).

use Net::OpenSSH; my $ssh = Net::OpenSSH->new('root@172.16.100.27', passphrase => 'blah' +, key_path => 'key.txt'); $ssh->error and die "Couldn't establish SSH connection: ". $ssh->error; $ssh->system('ifconfig em1'); $ssh->system('ifconfig -d'); $ssh->system('su - admin'); $ssh->system("show status"); $ssh->system('exit'); $ssh->system('exit');

Replies are listed 'Best First'.
Re: OpenSSH and multiple users
by NetWallah (Canon) on Jan 04, 2016 at 19:35 UTC
    su (on linux) creates a new shell.

    In order to capture the output of that shell, you need to redirect the STDOUT of that shell to a file, then cat that in the original shell.

    You appear to be connecting to a network device.
    Try to chain the commands into an "sudo" type command, that retains the original shell control.

            "I can cast out either one of your demons, but not both of them." -- the XORcist

      The FreeBSD servers are limited on what packages they contain to further lock down the security of them. I do not have sudo capabilities to use. The only way in remotely is ssh using the root key and passphrase and then use the su command into the admin userland to launch remaining commands.
        If you need to run a single command (as in your post), you can remove the separate "su" line, and try:
        $ssh->system("su -c 'show status' admin");
        Of course, you will need to remove the corresponding "exit", because this will run the command, and exit automatically.

                "I can cast out either one of your demons, but not both of them." -- the XORcist

Re: OpenSSH and multiple users
by jcb (Parson) on Jan 05, 2016 at 03:56 UTC

    Have you tried packaging the commands you need to run into a shell script on the server and running the script interactively?

    Since security is a significant concern in your environment, this could also be used to avoid having an SSH key capable of an all-powerful root login. Instead, the key could be restricted to only running the status script using the command option, see sshd(8) for details on this feature.