How to run a remote command in PuTTY after login & keep the shell running?

37

8

What I'm trying to do: start a PuTTY session from the command line, login to remote machine and cd to provided directory.

putty.exe -agent -ssh some.host

That will open a session & login with my default login name & private key.

echo cd /some/remote/path/ > c:/stuff/cmd.txt
putty.exe -agent -ssh some.host -m 'c:/stuff/cmd.txt'

That will open a session, login, execute a command (cd in this case) and exit.

How do I open a session, login, cd and keep the session open?

Background: I use emacs under windows and often edit files on remote Unix machines using tramp & plink. I want to make a hotkey that opens a PuTTY session for that remote machine and chdirs to the directory of that file. Not a big deal on emacs side, but I'm stuck with PuTTY.

Artyom V. Kireev

Posted 2013-04-25T15:06:20.037

Reputation: 473

Answers

33

What the -m does is, that it makes PuTTY instruct the SSH server to start that command(s) INSTEAD of a shell. So once your command finishes, so does the session.

If you want to run the shell after the cd command, you need to add it explicitly to your cmd.txt, like:

cd /my/path ; /bin/bash

Also the -m implies "nopty"/non-interactive mode. To use an interactive shell you need to override that using the -t switch.

putty.exe -ssh example.com -m "c:\path\cmd.txt" -t

Alternatively use KiTTY with its -cmd switch, that does what you want (and does not need a temporary file).

Martin Prikryl

Posted 2013-04-25T15:06:20.037

Reputation: 13 764

Thanks for the guideline here, but I seem to have an issue trying to use putty -m "myfile.sh" -t to connect to a tinycorelinux vm (/bin/ash). I will get following error: http://i.imgur.com/QN5oRXC.png (my script starts with echo ".." it will always show the first letter in my script after the illegal characters

– Vincent De Smet – 2014-09-24T06:00:54.183

if I use configure a remote command in the putty profile, it works – Vincent De Smet – 2014-09-24T06:02:50.860

I tried that (adding /bin/bash to cmd.txt) and that does not work. As far as I understand, bash starts in non-interactive mode and, having no code to execute, exits. Is there a way to start an interactive shell that way? – Artyom V. Kireev – 2013-04-25T16:20:44.460

Meanwhile, I tried to start mc. :-) It didn't, and provided some output: Cannot get terminal settings: Invalid argument (22) TERM environment variable needs set. – Artyom V. Kireev – 2013-04-25T16:21:15.617

-1

The tramp session you're starting in emacs and the shell session you run via putty are completely separate processes.

You're probably better off checking configuration options for tramp to see if there's a way to set a default directory per host within your emacs configuration. Maybe start with the tramp-remote-path configuration option as documented here.

If you need to use putty to establish the connection, you probably want to set up an ssh tunnel and have emacs/tramp connect through that.

Doug Harris

Posted 2013-04-25T15:06:20.037

Reputation: 23 578

Emacs & tramp are irrelevant here, I added that just for the background. That's not about editing file in emacs, that's about opening a shell to do something else with that file (e.g. run a script). I'm tired of "start putty, choose you host, then cd to the path you need", and want to automate that. – Artyom V. Kireev – 2013-04-25T15:50:07.640