ssh "!command" escape sequence - does it work?

Chris Green cl at isbd.net
Fri Sep 11 08:13:18 UTC 2020


On Thu, Sep 10, 2020 at 09:35:22PM -0600, Gary Aitken wrote:
> On 9/10/20 9:43 AM, Chris Green wrote:
> > On Thu, Sep 10, 2020 at 04:28:56PM +0100, Colin Watson wrote:
> > > On Thu, Sep 10, 2020 at 03:19:19PM +0100, Chris Green wrote:
> > > > In the man page for ssh_config it says:-
> > > > 
> > > >       PermitLocalCommand
> > > > Allow local command execution via the LocalCommand option or using the
> > > !command escape sequence in
> > > >         ssh(1).  The argument must be yes or no (the default).
> > > > 
> > > > Can anyone point me at something that tells me about "... the !command
> > > > escape sequence in ssh(1)" please.
> > > 
> > > Here's the relevant bit of documentation from that manual page.  Does
> > > this help?
> > > 
> > > ESCAPE CHARACTERS
> > >       When a pseudo-terminal has been requested, ssh supports a number of
> > >       functions through the use of an escape character.
> > > 
> > >       A single tilde character can be sent as ~~ or by following the tilde by a
> > >       character other than those described below.  The escape character must
> > >       always follow a newline to be interpreted as special.  The escape
> > >       character can be changed in configuration files using the EscapeChar
> > >       configuration directive or on the command line by the -e option.
> > > 
> > >       The supported escapes (assuming the default ‘~’) are:
> > > 
> > > [...]
> > > 
> > >       ~C      Open command line.  Currently this allows the addition of port
> > >               forwardings using the -L, -R and -D options (see above).  It also
> > >               allows the cancellation of existing port-forwardings with
> > >               -KL[bind_address:]port for local, -KR[bind_address:]port for
> > >               remote and -KD[bind_address:]port for dynamic port-forwardings.
> > >               !command allows the user to execute a local command if the
> > >               PermitLocalCommand option is enabled in ssh_config(5).  Basic
> > >               help is available, using the -h option.
> > > 
> > Yes, I found that, but I can't make "!command" do *anythin*, let alone
> > anything helpful. The only things that seem to work after ~C are '-h'
> > and the forwarding commands, ordinary shell commands just do nothing.
> 
> Do you have "PermitLocalCommand" set to yes in ~/.ssh/config?  On my system the
> default in /etc/ssh/ssh_config is no.
> 
Yes, I do have that set and have checked by setting LocalCommand as
well.  Reading parts of the documentation seems to suggest that
'!command' actually executes the command set in LocalCommand with new
parameters - but I can't make that happen either.

-- 
Chris Green




More information about the ubuntu-users mailing list