将ConnectBot与Intent一起使用

时间:2011-11-29 17:24:52

标签: android ssh android-intent

有没有办法通过意图访问ConnectBot功能?我想从我的应用程序中启动一个ssh-session并通过Private / Public Key进行身份验证,然后关闭会话。 ConnectBot是否可以实现这一点?如果可以,我该如何调用Intents?可悲的是,我没有找到关于这个主题的任何文件:(

1 个答案:

答案 0 :(得分:9)

这个问题的答案取决于你想要使用什么ssh会话:是程序化的,你想向用户显示他们可以输入的终端会话或控制台任意命令?第二个选项在很大程度上非常容易支持,正如你可以从研究ConnectBot manifest看到的那样 - 该应用程序有一个为ConsoleActivity注册的意图过滤器,它符合这种模式:

  • 操作android.intent.action.VIEW
  • uri ssh://user@host:port/#nickname

...之后它不会关闭会话,但除此之外,执行您指定的所有操作,使用ConnectBot自己的连接基础结构,并使用用户拥有的任何SSH密钥在ConnectBot应用程序中注册。

或者,您可能会谈论前一个选项:让您的应用以程序化方式对SSH服务器执行某些特定命令

ConnectBot官方发布的任何方式目前都不支持此功能。根据您的要求,您可能会想象您只需将ConnectBot的意图与服务器的地址和您希望它执行的命令一起启动; ConnectBot实现起来并不会太难,它可以让你省去了解ssh协议的过多麻烦。但是,这个意图不存在,如果它 它将是非常危险的,手机上的任何应用程序都可以使用它来使用远程服务器上的用户凭据执行任意代码。

存在的是我几个月前在ConnectBot的修补版本中创建的这个意图,以支持Android的Git客户端Agit

org.openintents.ssh.BIND_SSH_AGENT_SERVICE

ConnectBot的这个修补版本允许ConnectBot像ssh-agent一样工作 - 你的应用程序负责管理ssh连接,但你可以调用ConnectBot来获取必要的凭据 - ConnectBot将让您知道它可用于连接的公钥,并将签署身份验证所需的数字质询。 details of the protocol are on OpenIntents.org,但基本上你使用意图绑定到ConnectBot,获得一个提供ssh-agent功能的AIDL接口:

org.openintents.ssh.BIND_SSH_AGENT_SERVICE

作为安全预防措施,您的应用需要声明它使用此权限,否则它将无法绑定到该服务:

org.openintents.ssh.permission.ACCESS_SSH_AGENT

ConnectBot的补丁版本可以从Android电子市场下载:

https://market.android.com/details?id=com.madgag.ssh.agent

补丁的源代码在这里:

http://code.google.com/r/robertotyley-connectbot-ssh-agent/source/list?name=ssh-agent

虽然这会处理公钥/私钥管理,但实际上还是要让您在应用程序中实现ssh连接。我建议使用sshj库来获得ssh协议支持,请参阅他们的简单“命令”连接示例:

https://github.com/shikhar/sshj/blob/v0.6.1/src/main/java/examples/Exec.java

Bouncy Castle加密库通常在Java中用于提供加密算法,但Android提供的版本已经瘫痪而且不容易被覆盖 - 因此您应该使用Spongy Castle库来对Android库进行Android友好的重新打包:

https://github.com/rtyley/spongycastle