首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JSCH连接到SSH服务器?

如何使用JSCH连接到SSH服务器?
EN

Stack Overflow用户
提问于 2013-07-31 19:51:13
回答 1查看 5.3K关注 0票数 3

我正在尝试使用jsch连接到我开放的ssh ubuntu服务器,我只想看看是否可以使用SSH从我的android手机连接到linux服务器,但是它不起作用。当我在android手机上启动应用程序时,应用程序崩溃了,我附加了代码和LogCat文件,我是java和eclipse的新手。

这是我的密码

代码语言:javascript
复制
package com.example.please;

import java.util.Properties;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
    Button button;
    EditText usr_nm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        System.out.println("working");
        button=(Button) findViewById(R.id.btn);
        //button.setOnClickListener(handle);
        usr_nm = (EditText)findViewById(R.id.editText1);
        String host="x.x.x.x";

        new loadsomestuff().execute(host);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public class loadsomestuff extends AsyncTask<String, Integer, String>{

        String asd;
        @Override
        protected String doInBackground(String... arg0) {

            JSch jsch=new JSch();
            Properties props = new Properties(); 
            props.put("StrictHostKeyChecking", "no");

            Properties config = new Properties();
            config.put("StrictHostKeyChecking", "no");
            config.put("compression.s2c", "zlib,none");
            config.put("compression.c2s", "zlib,none");

            Session session;
            try {
                session = jsch.getSession("user", "x.x.x.x",22);
                session.setConfig(config);
                session.setPassword("xxxxxxx");
                session.connect();
            } catch (JSchException e) {
                asd = "NOT_Executed";
                System.out.println("NOT_executed");
                e.printStackTrace();
                return "NOT_Executed";
            }          


            Context context = getApplicationContext();
            CharSequence text = "Connected to Pi";
            int duration = android.widget.Toast.LENGTH_SHORT;
            android.widget.Toast toast = android.widget.Toast.makeText(context, text, duration);
            toast.show();
            System.out.println("executed");
            asd = "executed";
            return "Executed";

            //return null;
        }

        @Override
        protected void onPostExecute(String abc){
            usr_nm.setText(asd);
        }

    }

}

LogCat显示了以下内容

代码语言:javascript
复制
07-31 16:21:53.298: E/Trace(781): error opening trace file: No such file or directory (2)
07-31 16:21:53.858: I/System.out(781): working
07-31 16:21:54.028: I/Choreographer(781): Skipped 38 frames!  The application may be doing too much work on its main thread.
07-31 16:21:54.078: D/gralloc_goldfish(781): Emulator without GPU emulation detected.
07-31 16:21:54.177: I/Choreographer(781): Skipped 46 frames!  The application may be doing too much work on its main thread.
07-31 16:21:54.547: I/System.out(781): NOT_executed
07-31 16:21:54.547: W/System.err(781): com.jcraft.jsch.JSchException: java.net.SocketException: socket failed: EACCES (Permission denied)
07-31 16:21:54.557: W/System.err(781):  at com.jcraft.jsch.Util.createSocket(Util.java:344)
07-31 16:21:54.557: W/System.err(781):  at com.jcraft.jsch.Session.connect(Session.java:215)
07-31 16:21:54.557: W/System.err(781):  at com.jcraft.jsch.Session.connect(Session.java:183)
07-31 16:21:54.557: W/System.err(781):  at com.example.please.MainActivity$loadsomestuff.doInBackground(MainActivity.java:64)
07-31 16:21:54.557: W/System.err(781):  at com.example.please.MainActivity$loadsomestuff.doInBackground(MainActivity.java:1)
07-31 16:21:54.557: W/System.err(781):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
07-31 16:21:54.557: W/System.err(781):  at java.util.concurrent.FutureTask.run(FutureTask.java:234)
07-31 16:21:54.567: W/System.err(781):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
07-31 16:21:54.567: W/System.err(781):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
07-31 16:21:54.577: W/System.err(781):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
07-31 16:21:54.577: W/System.err(781):  at java.lang.Thread.run(Thread.java:856)
07-31 16:21:54.577: W/System.err(781): Caused by: java.net.SocketException: socket failed: EACCES (Permission denied)
07-31 16:21:54.577: W/System.err(781):  at libcore.io.IoBridge.socket(IoBridge.java:583)
07-31 16:21:54.588: W/System.err(781):  at java.net.PlainSocketImpl.create(PlainSocketImpl.java:201)
07-31 16:21:54.588: W/System.err(781):  at java.net.Socket.startupSocket(Socket.java:559)
07-31 16:21:54.588: W/System.err(781):  at java.net.Socket.tryAllAddresses(Socket.java:127)
07-31 16:21:54.588: W/System.err(781):  at java.net.Socket.<init>(Socket.java:177)
07-31 16:21:54.588: W/System.err(781):  at java.net.Socket.<init>(Socket.java:149)
07-31 16:21:54.598: W/System.err(781):  at com.jcraft.jsch.Util.createSocket(Util.java:338)
07-31 16:21:54.608: W/System.err(781):  ... 10 more
07-31 16:21:54.608: W/System.err(781): Caused by: libcore.io.ErrnoException: socket failed: EACCES (Permission denied)
07-31 16:21:54.618: W/System.err(781):  at libcore.io.Posix.socket(Native Method)
07-31 16:21:54.618: W/System.err(781):  at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:181)
07-31 16:21:54.618: W/System.err(781):  at libcore.io.IoBridge.socket(IoBridge.java:568)
07-31 16:21:54.618: W/System.err(781):  ... 16 more

请帮帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-31 20:26:41

您的应用程序必须在其AndroidManifest.xml中具有以下权限

代码语言:javascript
复制
<uses-permission android:name="android.permission.INTERNET"/>
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17979630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档