手动编译SSH安装挺麻烦的,本文主要是我大量借鉴和实践总结出来的流程,一步一按照做不会有太大问题。
移植平台:IMX6UL(迅为开发板)
根文件系统:BusyBox
所有操作都建议不要在root账户下运行,并且make install的安装路径按照我的来,编译器随意。
中途编译可能会遇到缺少依赖库,每个人的情况都不一样,可以自己搜一下,解决后在按照流程继续走。
新建ssh目录,此后所有操作都在该路径下
mkdir ~/ssh
cd ~/ssh
1.zlib编译
zlib官网地址:https://www.zlib.net/fossils/
我使用的版本是:zlib-1.2.8.tar.gz
下载后将压缩包放到~/ssh,然后执行下面的命令
tar -xvf zlib-1.2.8.tar.gz
cd zlib-1.2.8/
./configure --static --prefix=~/ssh/ssh_install/zlib/
根据自己的编译器修改Makefile
vi Makefile
总共要修改四处:CC、LDSHARED、CPP、AR,其中CC最后面要加"-fPIC"
完成后编译安装
make
make install
没有错误的话zlib就编译完成了,可以看到多了一个目录~/ssh/ssh_install/zlib
2.openssl编译
openssl官网地址:http://distfiles.macports.org/openssl/
我使用的版本是:openssl-1.1.1c.tar.gz
下载后将压缩包放到~/ssh,然后执行下面的命令
tar -xvf openssl-1.1.1c.tar.gz
cd openssl-1.1.1c/
注意下面这条指令--prefix=/home/UserName/ssh/ssh_install/open-ssl/...其中的"UserName"要改成自己Ubuntu的账户名
./Configure linux-generic32 no-asm shared no-async --prefix=/home/UserName/ssh/ssh_install/open-ssl/ CROSS_COMPILE=arm-linux-gnueabihf- CC=gcc -fPIC
Makefile生成后编译安装
make
make install
没有错误的话zlib就编译完成了,可以看到多了一个目录~/ssh/ssh_install/open-ssl
3.openssh编译
openssh官网地址:https://ftp.riken.jp/pub/OpenBSD/OpenSSH/portable/
我使用的版本是:openssh-9.6p1.tar.gz
下载后将压缩包放到~/ssh,然后执行下面的命令
tar -vxf openssh-9.6p1.tar.gz
cd openssh-9.6p1/
注意下面这条指令有两个"UserName"改成自己Ubuntu的账户名即可
./configure --host=arm-linux-gnueabihf --with-libs --with-zlib=~/ssh/ssh_install/zlib --with-./configure --host=arm-linux-gnueabihf --with-libs --with-zlib=/home/UserName/ssh/ssh_install/zlib --with-ssl-dir=/home/UserName/ssh/ssh_install/open-ssl --disable-etc-default-login CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar
Makefile生成后编译,不用安装
make
touch pack.sh
vi pack.sh
这里参考这篇文章的Shell脚本:嵌入式Linux开发板移植SSH
打开pack.sh后,粘贴如下内容
#!/bin/bash
file_a="scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan"
file_b="moduli ssh_config sshd_config"
file_c="sftp-server ssh-keysign"
key="ssh_host_rsa_key ssh_host_dsa_key ssh_host_ecdsa_key ssh_host_ed25519_key"
mkdir -p usr/local/bin usr/local/etc usr/libexec
mkdir usr/sbin/
for i in $file_a
do
if [ -f $i ];then
cp $i usr/local/bin/
echo "cp $i ok"
else
echo "error:$i not exist "
exit_script
fi
done
for i in $file_b
do
if [ -f $i ];then
cp $i usr/local/etc/
echo "cp $i ok"
else
echo "error:$i not exist"
exit_script
fi
done
for i in $file_c
do
if [ -f $i ];then
cp $i usr/libexec
echo "cp $i ok"
else
echo "error:$i not exist"
exit_script
fi
done
if [ -f "sshd" ];then
cp sshd usr/sbin/
echo "cp sshd ok"
else
echo "error:sshd not exist"
exit_script
fi
# ssh_host_rsa_key
if [ -f "ssh_host_rsa_key" ];then
echo "ssh_host_rsa_key exist"
cp ssh_host_rsa_key usr/local/etc/
echo "cp ssh_host_rsa_key ok"
else
ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
cp ssh_host_rsa_key usr/local/etc/
echo "cp ssh_host_rsa_key ok"
fi
# ssh_host_dsa_key
if [ -f "ssh_host_dsa_key" ];then
echo "ssh_host_dsa_key exist"
cp ssh_host_dsa_key usr/local/etc/
echo "cp ssh_host_dsa_key ok"
else
ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
cp ssh_host_dsa_key usr/local/etc/
echo "cp ssh_host_dsa_key ok"
fi
# ssh_host_ecdsa_key
if [ -f "ssh_host_ecdsa_key" ];then
echo "ssh_host_ecdsa_key exist"
cp ssh_host_ecdsa_key usr/local/etc/
echo "cp ssh_host_ecdsa_key ok"
else
ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""
cp ssh_host_ecdsa_key usr/local/etc/
echo "cp ssh_host_ecdsa_key ok"
fi
# ssh_host_ed25519_key
if [ -f "ssh_host_ed25519_key" ];then
echo "ssh_host_ed25519_key exist"
chmod 600 ssh_host_ed25519_key
cp ssh_host_ed25519_key usr/local/etc/
echo "cp ssh_host_ed25519_key ok"
else
ssh-keygen -t dsa -f ssh_host_ed25519_key -N ""
chmod 600 ssh_host_ed25519_key
cp ssh_host_ed25519_key usr/local/etc/
echo "cp ssh_host_ed25519_key ok"
fi
tar -cjvf usr.tar.bz2 usr/*
echo "pack usr to usr.tar.bz2 ok"
关闭保存后修改运行权限,并运行,成功后移动到ssh_install,待会一起处理
chmod 777 pack.sh
./pack.sh
mv usr.tar.bz2 ~/ssh/ssh_install/
openssl和zlib打包
cd ~/ssh/ssh_install/open-ssl/
tar -cvf usr_openssl.tar.bz2 *
mv usr_openssl.tar.bz2 ../
cd ~/ssh/ssh_install/zlib/
tar -cvf usr_zlib.tar.bz2 *
mv usr_zlib.tar.bz2 ../
到这步交叉编译已经完成,现在把这三个压缩包放到开发板
开发板安装
- 首先确定电脑能跟开发板ping通
- 把刚刚那三个压缩包放到根节点下"/"
- 分别解压,如果嫌占用空间大的话,也可以在打包之前删掉一些,保留动态库即可。
tar -vxf usr_zlib.tar.bz2
tar -vxf usr_openssl.tar.bz2
tar -vxf usr.tar.bz2
- 打开/etc/init.d/rcS,在最后一行添加启动脚本
vi /etc/init.d/rcS
/usr/sbin/sshd &
- 重新启动开发板查看后台运行
ps
出现这条表示sshd成功运行
- 修改/usr/local/etc/sshd_config
vi /usr/local/etc/sshd_config
"#PermitRootLogin prohibit-password"
改成
"PermitRootLogin yes"
- 修改/etc/passwd,在最后一行添加
vi /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
- 如果开发板的账户没有密码,就要添加密码
passwd root
SSH连接终端
- 打开MobaXterm,新建连接
- 选择SSH
- 输入开发板的IP地址
- 输入账户名和密码
- 登录成功移植完毕