IMX6ULL 最新方案移植教程中间间系列5——向开发板迁移SSH和FTP
前言
本篇教程是基于正点原子教程的进一步改进和补充。这个是笔者这段时间的第五部分工作,也就是向开发板上迁移我们的SSH和FTP,这样,我们就可以直接向板子传递文件 了,可能在NFS挂载的时候意义不大,因为我们对根文件系统的操作直接被同步了,但是如果我们的目标系统被烧写近了EMMC中,那么这就很有意义了,直接天天拿着U盘挂载卸载太麻烦了,不如直接FTP刷过去文件。
需要注意的是,下面两个软件要求你的登录主机和板子在同一个局域网,即——ping通才可以,否则的话是用不了的,意味着你的前置要求是能够联网。所以做不到的朋友先把网卡驱动啥的移植明白在看这个。
补充和备齐基本组件——libcrypt
我们的FTP和SSH现在需要依赖libcrypt来做加密,注意,这些项目的符号依赖不是OpenSSL的那个libcrypto,这是两个完全不一样的东西,老环境中,我们自带了libcrypt.so,因此正点原子的教程没有设计到这个问题,但是新版本的编译器则不带这些库了,所以,需要我们自己编译和补充库
https://github.com/besser82/libxcrypt
笔者选择的是最新的Release,也就是4.4.38,我们下载后:
./configure \
--host=arm-linux-gnueabihf \
--prefix=/home/charliechen/imx6ull/netusr-tools/crypt_res \
--disable-static \
--enable-shared
编译完成之后,我们记得我们的下载的位置,就可以安装FTP了
交叉编译我们的FTP
笔者选择的是vsftpd,官方地址在:vsftpd - Secure, fast FTP server for UNIX-like systems
wget https://security.appspot.com/downloads/vsftpd-3.0.5.tar.gz
现在我们需要做的就是进入编译。但是现在因为crypt库不在默认位置,我们需要修改一下Makefile。
LINK = -L/home/charliechen/imx6ull/netusr-tools/crypt_res/lib -Wl,-s
我们在LINK中追加一下搜索路径即可,然后我们不下载,直接拷贝就行(因为他是路径写死的。。。)
make CC=arm-linux-gnueabihf-gcc
一下就能完事。然后就是拷贝我们的vsftpd和vsftpd.conf分别到usr/sbin/和etc/目录下,进入开发板,而且需要修改权限为
chmod +x /usr/sbin/vsftpd
chown root:root /etc/vsftpd.conf
下面修改/etc/vsftpd.conf
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
local_enable和write_enable需要解除注释。此外还需要创建路径
mkdir /home
mkdir /usr/share/empty -p
mkdir /var/log -p
touch /var/log/vsftpd.log
我们还需要做的是写/etc/passwd
root:x:0:0:root:/root:/bin/sh
和/etc/group
root:x:0:
然后我们就需要创建几个重要的用户:
adduser nobody
# 会让你设置密码,随意,最好自己熟悉的,怕万一之后调试要用到
adduser ftp
# 会让你设置密码,随意,最好自己熟悉的,怕万一之后调试要用到
adduser 自己喜欢的名称
# 会让你设置密码,随意,最好自己熟悉的,因为之后我们要自己登录使用
vsftpd &
上面的指令就是启动vsftpd,现在我们就可以使用FTP登录我们的板子了,需要注意的是,协议只能是FTP而不是SFTP,否则的话登不上去的!
OpenSSH的移植
我们下面移植OpenSSH,这样的话,我们就可以直接使用VSCode等软件直接交互我们的板子,
基础1:移植zlib
zlib很好移植
git clone https://github.com/madler/zlib
之后,我们设置
export CC=arm-linux-gnueabihf-gcc
export LD=arm-linux-gnueabihf-ld
export AS=arm-linux-gnueabihf-as
./configure -=-prefix=/home/charliechen/imx6ull/zlib_res
make -j4
完事。然后就往开发板上迁移就好了
基础2:移植OpenSSL
这个事情在我之前的迁移博客中提到了,所以自行翻前面的无线网卡驱动移植那个部分。
openssh的编译
这里笔者选择的是阿里源:
wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.9p2.tar.gz
解压后进入配置:
./configure --host=arm-linux-gnueabihf --with-libs --with-zlib=/home/charliechen/imx6ull/zlib_res \
--with-ssl-dir=/home/charliechen/imx6ull/openssl_res --disable-etc-default-login \
CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar
这里的-with-zlib和--with-ssl-dir依次指向我们自己install的时候的目录。
创建开发板环境
创建这些目录
/usr/local/bin
/usr/local/sbin
/usr/local/libexec
/usr/local/etc
/var/run
/var/empty
上述目录创建好以后将如下文件拷贝到开发板的/usr/local/bin 目录下:
scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan
将如下文件拷贝到开发板的/usr/local/sbin 目录下:
sshd
将如下文件拷贝到开发板的/usr/local/etc 目录下:
moduli ssh_config sshd_config
将如下文件拷贝到开发板的/usr/local/libexec 目录下:
sftp-server ssh-keysign sshd-session
创建软连接,进入开发板中的/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
再进入开发板的/sbin 目录下,输入如下命令创建软连接:
cd /sbin/
ln -s /usr/local/sbin/sshd
软连接创建完成以后就可以直接调用上面 ssh 相关命令了。
最后,我们编辑一下/usr/local/etc/sshd_config,把PermitRootLogin那一行的注释解开后,设置成yes
~ # cat /usr/local/etc/sshd_config | grep PermitRootLogin
PermitRootLogin yes
之后添加一个ssh用户和在/usr/local/etc生成一些密匙辅助我们的通信安全后:
adduser sshd
cd /usr/local/etc
ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""
ssh-keygen -t ed25519 -f ssh_host_ed25519_key -N ""
我们的配置就结束了,开启SSH服务只需要/sbin/sshd & 即可,确定没有任何报错日志之后,记得top一下看看有没有守护进程做事情:
CPU: 0.4% usr 0.8% sys 0.0% nic 98.7% idle 0.0% io 0.0% irq 0.0% sirq
Load average: 0.00 0.00 0.00 2/66 202
PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND
202 107 root R 2740 0.5 0 0.6 top
173 2 root SW 0 0.0 0 0.4 [RTW_CMD_THREAD]
30 2 root IW 0 0.0 0 0.2 [kworker/0:3-eve]
179 1 root S 7344 1.4 0 0.0 wpa_supplicant -D wext -c /etc/wpa
103 1 root S 5112 1.0 0 0.0 sshd: /sbin/sshd [listener] 0 of 1
191 1 root S 2740 0.5 0 0.0 udhcpc -i wlan0 -s /etc/simple_dhc
91 1 root S 1840 0.3 0 0.0 vsftpd
可以看到我们部署的OK,其中103号进程就是我们的sshd,91号进程就是我们的vsftpd。之后就可以使用ssh和ftp了!enjoy!!!