logo资料库

android系统成功移植openssh的步骤.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
Openssh 移植到 Android 系统的步骤 1、 由于 android SDK 中一般不带有 openssh 源码的,虽然原版的 android 源码中是带有的,所以需要先找到 android 下 openssh 源 码,在 github 上可以克隆得到: $git 将该源码克隆到本地 android 源码的 external 目录下,如果 external clone https://android.googlesource.com/platform/external/openssh 下已经有该文件夹,但是大多时候是空的,external 目录里都是一 些扩展模块。 2、 编译 openssh 模块,因为在上面的 github 中得到的源码是带有 Android.mk 的,但是并没有配置编译进整个系统,所以需要修改 相关的配置(具体如何修改没有找到答案),现在采用单独编译模 块的方式,因为 openssh 依赖 zlib 库和 openssl(这两个源码是自 带的,如果没有也可在 github 上克隆得到),所以需要先编译 zlib 和 openssl: $source build/envsetup.sh $mmm -B external/zlib $mmm -B external/openssl $mmm -B external/openssh 编译之后将会生成一下文件: #编译 zlib 生成的文件 /out/target/product/rk3288/system/lib/libz.so /out/target/product/rk3288/system/bin/gzip #编译 openssl 生成的文件
/out/target/product/rk3288/system/lib/libcryphto.so /out/target/product/rk3288/system/lib/libssl.so /out/target/product/rk3288/system/bin/ssltest /out/target/product/rk3288/system/bin/openssl #编译 openssh 生成的文件 /out/target/product/rk3288/system/lib/libssh.so /out/target/product/rk3288/system/bin/ssh /out/target/product/rk3288/system/bin/sftp /out/target/product/rk3288/system/bin/scp /out/target/product/rk3288/system/bin/sshd /out/target/product/rk3288/system/bin/ssh-keygen /out/target/product/rk3288/system/bin/start-ssh /out/target/product/rk3288/system/etc/ssh/sshd_config 将所有以上生成的文件采用 adb push 的方式 push 进系统中相应的 位置,将 lib 下的 push 进系统/system/lib/下,将 bin 文件都 push 进/system/bin/下,将 sshd_config 文件先进行如下修改后再 push 进系统的/system/etc/ssh/下,如果 system/etc/下没有 ssh 文件,那 么需要先 mkdir ssh 创建该目录。 3、 因为在 linux 中使用 ssh 我们一般都是采用 username:passwd 的方式,但是在 android 中是没有这一概念的,网上有人说可以采 用修改源码或者添加伪用户的方式(但是并未找到这两种方式具 体如何操作,所以没有采用),另外一种方式就是使用密钥登录,
采用该方法即可实现 root 无密码登录,但是需要修改 sshd_config 文件,将上一步骤中生成的/etc/ssh/sshd_config 文件进行如下修 改: 将#Port 22 改为 Port 22 讲#PermitRootLogin yes 改为 PermitRootLogin without-password 将#RSAAuthentication yes 改为 RSAAuthentication yes 将#PubkeyAuthentication yes 改为 PubkeyAuthentication yes 将 PasswordAuthentication no 改为#PasswordAuthentication no 将#PermitEmptyPasswords no 改为 PermitEmptyPasswords yes 将 #ChallengeResponseAuthentication yes 改 为 ChallengeResponseAuthentication yes 将#UsePrivilegeSeparation yes 改为 UsePrivilegeSeparation no 将/data/ssh/sshd_config 改为 internal-sftp 最后,更改该文件的权限为 600,chmod 600 sshd_config。 4、 创建目录结构,在系统中 data 目录下创建 ssh 和 empty 文件 夹,empty 文件夹在运行 sshd 服务的时候需要的,源码中应该是 有这个定义的,所以不创建 empty 空文件夹的话,运行 sshd 服务 的时候会报错: $mkdir -p /data/ssh $mkdir -p /data/ssh/empty $chmod 700 /data/ssh $chmod 700 /data/ssh/empty
5、 在 sshd_config 中可以看到其中有这样三个配置 HostKey /data/ssh/ssh_host_rsa_key HostKey /data/ssh/ssh_host_dsa_key AuthorizedKeysFile /data/ssh/authorized_keys 所以由此可知,为何会有上一步中创建文件夹 ssh,另外也需要有 上面三个秘钥,所以在系统的/data/ssh/文件夹下需要生成秘钥: $cd /data/ssh/ $ssh-keygen -t rsa $ssh-keygen -t dsa -f -f ssh_host_rsa_key -N “” ssh_host_dsa_key -N “” 在主机 PC windows/ubuntu 下生成通讯的密钥: #ssh-keygen -t rsa -C “your_email_address” // 将 your_email_address 换做自己的邮箱地址。 该命令会在主目录下生成.ssh 目录,目录下包含 id_rsa(私钥)和 id_rsa.pub(公钥)两个文件。然后将 id_rsa.pub 文件 push 进 android 系统中: #adb push id_rsa.pub /data/ssh/authorized_keys #adb shell chmod 600 /data/ssh/authorized_keys #adb shell chown root:root /data/ssh/authorized_keys 最后,将 id_rsa 和 id_rsa.pub 拷贝到任何一个需要连接 android 终端 的 PC 中,用于配对 ssh 连接。备注:该通讯秘钥对不一定使用 ssh-keygen -t rsa -C “your_email_address”产生,也可以使用 SecureCRT 产生,网上可以找到该教程。使用 id_rsa 和 id_rsa.pub 的
方法如上。 6、 首先要保证 android 端 sshd 服务启动,所以可以手动在 android 系统中启动 sshd 服务。PC 端即可使用 ssh 登录,SecureCRT 和 winSCP 均 可 以 登 录 使 用 ,ubuntu 下 可 以 采 用 以 下 指 令 :ssh root@ip_address 的方式登录。为了能够自动启动 sshd 服务,可以 在 init.rc 中添加该服务。那么如何启动 sshd 服务呢,首先我尝试 了直接运行/system/bin/start-ssh,发现不成功,之后在网上又搜索 了一下,找到正确方式。生成启动脚本: $mkdir -p /data/local/userinit.d 在该文件夹下新建一个文件,暂命名为 99sshd(为了区分 sshd 文 件,引发不必要的影响,所以不直接命名为 sshd),该文件的内容 复制/system/bin/start-ssh,所以可以这样操作,将 start-ssh 复制到 /data/local/userinit.d 下,在使用 mv 指令修改其名字为 99sshd。再 更改其权限为 755。之后就可以手动启动,也可以添加到 init.rc 中。
分享到:
收藏