ssh移植到Android
来源:互联网 发布:sql case when isnull 编辑:程序博客网 时间:2024/06/10 08:36
关于openssh的源码可以参看googlesource:
https://android.googlesource.com/
LOCAL_PATH:= $(call my-dir)###################### libssh ######################include $(CLEAR_VARS)LOCAL_MODULE_TAGS := engLOCAL_SRC_FILES := \ acss.c authfd.c authfile.c bufaux.c bufbn.c buffer.c \ canohost.c channels.c cipher.c cipher-acss.c cipher-aes.c \ cipher-bf1.c cipher-ctr.c cipher-3des1.c cleanup.c \ compat.c compress.c crc32.c deattack.c fatal.c hostfile.c \ log.c match.c md-sha256.c moduli.c nchan.c packet.c \ readpass.c rsa.c ttymodes.c xmalloc.c addrmatch.c \ atomicio.c key.c dispatch.c kex.c mac.c uidswap.c uuencode.c misc.c \ monitor_fdpass.c rijndael.c ssh-dss.c ssh-ecdsa.c ssh-rsa.c dh.c \ kexdh.c kexgex.c kexdhc.c kexgexc.c bufec.c kexecdh.c kexecdhc.c \ msg.c progressmeter.c dns.c entropy.c gss-genr.c umac.c jpake.c \ schnorr.c ssh-pkcs11.c roaming_dummy.c \ openbsd-compat/strtonum.c openbsd-compat/bsd-misc.c \ openbsd-compat/timingsafe_bcmp.c openbsd-compat/bsd-getpeereid.c \ openbsd-compat/readpassphrase.c openbsd-compat/vis.c \ openbsd-compat/port-tun.c openbsd-compat/setproctitle.c \ openbsd-compat/bsd-closefrom.c openbsd-compat/getopt.c \ openbsd-compat/rresvport.c openbsd-compat/bindresvport.c \ openbsd-compat/bsd-statvfs.c openbsd-compat/xmmap.c \ openbsd-compat/port-linux.c openbsd-compat/strmode.c \ openbsd-compat/bsd-openpty.c \ openbsd-compat/fmt_scaled.c \ openbsd-compat/pwcache.c openbsd-compat/glob.c# openbsd-compat/getrrsetbyname.c# openbsd-compat/xcrypt.c LOCAL_C_INCLUDES := external/openssl/include external/zlibPRIVATE_C_INCLUDES := external/openssl/openbsd-compatLOCAL_SHARED_LIBRARIES += libssl libcrypto libdl libzLOCAL_MODULE := libsshLOCAL_CFLAGS+=-O3include $(BUILD_SHARED_LIBRARY)###################### ssh ######################include $(CLEAR_VARS)LOCAL_MODULE_TAGS := engLOCAL_SRC_FILES := \ ssh.c readconf.c clientloop.c sshtty.c \ sshconnect.c sshconnect1.c sshconnect2.c mux.c \ roaming_common.c roaming_client.cLOCAL_MODULE := sshLOCAL_C_INCLUDES := external/openssl/includePRIVATE_C_INCLUDES := external/openssl/openbsd-compatLOCAL_SHARED_LIBRARIES += libssh libssl libcrypto libdl libzinclude $(BUILD_EXECUTABLE)###################### sftp ######################include $(CLEAR_VARS)LOCAL_MODULE_TAGS := engLOCAL_SRC_FILES := \ sftp.c sftp-client.c sftp-common.c sftp-glob.c progressmeter.cLOCAL_MODULE := sftpLOCAL_C_INCLUDES := external/openssl/includePRIVATE_C_INCLUDES := external/openssl/openbsd-compatLOCAL_SHARED_LIBRARIES += libssh libssl libcrypto libdl libzinclude $(BUILD_EXECUTABLE)###################### scp ######################include $(CLEAR_VARS)LOCAL_MODULE_TAGS := engLOCAL_SRC_FILES := \ scp.c progressmeter.c bufaux.cLOCAL_MODULE := scpLOCAL_C_INCLUDES := external/openssl/includePRIVATE_C_INCLUDES := external/openssl/openbsd-compatLOCAL_SHARED_LIBRARIES += libssh libssl libcrypto libdl libzinclude $(BUILD_EXECUTABLE)###################### sshd ######################include $(CLEAR_VARS)LOCAL_MODULE_TAGS := engLOCAL_SRC_FILES := \ sshd.c auth-rhosts.c auth-rsa.c auth-rh-rsa.c \audit.c audit-bsm.c audit-linux.c platform.c \sshpty.c sshlogin.c servconf.c serverloop.c \auth.c auth1.c auth2.c auth-options.c session.c \auth-chall.c auth2-chall.c groupaccess.c \auth-skey.c auth-bsdauth.c auth2-hostbased.c auth2-kbdint.c \auth2-none.c auth2-passwd.c auth2-pubkey.c auth2-jpake.c \monitor_mm.c monitor.c monitor_wrap.c kexdhs.c kexgexs.c kexecdhs.c \auth-krb5.c \auth2-gss.c gss-serv.c gss-serv-krb5.c \loginrec.c auth-pam.c auth-shadow.c auth-sia.c md5crypt.c \sftp-server.c sftp-common.c \roaming_common.c roaming_serv.c \sandbox-null.c sandbox-rlimit.c sandbox-systrace.c sandbox-darwin.o# auth-passwd.cLOCAL_MODULE := sshdLOCAL_C_INCLUDES := external/openssl/include external/zlibPRIVATE_C_INCLUDES := external/openssl/openbsd-compatLOCAL_SHARED_LIBRARIES += libssh libssl libcrypto libdl libz libcutilsinclude $(BUILD_EXECUTABLE)###################### ssh-keygen ######################include $(CLEAR_VARS)LOCAL_MODULE_TAGS := engLOCAL_SRC_FILES := \ ssh-keygen.cLOCAL_MODULE := ssh-keygenLOCAL_C_INCLUDES := external/openssl/includePRIVATE_C_INCLUDES := external/openssl/openbsd-compatLOCAL_SHARED_LIBRARIES += libssh libssl libcrypto libdl libzinclude $(BUILD_EXECUTABLE)###################### sshd_config ######################include $(CLEAR_VARS)LOCAL_MODULE_TAGS := engLOCAL_MODULE := sshd_configLOCAL_MODULE_CLASS := ETCLOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/sshLOCAL_SRC_FILES := sshd_config.androidinclude $(BUILD_PREBUILT)###################### start-ssh ######################include $(CLEAR_VARS)LOCAL_MODULE_TAGS := engLOCAL_MODULE := start-sshLOCAL_MODULE_CLASS := EXECUTABLESLOCAL_SRC_FILES := start-sshinclude $(BUILD_PREBUILT)
既然要移植openssh到android,那么首先需要把ssh的源码放在android代码里面并且使用合适的Android.mk确保android正常编译出正确的Openssh工具
我在android/external/下找到名为openssh的目录文件夹,里面正是openssh的源码。
然而正常情况下ssh工具并不会编译进system.img。
需要做一些些修改。
LOCAL_MODULE_TAGS := 这里需要指定版本。对应你的lunch版本这些东西如果可以确保无误,那么我们应该能在android系统的/system/bin下面发现Android.mk里面指定的工具
/system/bin/ssh
/system/bin/ssh-keygen
/system/bin/sshd
/system/bin/start-ssh
/system/bin/scp
/system/bin/sftp
/system/etc/ssh/sshd_config
+++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++
移植成功了可能还想将sshd作为一个服务启动在android后台。
这个问题也很简单。
正常的init.rc里面有
mkdir /data/ssh 0750 root shellmkdir /data/ssh/empty 0700 root root
service sshd /system/bin/start-ssh class main disabled
我们需要改一下service这边
service sshd /system/bin/start-ssh class main user root group root
重新烧录一个版本,就没啥问题啦。
==================================================================================================================================
dropbear的安装与使用
源码地址
https://github.com/barryk/android_external_dropbear
【这个版本只到0.52,而0.52只支持一种密钥交换协议diffie-hellman-group-sha1
后续我会写如何添加其他密钥交换协议】
android4.4之后就没有dropbear了。
可以在android/external/下面手动建立一个dropbear的文件夹。然后gitclone拷贝好
看看android.mk确认是否正常的编译出来。
作为客户端去连接服务器。我这边验证的是没有问题。
但是想作为服务端,感觉编译出来的dropbear是有问题的。(可以正常作为service启动。但是启动以后发现无法连接上这台设备。)
要作为服务端需要的操作有
在init.rc里面创建必要的文件夹
mkdir /data/dropbear/
mkdir /data/dropbear/.ssh
mkdir /.ssh/
生成ssh服务器密钥
dropbearkey -t rsa -f /data/dropbear/dropbear_rsa_host_key
dropbearkey -t dss -f /data/dropbear/dropbear_dss_host_key
我把生成密钥这部分拿脚本包了起来
在init.rc里面通过:exec /sbin/busybox sh /xxxxx/dropbear_config.sh生成
如果遇到ssh连接以后某些功能如 am.pm等不能正确使用的情况
有两手解决办法
1 写个.profile 在home目录,在profile文件内容可参考:
#Adding env params for librariesexport LD_LIBRARY_PATH=/vendor/lib:/system/libexport BOOTCLASSPATH=/system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/telephony-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/scala-compiler.jar:/system/framework/scala-library.jar:/system/framework/scala-parser-combinators.jar:/system/framework/scala-reflect.jar:/system/framework/scala-xml.jar:/system/framework/akka23.jar:/system/framework/typesafe-config.jar
2.修改源代码svr-chansession.c:
大致在900多行有addnewvar的函数,你可以仿照里面的USER,LOGNAME等仿照将我们的LD_LIBRARY_PATH等缺失变量写入
因为编译出来的dropbear有问题【没有问题】,在这里提供一下编译完成正常的二进制文件http://download.csdn.net/download/u012839187/10140452
注:经验证,编译出来的二进制文件dropbear并没有问题。问题出在:我在默认的options.h里面给的DROPBEAR_DEFADDRESS “127.0.0.1”,因为设备只监听自己的127地址,又没有做端口映射,自然没有任何人能连上。。。
没有C币可以邮箱向我索要。
参考链接:
http://www.cnblogs.com/hzl6255/p/6124301.html
- ssh移植到Android
- 移植ssh到arm
- 移植ssh到arm
- 移植ssh到fl2440
- 移植ssh到arm
- 移植ssh到arm
- 移植ssh到arm
- 移植ssh到arm
- SSH 移植到ARM上
- 移植 ssh 到开发板
- SSH 7.2p2 移植到fl2440记录
- SSH服务移植到ARM单板
- SSH 成功移植到 ARM 平台
- 移植Dnsmasq到Android
- BusyBox移植到Android
- irrlicht移植到android
- 移植Android 到mini2440
- 移植ffmpeg到android
- Spring data kafka操作kafka消息的发送和订阅
- Spark学习笔记——数据读取和保存
- Struts2.5.12+hibernate4.3.11+spring4.3.9整合
- Struts2笔记之自定义封装请求参数的数据类型转换器
- js和jquery在操作dom节点时各自的方法
- ssh移植到Android
- 使用apache的poi实现导入导出excel
- edtools.rar下载和安装
- Design Tutorial: Inverse the Problem CodeForces
- testng源码阅读之多线程包
- 小谜题5
- 汇编(六)
- Java LinkedList
- Egret-H5游戏开发之性能优化总结