百问网用的是:zlib-1.2.3.tar.gz,openssl-0.9.8d.tar.gz,openssh-4.6p1.tar.gz
我进行试验时,openssl-0.9.8d.tar.gz出问题了,换成openssl-1.0.1h.tar.gz成功了。openssh也
另外,openssl版本要在0.9.8f和1.1.x之间。我完全按照下边的教程来移植zlib-1.2.11.tar.gz,
openssl-1.0.1h.tar.gz,openssh-7.7p1.tar.gz,最后测试时,运行
/usr/sbin/sshd,出现了
zlib-1.2.3.tar.gz
openssl-1.0.1h.tar.gz
openssh-5.5p1.tar.gz
2. 编译:
/work/software下新建目录ssh,并且将源码复制到该目录下
mkdir
/work/software/ssh
cp zlib-1.2.3.tar.gz
openssl-1.0.1h.tar.gzopenssh-5.5p1.tar.gz /work/software/ssh
/work/software/ssh下新建目录lib,用来保存生成的库文件。
mkdir /work/software/ssh/lib
a.编译zlib
tar xzf zlib-1.2.3.tar.gz
cd zlib-1.2.3/
./configure
--prefix=/work/software/ssh/lib/zlib-1.2.3
修改Makefile:
CC=gcc 改为:
CC=arm-linux-gcc
LDSHARED= gcc 改为:LDSHARED=arm-linux-gcc
CPP= gcc - E
改为:CPP=arm-linux-gcc - E
AR= ar
rc
改为:AR=arm-linux-ar rc
make
make install
//本处如果用 prefix=/work/software/ssh/lib/zlib-1.2.3 CC=arm-linux-gcc
./configure;
查看顶层Makefile,发现CC,LDSHARED,CPP都指定为了arm-linux-gcc,但AR不是arm-linux-ar。
可用: prefix=/work/software/ssh/lib/zlib-1.2.3 CC=arm-linux-gcc
AR=arm-linux-ar ./configure
由此看出,配置后,一定要查看一下Makefile,若有地方不正常,要修改。
b.编译openssl
cd /work/software/ssh/
tar xzf openssl-1.0.1h.tar.gz
./Configure
--prefix=/work/software/ssh/lib/openssl-1.0.1h
os/compiler:arm-linux-gcc
make
make install
c.编译openssh
cd /work/software/ssh/
tar xzf openssh-5.5p1.tar.gz
cd openssh-5.5p1/
./configure --host=arm-linux --with-libs
--with-zlib=/work/software/ssh/lib/zlib-1.2.3
--with-ssl-dir=/work/software/ssh/lib/openssl-1.0.1h
--disable-etc-default-login
CC=arm-linux-gcc AR=arm-linux-ar
//.configure --help。
CC和AR其实不用指定。--host=arm-linux之后,这些就全部配置了。
make
//不要make install。
3. 安装
确保目标板上有以下目录,如果没有,则新建(目录层次很重要,不要改变)
/usr/sbin
/usr/local/bin
/usr/local/libexec
/usr/local/etc/
a.在
openssh-5.5p1 下创建 usr var目录,文件临时拷贝到这里,然后统一打包到开发板
cd openssh-5.5p1
mkdir -p usr/sbin;
mkdir -p usr/local/bin;
mkdir -p usr/local/libexec;
mkdir -p usr/local/etc;
#sshd 工作目录
mkdir -p var/run;
mkdir -p var/empty/sshd;
chmod 777 var/empty
b.将
openssh-5.5p1目录下的 sshd 拷贝到 目标板的 /usr/sbin 目录下
cp sshd ./usr/sbin
c. 将scp sftp
sshssh-add ssh-agent ssh-keygen ssh-keyscan
到目标板/usr/local/bin
cp scp sftp
ssh ssh-add ssh-agent
ssh-keygen ssh-keyscan ./usr/local/bin
d. 将
sshd_config ssh_config拷贝到 /usr/local/etc/ 目录下
cp sshd_config ssh_config ./usr/local/etc
e. 将
sftp-server ssh-keysign 到 /usr/local/libexec
cp sftp-server ssh-keysign
./usr/local/libexec
f.
在主机上生成密钥
ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N
""
ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
将生成的
ssh_host_*_key这3个文件copy到./usr/local/etc/目录下
cp ssh_host_* ./usr/local/etc/
g. 打包
cd /work/software/ssh_1/openssh-5.5p1
mkdir ../final;
cp -r usr var ../final;
cd ../final;
tar czvf openssh.tgz ./
将openssh.tgz 拷贝到开发板根目录解压
cp openssh.tgz /work/nfs_root/new_fs
cd
/work/nfs_root/new_fs
sudo tar xzf openssh.tgz
h. 在开发板
bin 目录下创建软连接
cd /bin
ln -s /usr/local/bin/scp
ln -s /usr/local/bin/sftp
ln -s /usr/local/bin/ssh
ln -s /usr/local/bin/ssh-add
ln -s /usr/local/bin/ssh-agent
ln -s /usr/local/bin/ssh-keygen
ln -s /usr/local/bin/ssh-keyscan
i.启动开发板,添加用户
touch /etc/passwd
touch /etc/group
mkdir -p /home/sshd
adduser sshd
adduser root
此时:
vi /etc/passwd;
sshd:x:1000:1000:Linux
User,,,:/home/sshd:/bin/sh
root:x:1001:1001:Linux
User,,,:/home/root:/bin/sh
修改为
root:x:0:0:Linux User,,,:/home/root:/bin/sh
sshd:x:1000:1000:Linux
User,,,:/home/sshd:/bin/sh
vi /etc/group;
sshd:x:1000:
root:x:1001:
修改为:
root:x:0:
sshd:x:1000:
passwd root 为root用户设置密码
修改开发板/usr/local/etc/sshd_config,将PermitRootLogin
yes前的注释“#”号去掉
4. 测试
开发板运行此命令: /usr/sbin/sshd
出错:libz.so.1: cannot open shared object file: No such file or
directory
解决方法:
cd /work/software/ssh/lib/zlib-1.2.3/lib
cp *so* -d /work/nfs_root/new_fs/lib
ps 可以看到 /usr/sbin/sshd
主机:ssh
root@192.168.1.194
//192.168.1.194 是开发板ip
也可以直接用MobaXterm登录。
主机: ssh root@192.168.1.194
出错:
Host key verification failed.
解决方法: (以下3种方法都是对主机文件的修改)
法1
rm known_hosts
法2
vi ~/.ssh/known_hosts
删除对应ip的相关rsa信息
法3
在内网时选择最低的安全级别。在.ssh/config(或者/etc/ssh/ssh_config)中配置:
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
(注:为了简便,将knownhostfile设为/dev/null,就不保存在known_hosts中了)
错误解决:
passwd:unknown uid 0
这表示不能为该用户设置密码,此时你会发现要passwd命令也无法使用。解决的办法是, 打开
passwd文件,其内容为:
root:x:1000:1000:Linux User…:/home/root:/bin/sh
将用户ID和组ID均更改为0
打开group文件,其内容为:
root:x:1000:
同样将组ID改为0
然后,passwd命令就可以正常使用了。这时为root用户设置口令:
#passwd
root
附:passwd,shadow,group的格式:
passwd:一共由7个字段组成,6个冒号将其隔开。它们的含义分别为:
root:x:0:0:root:/root:/bin/sh
1.用户名
2.是否有加密口令,x表示有,不填表示无,采用MD5、DES加密。
3.用户ID
4.组ID 5.注释字段
6.登录目录 7.所使用的shell程序
group: 一共由4个字段组成,3个冒号将其隔开,它们的含义分别为:
root:x:0:
1.组名 2.是否有加密口令,同passwd
3.组ID 4. 指向各用户名指针的数组
shadow:一共由9个字段组成,8个冒号将其隔开,它们的含义分别为:
root:$1$3jZ93Mwq$oaeef6lWIuThavs8wD0Wh1:0:0:99999:7:::
1
用户名
2
加密后的口令,若为空,表示该用户不需要口令即可登陆,若为*号,表示该
账号被禁用。 上面的表示的是123456加密后的口令。
3
从1970年1月1日至口令最近一次被修改的天数
4
口令在多少天内不能被用户修改
5
口令在多少天后必须被修改(0为没有修改过)
6
口令过期多少天后用户账号被禁止
7
口令在到期多少天内给用户发出警告
8
口令自1970年1月1日被禁止的天数
9
保留域