50

I need to run a (Tcl, or whatever) script on a remote Unix machine, from a (local) Windows command shell, and I want the stdout/stderr of the script to show up in the Windows CLI. The exit code would also be useful.

Is this possible using ssh (putty)? Or by any other means?

Thanks!

44

This is the default for SSH. If you want to redirect output remotely, put the redirect symbol (typically ">") inside the command quotes.

For example:

ssh remote_host "ls > /tmp/file_on_remote_host.txt"

For saving output locally on Windows host,

ssh remote_host "ls" > .\file_on_local_host.txt

To combine stderr remotely and save it and stdout locally,

ssh remote_host "ls 2>&1" > .\combined_output_on_local_host.txt
| improve this answer | |
  • Is it possible to do this with putty.exe? I.e. work as a "normal" CLI program as opposed to the default, which is to emulate a terminal. – Cristian Diaconescu Apr 13 '10 at 14:13
  • I have putty'ed into a Windows 2003 system and run command line, yes. The host had HP's version of SSH server installed in order to support their system administration tools. If you only have an SSH client than everything is running on the remote system. – kmarsh Apr 13 '10 at 14:54
  • 1
    This works also for a non-Windows local machine. – shiri Oct 29 '17 at 9:16
  • Except for the backslash path, yes. – kmarsh Nov 1 '17 at 17:04
20

What I was looking for is putty's side-kick, plink.exe. Unlike putty, which acts like a terminal emulator, plink acts like a normal (non-interactive) CLI program.

Using it, I could do this in cmd.exe and get the remote command output saved locally.

\> plink remote_host "ls -l" > log.txt

Best of all, this works for ssh as well as telnet !

Just for reference purposes, these are the available options:

PuTTY Link: command-line connection utility
Release 0.59
Usage: plink [options] [user@]host [command]
       ("host" can also be a PuTTY saved session name)
Options:
  -V        print version information and exit
  -pgpfp    print PGP key fingerprints and exit
  -v        show verbose messages
  -load sessname  Load settings from saved session
  -ssh -telnet -rlogin -raw
            force use of a particular protocol
  -P port   connect to specified port
  -l user   connect with specified username
  -batch    disable all interactive prompts
The following options only apply to SSH connections:
  -pw passw login with specified password
  -D [listen-IP:]listen-port
            Dynamic SOCKS-based port forwarding
  -L [listen-IP:]listen-port:host:port
            Forward local port to remote address
  -R [listen-IP:]listen-port:host:port
            Forward remote port to local address
  -X -x     enable / disable X11 forwarding
  -A -a     enable / disable agent forwarding
  -t -T     enable / disable pty allocation
  -1 -2     force use of particular protocol version
  -4 -6     force use of IPv4 or IPv6
  -C        enable compression
  -i key    private key file for authentication
  -noagent  disable use of Pageant
  -agent    enable use of Pageant
  -m file   read remote command(s) from file
  -s        remote command is an SSH subsystem (SSH-2 only)
  -N        don't start a shell/command (SSH-2 only)
  -nc host:port
            open tunnel in place of session (SSH-2 only)
| improve this answer | |
3

Yes if you use the putty ssh client you will see any command line output your script will produce. To get the exit code after the script runs type:

echo $?
| improve this answer | |
1

Other way to get the log file on your windows machine is : - mount Windows m/c on Unix system ( depending on flavor of UNIX, this could be possible using Samba server) - run the script from windows using any remote client - have the script log into the mounted directory

You can see the output live if you get UNIX equivalent of tail for Windows.

| improve this answer | |
0

One more answer:

Save all your linux commands in cmdlist.txt file and use the below command.

plink.exe -ssh -pw passwd uname@1.2.3.4 output.txt

passwd == password for the device login

uname == username for the device login

1.2.3.4 == device IP address

After this command executed, all your cmdlist.txt commands will be executed on the remote device and the output is saved in the file called output.txt

Make sure to keep the plink.exe and cmdlist.txt in the same directory and you are pointing your dos prompt to the same directory.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.