Mosh (software)

Mosh

Mosh, showing warning about intermittent network connection and local echoing feature.
Original author(s) Keith Winstein
Initial release March 12, 2012 (2012-03-12)
Stable release
1.2.6 / August 12, 2016 (2016-08-12)[1]
Operating system Unix-like systems
Type Utility software
License GNU GPLv3 with OpenSSL and iOS exceptions
Website http://mosh.mit.edu

In computing, Mosh (mobile shell) is a tool used to connect from a client computer to a server over the Internet, to run a remote terminal.[2] Mosh is similar[3] to SSH, with additional features meant to improve usability for mobile users. The major features are:

The main drawbacks of mosh are additional prerequisites to the server and that it lacks some special features of SSH (such as connection forwarding).

Design

Mosh works at a different layer from SSH. Whereas SSH transmits a stream of bytes in each direction (from server to client or client to server) using TCP, Mosh runs a terminal emulator at the server to figure out what should be on the screen.[2] The server then transmits this screen to the client at a varying frame rate, depending on the speed of the network.[8] This allows Mosh to save on network traffic on slow or intermittent connections.

Supported platforms

Mosh is available for most Linux distributions, Mac OS X, FreeBSD, NetBSD, and OpenBSD, Android, Solaris, Cygwin, and as a Chrome App.[2] The iOS program iSSH included an independent implementation of the Mosh protocol as an optional add-on,[9] but it is no longer available on the Apple App Store.

Performance

Roaming

Mosh is built on the State-Synchronization Protocol (SSP),[10] which supports single-packet roaming.[11] After the client has switched to a new IP address, a single packet that successfully reaches the server is enough to "roam" the connection. The client does not need to know it has roamed. (The client may be using NAT and the NAT roamed instead.)[8]

Packet loss

In the Mosh research paper,[8] the creators tested SSP on a link with 29% packet loss, and found that SSP reduced the average response time by a factor of 50 (from 16.8 seconds to 0.33 seconds) compared with SSH, which uses TCP. A different study, by students at Stanford University, found that SSP reduced the average response time by a factor of 30 (from 5.9 seconds to 0.19 seconds).[12]

Local echo

According to mosh's developers, the program was found to be able to predict and immediately display 70% of user keystrokes,[2][8] reducing the median response time to a keystroke to less than 5 milliseconds (masking the latency of the network). A different study, by students at Stanford University, found that Mosh was able to quickly echo 55% of user keystrokes[13]

Drawbacks

Compared to the more popular SSH, mosh has the following drawbacks:

Prerequisites on the server

The major drawback of mosh is that it requires the server to fulfill additional prerequisites which are not needed by ssh itself. Due to its design, mosh needs the server to allow direct connections via UDP.[14] Servers not fulfilling these prerequisites cannot be used by mosh. Examples of such systems include servers behind firewalls which restrict connections to the ssh-port via TCP. Also problematic are servers which are only indirectly reachable. The latter is usually accommodated by ssh via the 'ProxyCommand' option, but this is not supported by mosh.[15]

One port per connection

By default, the server tries to allocate the first free UDP port in the range 60000-61000, per connection. This dynamic port allocation is considered an extra burden and risk for firewall maintenance.[16] A significant part of the firewall-filtering happens through connection tracking, so called stateful filtering, this is based on the SYN/ACK flags in TCP segments, UDP packets don't have such flags.[17]
Mitigation:

  1. The UDP port on the server can be set per mosh connection, so that only a limited number of ports need to be opened [18]
  2. Deep packet inspection firewalls and Application firewalls can handle this better by looking at content of the packet and associate it to the initial connection.

No IPv6 roaming support

Mosh 1.2.5 can only support non-roaming IPv6 connections.[19] The use of the -6 option is necessary. There exists an experimental, multipath capable version of Mosh that supports IPv6 and dynamically switching between IPv4 and IPv6.[20][21]

Output drops and lack of terminal scrollback

Scrollback is not supported in the current release of mosh, and when using it in a terminal emulator with scrollbars they disappear, but is planned for the 1.3 release.[22] This functionality is trade-off for garbage cleaning, as binary output is wiped away. One way to mitigate this currently is by using mosh in combination with a terminal multiplexer like screen or tmux.[23]

Lack of ssh-agent forwarding

SSH-agent forwarding is not currently supported.[24]

Lack of X11 forwarding

X11 Forwarding is not yet supported.[25]

See also

References

  1. Winstein, Keith (12 August 2016). "mosh 1.2.6 released". mosh-users (Mailing list). Retrieved 12 August 2016.
  2. 1 2 3 4 "Mosh: the mobile shell". Retrieved on 28 March 2013.
  3. Brockmeier, Joe. "Into the Mosh Pit: A Mobile Shell Replacement for SSH", linux.com, 10 April 2012. Retrieved on 28 March 2013.
  4. Delony, David. "Mosh: Secure Shell Without the Pain", Technopedia, 19 October 2012. Retrieved on 28 March 2013.
  5. Cox, John. "MIT researchers chart a new approach for mobile Internet protocols", Network World, 6 July 2012. Retrieved on 28 March 2013.
  6. Beckert, Axel. "Mosh and AutoSSH: Remote shell tools that make your life easier on a slow or constantly morphing network", Linux Magazine, November 2012.
  7. Leyden, John. "MIT's mind-reading Mosh pits itself against SSH daemons", The Register, 13 April 2012. Retrieved on 28 March 2013.
  8. 1 2 3 4 Winstein, Keith. "Mosh: An Interactive Remote Shell for Mobile Clients", USENIX Annual Technical Conference 2012, Boston, Mass., 14 June 2012.
  9. "iSSH Features", Zingersoft. Retrieved on 28 March 2013.
  10. "MIT unveils a new Internet protocol for mobile clients"
  11. Winstein, Keith and Balakrishnan, Hari. "Mosh: An Interactive Remote Shell for Mobile Clients (more detailed draft)". Retrieved on 28 March 2013.
  12. Nagaraj, Kanthi and McMilin, Emily. "Mosh", Reproducing Network Research, 14 March 2013. Retrieved on 28 March 2013.
  13. Aljunied, Ahmed. "Evaluation of Mosh 'Mobile Shell' Performance Results", Reproducing Network Research, 13 March 2013. Retrieved on 28 March 2013.
  14. "'Mosh will log the user in via SSH, then start a connection on a UDP port between 60000 and 61000.'", Retrieved on 19 June 2014.
  15. "Mosh bug report #285: Can't use a ProxyCommand-based SSH connection", Retrieved on 18 June 2014
  16. "Dangers of opening up a wide range of ports? (mosh)", IT Security (Stack Exchange), 13 April 2012. Retrieved on 28 March 2013.
  17. Multiplexing more sessions into same UDP port
  18. "use -p to define remote UDP port"
  19. http://mailman.mit.edu/pipermail/mosh-users/2015-July/000283.html
  20. https://github.com/boutier/mosh
  21. Matthieu Boutier; Juliusz Chroboczek (2015), User-space multipath UDP in Mosh, arXiv:1502.02402Freely accessible
  22. https://github.com/keithw/mosh/issues/2 "Scrollback support is planned for version 1.3"
  23. "Scrollback and alternate screen (was: Use alternate screen on smcup/rmcup)"
  24. "SSH Agent Forwarding"
  25. "Support X forwarding"
This article is issued from Wikipedia - version of the 9/12/2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.