7

socat - exec:'bash -li',pty,stderr,ctty -> bash: no job control in this shell

What options should I use to get fully fledged shell as I get with ssh/sshd?

I want to be able to connect the shell to everything socat can handle (SOCKS 5, UDP, OpenSSL), but also to have a nice shell which correctly interprets all keys, various Ctrl+C/Ctrl+Z, tab completion, up/down keys (with remote history).

  • Update 1: Found "setsid" socat option. It fixes "no job control". Now trying to fix Ctrl+D.

  • Update 2:

    socat file:`tty`,raw,echo=0 exec:'bash -li',pty,stderr,setsid,sigint,sane
    . Not it handles Ctrl+D/Ctrl+Z/Ctrl+C well, I can start Vim inside it, remote history is OK.

1
  • Looks like all requirements are met now. Now to mark the question as closed?
    – Vi.
    Mar 24, 2010 at 23:43

1 Answer 1

5

The problems were:

  1. Missing "setsid" option in right side of socat. It will cause bash not to be controller of session.
  2. Using "-" in the left side of socat. The proper thing is `tty`,raw,echo=0.

Now I can have a shell over all things socat can support and can start vim/screen/ssh, interrupt ping with ^C, end cat with ^D and do everything else in that shell.

If bash breaks lines wrong and/or vim is too small or too big, you can use termsize to fix it easily.

3
  • Using STDIN:raw,echo=0 instead of file:`tty`,raw,echo=0 worked better for me. I was able to use this (using two socats with a unix domain socket in the middle) to get shell access to a container in a different network namespace. Apr 15, 2015 at 23:19
  • @SethRobertson For playing with Linux namespaces, also see my other project: github.com/vi/dive
    – Vi.
    Apr 16, 2015 at 2:24
  • @SethRobertson, I use this way of starting something in other existing network namespace: dived -J -S -T --setns /proc/12345/ns/net -- /bin/bash. This way only network namespace gets set, everything else (other namespaces, controlling terminal, parent process) is preserved.
    – Vi.
    Apr 16, 2015 at 4:23

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .