移植OpenSSH到arm手记
http://blog.csdn.net/songbohr/article/details/5540025
hi,all
I have finished porting sftp program for PTO project.The attachment is sftp program,pls check.Any question,please do not hestate to contact me.
At the same time,I have written a article about how to port sftp(OpenSSH) to arm platform to share with you.
How to use it ?
$ ./sftp -S ./ssh phil@192.168.0.78-S 指定ssh路径。特殊说明:若只用sftp功能,可只需拷贝libnsl.so.1libutil.so.1libz.so.1sftpssh五个程序到PTO即可。
移植经验分享:
移植OpenSSH到arm手记
因为PTO项目的需求,需要移植一个SFTP的客户端程序,经过比较多个sftp客户端(如putty,lftp,filezilla,openssh等),最终决定移植openssh,步骤如下:
--------------------------------------------------------------------------------
1. 下载需要的源码:
下载zlib: wget -c http://zlib.net/zlib-1.2.5.tar.gz
下载ssl: wget -c http://www.openssl.org/source/openssl-1.0.0.tar.gz
下载ssh: wget -c http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-5.5p1.tar.gz
2. 编译:
cd ~/sftp
(1) 编译zlib:
tar zxvf zlib-1.2.3.tar.gz -C .
cd zlib-1.2.3/
./configure --shared --prefix=~/sftp/pack/zlib
修改Makefile:
CC=gcc 改为:
CROSS=/usr/local/arm/3.4.1/bin/arm-linux-
CC=$(CROSS)gcc
LDSHARED=gcc -shared -Wl,-soname,libz.so.1 改为:LDSHARED=$(CROSS)gcc -shared -Wl,-soname,libz.so.1
CPP=gcc -E 改为:CPP=$(CROSS)gcc -E
AR=ar rc 改为:AR=$(CROSS)ar rc
开始编译: make;make install
(2) 编译openssl:
tar zxvf openssl-1.0.0.tar.gz
cd openssl-1.0.0
./Configure --prefix=~/sftp/pack/openssl os/compiler:/usr/local/arm/3.4.1/bin/arm-linux-gcc
make;make install
(3) 编译openssh:
tar zxvf openssh-5.3p1.tar.gz
cd openssh-5.3p1/
./configure --host=arm-linux --prefix=/home/phil/sftp/pack/openssh --disable-strip --with-libs --with-zlib=/home/phil/sftp/pack/zlib --with-ssl-dir=/home/phil/sftp/pack/openssl --disable-etc-default-login CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc AR=/usr/local/arm/3.4.1/bin/arm-linux-ar
make
##不要make install
注意:1)因为openssh链接的是zlib动态库,所以编译zlib时要加--shared
2)--with-zlib必须用绝对路径,--prefix有的可以用~,但openssh要求--prefix必须用绝对路径
3. 安装
(1) 将 openssh-5.5p1目录下的 sshd 拷贝到 目标板的/usr/sbin目录下
(2) 再copy scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan 到目标板/usr/local/bin目录下
copy sftp-server ssh-keysign 到/usr/local/libexec
(3) 在目标板下:
mkdir -p /usr/local/etc/
然后将openssh下的sshd_config,ssh_config 拷贝到该目录下
mkdir -p /var/run; mkdir -p /var/empty/sshd
chmod 755 /var/empty
(4)在主机上:
ssh-keygen -t rsa1 -f ssh_host_key -N ""
ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
将生存的 ssh_host_* 4个文件copy到目标板的 /usr/local/etc/目录下
(5) 添加用户:
将主机上 /etc/目下的 passwd, shadow, group 三个文件copy到目标板的 /etc目录下, 同时记得将passwd的最后 /bin/bash 该为 /bin/sh
其实可以删除不需要的一些用户。
这一步也可以这样,在目标板的passwd中添加sshd用户:
sshd:x:110:65534::/var/run/sshd:/usr/sbin/nologin
在shadow中也添加对应的项就行了:
sshd:!:14069:0:99999:7:::
4.测试
目标板启动sshd: # /usr/sbin/sshd
主机: $ ssh -v root@192.168.0.65
$ ./sftp -S ./ssh phil@192.168.0.78
-S 指定ssh路径。
特殊说明:
若只用sftp功能,可只需
libnsl.so.1
libutil.so.1
libz.so.1
sftp
ssh
五个程序即可。
参考文档:
移植sshd到jk2410开发板http://blog.chinaunix.net/u1/43047/showart_371372.html
Openssh移植经验谈http://blog.csdn.net/dzassn/archive/2007/09/08/1776971.aspx
Comparison of FTP client software http://en.wikipedia.org/wiki/Comparison_of_FTP_client_software
The Secure Shell (SSH) Protocol Architecture http://tools.ietf.org/html/rfc4251
SSH File Transfer Protocol http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/
phil
2010-04-28