交叉编译openssh到at91sam9261开发板

交叉编译

交叉编译的过程参考OpenSSH移植到ARM Linux教程
其中openssl选用较新的openssl-1.1.0c.tar.gz,编译的过程中出现如下错误

*Warning! target os/compiler:/opt/freescale/usr/local/gcc-4.1.2-glibc-2.5-nptl-3/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc doesn't exist!

至今未解决,可参考此页面

我们需要的是sshdsshscp,利用arm-linux-strip去除不需要的部分,大约节省1/3的体积,不耽误正常功能。还有两个配置文件ssh_configsshd_config

yy@ubuntu1204:~/test/ssh/openssh-7.4p1$ arm-linux-strip ssh -o ssh_bak
yy@ubuntu1204:~/test/ssh/openssh-7.4p1$ arm-linux-strip sshd -o sshd_bak
yy@ubuntu1204:~/test/ssh/openssh-7.4p1$ arm-linux-strip scp -o scp_bak

将这个三个文件拷贝到开发板上。

scp -> /usr/local/bin/  #通过ssh传输文件用,可以直接在PC端复制,非必须
ssh -> /usr/local/bin/  #在开发板上通过ssh连接其他设备,非必须
sshd -> /usr/local/sbin/  #ssh服务程序,必须
ssh_config ->/usr/local/etc/
sshd_config -> /usr/local/etc/  #sshd配置文件,必须

修复用户文件

原来开发板上只有root用户,而且没有密码,就把和用户相关的文件删除了,现在都要修正回来。
1. 新建文件
touch passwd
touch group
2. 增加root用户
adduser root
3. 将root用户的uid,gid修改成0
vi passwd

root:x:500:500:Linux User,,,:/home/root:/bin/sh

修改成

root:x:0:0:Linux User,,,:/root:/bin/sh

vi group

root:x:500:

修改成

root:x:0:

否则,会提示root的uid不为0,看到类似提示几个修改这里就好了。
4. 增加root用户密码
passwd root
通过ssh连接,是需要用户设置过密码的。

修改相关配置

5. 修改配置文件
修改sshd_config

#PermitRootLogin prohibit-password

修改成

PermitRootLogin yes

这是新版本中的更改,可能是安全的考虑。如果提示没有权限或者被拒绝,可以考虑修改这个地方。
6. 增加sshd用户

adduser sshd

如果没有这个用户它会提示的,按照提示修补就可以。
7. 新建并修改sshd用户的根目录
mkdir -p /var/empty
vi /etc/passwd

sshd:x:500:500:Linux User,,,:/home/sshd:/bin/sh

修改成

sshd:x:500:500:Linux User,,,:/var/empty:/bin/sh

同样,如果没有/var/empty这个目录会报错,按照提示排查即可。

解决遇到的一点问题

8. 添加库文件libz.so.1
注意看错误信息,它提到找不到libz.so.1,可以看到这个应该是和zlib相关的库文件。在zlib.install/lib/中找到了这个文件。

#ls -l zlib.install/lib/
total 228
-rw-r--r-- 1 yy yy 119278 1229 19:18 libz.a
lrwxrwxrwx 1 yy yy     13 1229 19:18 libz.so -> libz.so.1.2.8
lrwxrwxrwx 1 yy yy     13 1229 19:18 libz.so.1 -> libz.so.1.2.8
-rwxr-xr-x 1 yy yy 103131 1229 19:18 libz.so.1.2.8
drwxrwxr-x 2 yy yy   4096 1229 19:18 pkgconfig

将libz.so.1.2.8复制到开发板。

libz.so.1.2.8 -> /lib/

建立软连接ln -s libz.so.1.2.8 libz.so.1
起初放在了/usr/local/lib/下,提示找不包libz.so.1,后来放在了/lib/下,貌似解决了问题,待验证。

9. 增加key文件
ssh是一种基于加密的安全的传输方式,需要事先添加密钥对。参考OpenSSH移植到ARM Linux教程。如果主机上有ssh_keygen命令,可直接在主机上生成4个文件,拷贝到开发板上。

10. 这时连接ssh时会有如下提示,密码已过期,需要更改。
这个/etc/shadow文件里的密码设置时间有关系,具体内容参考/etc/passwd 和 /etc/shadow 文件内容及其解释

WARNING: Your password has expired.
You must change your password now and login again!

这个地方比较坑,我的板子上修改密码这个值也不变,始终都是0,但问题还是要解决的,自己算一下47年,按365天,大约17000天吧。
vi /etc/shadow

root:**********************************:0:0:99999:7:::
sshd:**********************************:0:0:99999:7:::

修改第三个字段,是上次修改密码到1970年1月1日的天数。

root:**********************************:17000:0:99999:7:::
sshd:**********************************:17000:0:99999:7:::

改完大致是这个样子。
11. 现在基本上就没啥问题了。
大概还有
- 把libz.so.1的路径增加的环境变量LD_LIBRARY_PATH中;
- 增加sshd的开机启动,不知道出于什么考虑必须用绝对路径启动;
大致的用法就是
- 在远程主机ssh root@9261ip连接开发板进行控制;
- 在主机端通过scp file-to-send root@9261ip:/destination/path从主机向开发板发送文件。
OVER!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值