Welcome to the World of Erlang SSH

I’ve been playing around with the Erlang SSH application lately and I’ve noticed some weird behaviours which I decided to report here for future reference.

The general impression that I got from the application - and from its coursins such as crypto, public_key and ssh - is that it does not reflect the usual OTP quality standards and that it should be used with care.

Misleading error message on ssh_sftp:start_channel/1 in case of missing shell

When starting a SFTP channel towards a system where user does not have a shell (i.e. it has /bin/false or equilvalent assigned in the /etc/passwd a misleading error message is returned to the user:

1> test:go().
** exception exit: {normal,{gen_server,call,
                                       [<0.53.0>,
                                        {{timeout,infinity},
                                         wait_for_version_negotiation},
                                        infinity]}}
     in function  gen_server:call/3 (gen_server.erl, line 188)
     in call from ssh_channel:call/3 (ssh_channel.erl, line 88)
     in call from ssh_sftp:start_channel/2 (ssh_sftp.erl, line 93)
     in call from test:connect/1 (test.erl, line 14)

Where:

-module(test).
-compile(export_all).

go() ->
    ok = application:start(crypto),
    ok = application:start(asn1),
    ok = application:start(public_key),
    ok = application:start(ssh),
    connect("rabbitmq").

connect(Username) ->
    {ok, SSHRef} = ssh:connect("localhost", 22, [{user, Username}]),
    {ok, _SFTPChannelRef} = ssh_sftp:start_channel(SSHRef),
    ok.

This has been experienced in both R16B03 and R15B03.

Crash on SSH connect

On R16B03, when connecting via SSH on OS X Mavericks I get:

1> test:go().
** exception error: no match of right hand side value {error,"Internal error"}
     in function  test:connect/1 (test.erl, line 13)
3>
=ERROR REPORT==== 7-Feb-2014::13:38:06 ===
Erlang ssh connection handler failed with reason: function_clause
, Stacktace: [{ssh_connection_handler,userauth,
                  [{ssh_msg_userauth_pk_ok,<<>>, ...

Internal Crash is not real when using the key_cb option

When using the key_cb option on ssh:connect/3 the user should implement a series of callback functions. Not implementing them and trying to connect results in an “internal error” which invites the user to send a bug report. The undef callback function should be catched and reported as a normal error, not an internal one.

please report this to erlang-bugs@erlang.org