http://hi.baidu.com/dreammerge/item/03d662ec7325c10f560f1dbc
知识:
SSH为Secure Shell的缩写,由IETF的网络工作小组(Network Working Group)所制定;SSH为创建在应用层和传输层基础上的安全协议。
传统的网络服务程序,如FTP、POP和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。
而SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
SSH之另一项优点为其传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP、甚至为PPP提供一个安全的“通道”。
步骤:
因为项目的需求,需要移植一个SFTP的客户端程序,经过比较多个sftp客户端(如putty,lftp,filezilla,openssh等),最终决定移植openssh,步骤如下:
--------------------------------------------------------------------------------
1. 下载需要的源码:
下载zlib: http://zlib.net/zlib-1.2.5.tar.gz
下载ssl: http://www.openssl.org/source/openssl-1.0.0.tar.gz
下载ssh: http://ftp.openbsd.org/pub/OpenB ... penssh-5.5p1.tar.gz
2.
在/work目下面创建ssh目录
# mkdir /work/lib ----〉共享库目录,通过nfs挂载
# mkdir /work/ssh -----〉工作目录
# cd /work/ssh
# mkdir compressed install source -----〉compressed 用于存放源码包
Install 软件安装目录
Source 源码包解压目录
#mv tarpakgs/zlib-1.2.5.tar.gz /work/ssh/compressed
#mv tarpakgs/openssl-1.0.0.tar.gz /work/ssh/compressed
#mv tarpakgs/openssh-5.5p1.tar.gz /work/ssh/compressed
交叉编译 zlib
# cd /work/ssh/compressed/
# tar xvf zlib-1.2.5.tar.gz -C ../source
# cd ../source/zlib-1.2.5
# ./configure --prefix=/work/ssh/install/zlib-1.2.5
# vim Makefile
CC=arm_v5t_le
AR=arm_v5t_le-ar rc
CPP =arm_v5t_le-gcc -E
LDSHARED=arm_v5t_le-gcc
# make
# make install
交叉编译openssl
# cd /work/ssh/compressed/
# tar zxvf openssl-1.0.0.tar.gz -C ../source
# cd ../source/openssl-1.0.0
# ./Configure --prefix=/work/ssh/install/openssl-1.0.0 os/compiler:arm_v5t_le-gcc
# make
# make install
交叉编译openssh
# cd /work/ssh/compressed
# tar zxvf openssh-5.5p1.tar.gz –C ../source
# cd ../source/openssh-5.5p1
#./configure --host=arm_v5t_le --with-libs --with-zlib=/work/ssh/install/zlib-1.2.5 --with-ssl-dir=/work/ssh/install/openssl-1.0.0 --disable-etc-default-login --with-ldflags=-lcrypt CC=arm-9tdmi-linux-gnu-gcc AR=arm_v5t_le-ar
出现这个错误的话checking host system type ....invalid configuration 'arm-vet_le': machine 'arm_v5t_le' not recognized
用下面解决办法:
修改config.sub 把arm_v5t_le加上。
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | arm_v5t_le \
#make
#不要make install
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
$ ./sftp -S ./ssh
-S 指定ssh路径。
特殊说明:
若只用sftp功能,可只需
libnsl.so.1
libutil.so.1
libz.so.1
sftp
ssh
五个程序即可。
上位机有winscp访问的时候要选scp,不能选sftp