2016-01-13 1 views
0

Я использую JSch в своем приложении для Android, и я бы хотел создать SSH-соединение, не изначально предоставляя имя пользователя и пароль. Я могу подключиться, если я укажу имя пользователя и пароль, но я получаю имя пользователя, которое не указано «ошибка от JSch, если я не предоставляю имя пользователя.Могу ли я запустить JSch sesion без имени пользователя и пароля?

Это то, что я пытался подключить, не указав имя пользователя и пароль.

private class ConnectSSH extends AsyncTask<Void, Void, String> { 
    @Override 
    protected String doInBackground(Void... a) { 
     try { 
      JSch jsch = new JSch(); 
      Session session = jsch.getSession("192.168.1.42"); 
      session.setPort(22); 
      session.connect(); 
      Channel channelssh = (Channel)session.openChannel("exec"); 
      StringBuilder sb = new StringBuilder(); 
      InputStream commandOutput = channelssh.getInputStream(); 
      channelssh.connect(); 
      int readByte = commandOutput.read(); 
      while(readByte != 0xffffffff){ 
       sb.append((char)readByte); 
       readByte = commandOutput.read(); 
      } 
      channelssh.disconnect(); 
      return sb.toString(); 
     } catch (Exception e) { 
      return "Error - " + e; 
     } 
    } 
    @Override 
    protected void onPostExecute(String result) { 
     Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show(); 
    } 
} 

будет ли мой единственный вариант будет изменить исходный код JSch, чтобы позволить этому, компилировать банку, а затем импортировать его?

+0

AFAIK, требование имени пользователя приходит как можно больше от 'sshd', как и все остальное. Как вы настроили своего SSH-демона таким образом, чтобы он не требовал имени пользователя? – CommonsWare

+0

В теории вы можете назначить имя пользователя по умолчанию для своего демона ssh (см. Http://stackoverflow.com/questions/10197559/ssh-configuration-override-the-default-username), поэтому вам не придется его предоставлять. Но в этом случае это конфигурация sshd. Другое дело в ситуации, когда кто-то запускает ssh-соединение и предоставляет имя пользователя после этого. В этом случае, я думаю, JSch не поддержит этот вариант. – Leo

+0

Спасибо, Лео. Я имею в виду эмуляторы терминала, такие как Putty, которым требуется имя пользователя и пароль после подключения. Или соединение действительно не сделано до тех пор, пока не будет указано имя пользователя и пароль? – ImTroyMiller

ответ

0

конструктор класса JSch Session должен иметь имя пользователя заполнены.

Но это это реализация UserAuth, которая в конечном итоге определяет, какое имя пользователя используется.

Таким образом, вы можете продлить, например, UserAuthPassword, чтобы присвоить фактическое имя пользователя .username в начале .start().

class UserAuthUsernamePassword extends UserAuthPassword { 

    public boolean start(Session session) throws Exception { 
    this.username = "real_username"; 
    return super.start(session); 
    } 

} 

И вы просто передать фиктивное значение username аргумента Session конструктора.