开发板ssh移植、搭建
1. 在ubuntu中下载ssh相关源码包
openssh-7.3p1
安装包.下载地址如下- 官网下载地址:
https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/
- 官网下载地址:
openssl-1.0.1t
安装包.下载地址如下- 官网下载地址:
https://www.openssl.org/source/openssl-1.0.1t.tar.gz
- 官网下载地址:
zlib-1.2.11
安装包.下载地址如下http://zlib.net
2. 交叉编译源码
-
zlib
的交叉编译。- 解压
zlib
。tar -zxvf zlib-1.2.11.tar.gz
,进入文件夹。 - 创建
zlib
安装目录。mkdir /usr/local/zlib/
。 - 配置。
./configure --prefix=/usr/local/zlib
.
打开Makefile
文件。vim Makefile
. 修改交叉工具链,内容如下。CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar RANLIB=arm-linux-gnueabihf-ranlib CPP=arm-linux-gnueabihf-gcc -E LDSHARED=arm-linux-gnueabihf-gcc
- 编译
make
. - 编译完成后,进行安装。
make install
- 解压
-
openssl
的交叉编译。-
解压
openssl
.tar -zxvf openssl-1.0.1t.tar.gz
-
创建安装目录。
mkdir /usr/local/openssl
. -
配置。
./Configure --prefix=/usr/local/openssl os/compiler:arm-linux-gnueabihf-gcc
-
编译。
make
. -
安装。
make install
. -
可能会出现的错误。
- make错误提示为:
configure: error: *** OpenSSL headers missing - please install first or check config.log ***
- 解决方法:配置时使用
-fPIC
.如./Configure --prefix=/usr/local/ssl os/compiler:arm-linux-gnueabihf-gcc -fPIC
.
- 解决方法:配置时使用
- make错误提示为:
-
-
openssh
的交叉编译。- 解压.
tar -zxvf openssh-7.3p1.tar.gz
- 创建安装目录。
mkdir /usr/local/openssh
. - 配置。
./configure --host=arm-linux --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/openssl --disable-etc-default-login --disable-strip CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar
. - 编译。
make
.
- 解压.
3. 移植
- 在开发板的中创建如下目录:
/usr/local/openssh/bin
./usr/local/openssh/etc
./usr/local/libexec
./var/run
./var/empty
.
- 将步骤2中编译生成的如下文件拷贝到开发板相应目录。
- 将如下文件
scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan
拷贝到开发板的/usr/local/openssh/bin
目录下。 - 将如下文件
moduli ssh_config sshd_config
拷贝到开发板的usr/local/openssh/etc
目录下。 - 将如下文件
sftp-server ssh-keysign
拷贝到开发板的/usr/local/libexec
目录下。 - 将文件
sshd
拷贝到开发板的/etc/init.d
目录下。 - 将
xxx/zlib-x.x.x/lib/
下文件libz.so.1.2.5
拷贝到开发板的/lib/
目录下。并在/lib/
目录下创建软连接ln -s libz.so.1.2.5 libz.so.1
.
- 将如下文件
- 在开发板上建立执行文件的软链接。
- 进入
/bin
目录,执行下述命令。ln -s /usr/local/openssh/bin/scp ln -s /usr/local/openssh/bin/sftp ln -s /usr/local/openssh/bin/ssh ln -s /usr/local/openssh/bin/ssh-add ln -s /usr/local/openssh/bin/ssh-agent ln -s /usr/local/openssh/bin/ssh-keygen ln -s /usr/local/openssh/bin/ssh-keyscan
- 进入
/sbin
目录,执行下述命令ln -s /etc/rc.d/init.d/sshd
- 进入
- 创建sshd用户
- 创建相关文件(如果不存在)。
touch /etc/passwd
.touch /etc/group
.touch /etc/shadow
.
- 创建sshd用户。
addgroup sshd adduser -G sshd -g 'sshd privsep' -h /var/empty -s /bin/ssh sshd
- 创建相关文件(如果不存在)。
- 产生密钥对,第一个密钥可能生成时会出错,不用理会,跳过继续执行其他的。
cd /usr/local/openssh/etc/ 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-keygen -t ecdsa -f ssh_host_ecdsa_key -N "" ssh-keygen -t ed25519 -f ssh_host_ed25519_key -N ""
- 为支持root用户登录,需要修改
sshd_config
配置文件- 打开
sshd_config
文件.vi /usr/local/openssh/etc/sshd_config
- 将
PermitRootLogin xxx
选项修改为PermitRootLogin yes
.
- 打开
- 如果root用户没有密码等,可能还需要修改密码。
4. ssh的使用
- 重启开发板。
- 启动ssh服务器。
/sbin/sshd
。此步骤一般放置在启动文件中。 - 使用客户端登录。
可能会遇到的问题。
- 登录后,没有命令行提示符,输入字符无效,比如按回车健时出现
^M
的字样。解决方法见注意事项1. - 使用root用户登录时,提示拒绝访问。
1. 解决方法:见移植中的修改sshd_config
文件部分。 - 用户登录时,提示密码过期。
1. 解决方法:修改系统时钟为当前时间。 - 如果遇到root用户登录不能解决的问题,可以先创建一个普通用户进行测试。
注意事项
/dev/pts
目录和devpts
文件系统是登录ssh所必须的,所以一定要保证目录的存在和文件系统的挂载,它俩一般在放在rcS
的启动文件中。- 确认存在
/dev/pts
目录,不存在时创建。mkdir /dev/pts
. - 挂载
devpts
文件系统。mount -t devpts devpts /dev/pts
.
- 确认存在
关于技术交流
此处后的文字已经和题目内容无关,可以不看。
qq群:825695030
微信公众号:嵌入式的日常
如果上面的文章对你有用,欢迎打赏、点赞、评论。