protected function createSubsystem($name)
    {
        switch ($name) {
            case 'sftp':
                $subsystem = new Sftp($this);
                break;
            case 'publickey':
                $subsystem = new Publickey($this);
                break;
            case 'exec':
                $subsystem = new Exec($this);
                break;
            default:
                throw new InvalidArgumentException(sprintf('The subsystem \'%s\' is not supported.', $name));
        }

        $this->subsystems[$name] = $subsystem;
    }