From 26582eb82d2f17c993ce2e314fe5178eb39e15c0 Mon Sep 17 00:00:00 2001 From: epriestley Date: Mon, 30 Dec 2013 13:21:56 -0800 Subject: [PATCH] Provide a more helpful message if a user connects via raw SSH Summary: We currently print a fairly vague, technical message which is ambiguous about indicating success or an error if you aren't familiar with SSH. Test Plan: $ ssh -T dweller@localhost phabricator-ssh-exec: Welcome to Phabricator. You are logged in as epriestley. You haven't specified a command to run. This means you're requesting an interactive shell, but Phabricator does not provide an interactive shell over SSH. Usually, you should run a command like `git clone` or `hg push` rather than connecting directly with SSH. Supported commands are: conduit, git-receive-pack, git-upload-pack, hg, svnserve. Reviewers: btrahan, dctrwatson Reviewed By: dctrwatson CC: aran Differential Revision: https://secure.phabricator.com/D7854 --- scripts/ssh/ssh-exec.php | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/scripts/ssh/ssh-exec.php b/scripts/ssh/ssh-exec.php index ee25ce75f9..6dba54b1ea 100755 --- a/scripts/ssh/ssh-exec.php +++ b/scripts/ssh/ssh-exec.php @@ -58,11 +58,28 @@ try { $original_command = getenv('SSH_ORIGINAL_COMMAND'); } + $workflows = id(new PhutilSymbolLoader()) + ->setAncestorClass('PhabricatorSSHWorkflow') + ->loadObjects(); + + $workflow_names = mpull($workflows, 'getName', 'getName'); + // Now, rebuild the original command. $original_argv = id(new PhutilShellLexer()) ->splitArguments($original_command); if (!$original_argv) { - throw new Exception("No interactive logins."); + throw new Exception( + pht( + "Welcome to Phabricator.\n\n". + "You are logged in as %s.\n\n". + "You haven't specified a command to run. This means you're requesting ". + "an interactive shell, but Phabricator does not provide an ". + "interactive shell over SSH.\n\n". + "Usually, you should run a command like `git clone` or `hg push` ". + "rather than connecting directly with SSH.\n\n". + "Supported commands are: %s.", + $user->getUsername(), + implode(', ', $workflow_names))); } $ssh_log->setData( @@ -78,15 +95,6 @@ try { $original_args = new PhutilArgumentParser($original_argv); - $workflows = array( - new ConduitSSHWorkflow(), - new DiffusionSSHSubversionServeWorkflow(), - new DiffusionSSHMercurialServeWorkflow(), - new DiffusionSSHGitUploadPackWorkflow(), - new DiffusionSSHGitReceivePackWorkflow(), - ); - - $workflow_names = mpull($workflows, 'getName', 'getName'); if (empty($workflow_names[$command])) { throw new Exception("Invalid command."); }