历史上的今天
返回首页

历史上的今天

今天是:2025年02月26日(星期三)

正在发生

2020年02月26日 | TQ2440下的openssh移植

2020-02-26 来源:eefocus

移植ssh到arm 今天在internet上参考了几位前辈文章, 将ssh移植到了TQ2440的arm板上, 现在不需要用minicom来控制uclinux了。 板子上的串口终于可以接上采集器。 主要参考文章:


http://blog.chinaunix.net/u1/43047/showart_371372.html

http://blog.chinaunix.net/u2/63379/showart_513655.html

 


1.下载需要的源码:

    mkdir -p ~/arm/fs ;mkdir -p ~/arm/source

    下载zlib:  wget -c http://www.zlib.net/zlib-1.2.3.tar.gz

    下载ssl:  wget -c http://www.openssl.org/source/openssl-0.9.8d.tar.gz

    下载ssh: wget -c http://mirror.mcs.anl.gov/openssh/portable/openssh-4.6p1.tar.gz



2.编译:

    cd ~/arm/source


    (1) 编译zlib:

     tar zxvf zlib-1.2.3.tar.gz -C .

     cd zlib-1.2.3/

     ./configure --prefix=/home/itlanger/arm/fs/zlib-1.2.3

    修改Makefile:

       CC=gcc 改为: 

       CROSS=/usr/local/arm/3.4.1/bin/arm-linux-

       CC=$(CROSS)gcc 

       LDSHARED=gcc 改为: LDSHARED=$(CROSS)gcc

       CPP=gcc -E   改为:  CPP=$(CROSS)gcc -E

       AR=ar rc     改为: AR=$(CROSS)ar rc

  开始编译: make;

           make install


   (2)  编译openssl:

       tar zxvf openssl-0.9.8d.tar.gz

      ./configure --prefix=/home/itlanger/arm/fs/openssl-0.9.8d

     os/compiler:/usr/local/arm/3.4.1/bin/arm-linux-gcc

    make

    make install


   (3) 编译openssh:

      tar zxvf openssh-4.6p1.tar.gz

      cd openssh-4.6p1/

      ./configure --host=arm-linux --with-libs --with-zlib=/home/itlanger/arm/fs/zlib-1.2.3

         --with-ssl-dir=/home/itlanger/arm/fs/openssl-0.9.8d --disable-etc-default-login     

         CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc AR=/usr/local/arm/3.4.1/bin/arm-linux-ar

      make

      ##不要make install


3.安装

    

    (1) 将 openssh-4.6p1目录下的 sshd 拷贝到 目标板的/usr/sbin目录下

    (2) 再copy scp  sftp  ssh  ssh-add  ssh-agent  ssh-keygen  ssh-keyscan  到目标板/usr/local/bin目录下

            copy sftp-server  ssh-keysign    到/usr/local/libexec

       

    (3) 在目标板下:

        mkdir -p /usr/local/etc/  

        然后将openssh下的sshd_config,ssh_config 拷贝到该目录下


        mkdir -p /var/run; mkdir -p /var/empty/sshd 

        chmod 755 /var/empty     

    (4)在主机上:

         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_host_* 几个文件copy到目标板的 /usr/local/etc/目录下(可使用cp ssh_host_* /usr/local/etc/命令拷贝到目标板)

(5) 添加用户:

将主机上 /etc/目下的passwd, shadow, group 三个文件copy到目标板的 /etc目录下, 同时记得将passwd的最后 /bin/bash 该为 /bin/sh

//这一步以后,开发板上的用户结构与你本机的结构就是一样的了,所以在cp之前先把你自己的root密码设好

//#passwd设置root密码,然后在把上面3个文件cp到开发板/etc下

      其实可以删除不需要的一些用户。

      这一步也可以这样,在目标板的passwd中添加sshd用户:

      sshd:x:110:65534::/var/run/sshd:/usr/sbin/nologin

      在shadow中也添加对应的项就行了:

      sshd:!:14069:0:99999:7:::

     

4.测试

     目标板启动sshd:  # /usr/sbin/sshd

//在开发板上运行这个命令的时候可能会提示

//Privilege separation user sshd does not exist

//需要在开发板的系统里adduser shhd

//或者在 /etc/passwd 中添加下面这一行


sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin


主机: $ ssh root@192.168.0.34(开发板的ip)//root密码就是你本机上root的密码


ps: 红色的那些代表让arm做ssh server时必须的

------------------------------------------------

下边进行免密码登录设置:

cp(主机) root/.ssh/id_dsa.pub 到 (开发板)/.ssh/authorized_keys

---------------------------------------------------

如何让板子开机以后自动启动sshd服务:


添加:/etc/rc.d/init.d/sshd


#!/bin/sh                                                                       

base=sshd                                                                       

# See how we were called.                                                       

case "$1" in                                                                    

  start)                                                                        

                /usr/sbin/$base                                                     

        ;;                                                                      

  stop)                                                                         

        pid=`/bin/pidof $base`                                                  

        if [ -n "$pid" ]; then                                                  

                kill -9 $pid                                                    

        fi                                                                      

        ;;                                                                      

esac                  


在更改/etc/init.d/rcS,添加:


mkdir -p /var/empty/sshd

/etc/rc.d/init.d/sshd start


然后重启机器,一切OK!



我移植成功后出现以下问题:


Could not load host key: /etc/ssh/ssh_host_rsa_key


问题的解决


症状:


用命令/usr/sbin/sshd启动sshd时出现:


系统提示“Could not load host key: /etc/ssh/ssh_host_key


问题所在:


    1、系统丢失了ssh_host_dsa_key和ssh_host_rsa_key


    2、用户没有权限访问这两个key


解决办法如下:


1、系统丢失了两个key时:


在终端中输入:ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key重新建立ssh_host_dsa_key文件


以下是返回信息


Generating public/private dsa key pair.


Enter passphrase (empty for no passphrase):(直接回车)


Enter same passphrase again:


Your identification has been saved in /etc/ssh/ssh_host_dsa_key.


Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.


The key fingerprint is:


xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx root@localhost.localdomain


在终端中输入:ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key重新建立ssh_host_rsa_key文件


以下是返回信息


Generating public/private rkey pair.


Enter passphrase (empty for no passphrase):(直接回车)


Enter same passphrase again:


Your identification has been saved in /etc/ssh/ssh_host_rsa_key.


Your public key has been saved in /etc/ssh/ssh_host_dsa_rey.pub.


root@localhost.localdomain


现在用


/usr/sbin/sshd


即可成功启动sshd


这时候,就可以在windows底下使用putty连接这台linux主机了。


2、当前用户没有权限的时候用命令


/usr/sbin/sshd


启动sshd的时候也会这样,所以这是检查是否是root用户,一般root用户才能执行这个操作


二 配置sftp


网上的很多方法,大多是说怎么固定在一个目录下,我不需要这个,弄了半天,winSCP连不上,后来直接把Joggler中文系统中人家做好的sshd_config复制过来,改下路径,搞定了 哈哈


新建一个sshd_config,使用以下代码,并将该文件复制到目标板的/usr/local/etc/下,覆盖原文件


# Package generated configuration file


# See the sshd(8) manpage for details


# What ports, IPs and protocols we listen for


Port 22


# Use these options to restrict which interfaces/protocols sshd will bind to


#ListenAddress ::


#ListenAddress 0.0.0.0


Protocol 2


# HostKeys for protocol version 2


#HostKey /etc/ssh/ssh_host_rsa_key


#HostKey /etc/ssh/ssh_host_dsa_key


#Privilege Separation is turned on for security


UsePrivilegeSeparation yes


# Lifetime and size of ephemeral version 1 server key


KeyRegenerationInterval 3600


ServerKeyBits 768


# Logging


SyslogFacility AUTH


LogLevel INFO


# Authentication:


LoginGraceTime 120


PermitRootLogin yes


StrictModes yes


RSAAuthentication yes


PubkeyAuthentication yes


#AuthorizedKeysFile %h/.ssh/authorized_keys


# Don't read the user's ~/.rhosts and ~/.shosts files


IgnoreRhosts yes


# For this to work you will also need host keys in /etc/ssh_known_hosts


RhostsRSAAuthentication no


# similar for protocol version 2


HostbasedAuthentication no


# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication


#IgnoreUserKnownHosts yes

推荐阅读

史海拾趣

Elpaq公司的发展小趣事
科通(COMTEK)公司的发展小趣事

随着公司业务的不断拓展,科通技术开始与国际知名品牌展开合作。通过与Xilinx、Intel、SanDisk等全球领先的芯片原厂建立紧密的合作关系,科通技术获得了这些品牌的产品线授权,并为其在中国市场的拓展提供了有力的支持。这些合作不仅提升了科通技术的品牌影响力,也为其带来了更多的市场机会。

深圳杜因特(DOINGTER)公司的发展小趣事

作为一家快速发展的电子企业,杜因特深知人才是公司最宝贵的财富。因此,公司始终将团队建设和人才培养放在重要位置。通过引进优秀人才、加强内部培训等方式,杜因特打造了一支高效协作、专业精湛的团队。同时,公司还为员工提供了良好的工作环境和福利待遇,让员工能够在一个如家般的团队中做具有革新性的工作。

以上五个故事仅是基于已知信息对深圳杜因特公司发展起来的相关事实的概括性描述,具体细节可能因实际情况而有所不同。

CML公司的发展小趣事

随着电子行业的快速发展,CML意识到只有不断创新才能在激烈的市场竞争中立于不败之地。于是,公司加大了对研发的投入,积极引进先进的技术和设备,不断提升产品的性能和质量。经过多年的努力,CML成功开发出了一系列具有自主知识产权的半导体产品,不仅在国内市场占据了领先地位,还成功打入国际市场,赢得了全球客户的信赖和好评。

Chen Yang Technologies GmbH & Co KG公司的发展小趣事

随着业务的发展,Chen Yang Technologies意识到单靠自身力量难以实现快速扩张。因此,公司开始积极寻求与其他电子行业巨头的战略合作。通过与这些公司的合作,Chen Yang Technologies不仅获得了更多的资金支持和技术资源,还成功进入了新的市场领域。这些合作使得公司的业务范围得到了极大的拓展,同时也提升了公司的品牌影响力。

Future Designs, Inc. (FDI)公司的发展小趣事

随着市场需求的不断变化,FDI不断投入研发,致力于技术创新。他们不仅优化了现有的GUI产品,还将其应用范围扩大到了更多领域,如医疗设备、工业自动化、汽车电子等。同时,FDI还拓展了产品线,推出了光电元件、射频/IF和RFID、编程器、开发系统以及集成电路(IC)等一系列产品。这些创新举措使得FDI在电子行业中的影响力不断扩大,市场份额逐步提升。

问答坊 | AI 解惑

混音器电路

这是网上找的一个二输入混音器电路,但是我在用MULTISIM模拟时发现,他好像不是把两个信号简单的叠加,似乎把其中一个信号反相后再叠加? 是这样么?原理是什么?…

查看全部问答>

交叉编译apache遇到的问题

网上流传的大都是关于apache1.3.39的交叉编译步骤,我下载的http-2.2.9,找到一个此版本的交叉编译方法:http://203.208.37.104/search?q=cache:hrIbS-XEbrYJ:blog.xuite.net/bunny/blog/19764280+srclib/apr+arm&cd=2&hl=zh-CN&ct=clnk&gl=cn&st_u ...…

查看全部问答>

DM9000用于嵌入式工控产品的问题

我的嵌入式产品用的DM9000a, 用一台电脑能ping 通(偶尔丢包),不断电情况下,切换成另一台电脑,有时能ping通,有时ping 不通,并且10M/100M以及LINK灯灭,怎么回事啊?谢谢 …

查看全部问答>

S3C2410触摸屏驱动移植遇到问题

在将CE6.0的触摸屏驱动移植到FS2410时,编译通过了,但却得不到有效的触摸信息。得到的部分调试信息如下:   11941 PID:400002 TID:b1000a RELFSD: Opening file FS2410Touch.dll from desktop PB Debugger Loaded symbols for \'C:\\W ...…

查看全部问答>

WinCE下如何判断一个程序是否已经运行?

参考了一些桌面上的方案,发现在CE4.2下面都用不了,要么是mutex函数不支持多个参数,要么就是用不了Process类,大家能不能帮忙想想办法啊,看怎么实现判断程序是否运行的效果,如果已经运行了就不要再运行。…

查看全部问答>

求教关于TIMERA的捕获问题

使用的芯片是413 采用TA1的捕获模式从P1.2口测量频率周期,在测试板上使用按键模拟待测脉冲信号,结果发现按一次键会发生很多次捕获中断,为查明中断源有查TAIV,结果令人差异。代码如下: #include "msp430x41x.h" unsigned int m=1,l=1,o=1 ...…

查看全部问答>

请问430的C语言指令,一条指令就是一个时钟周期吗?

请问MSP430F149的C语言指令,一条指令就是一个时钟周期吗? 如果用汇编语言来写,一条指令就是一个周期对吗? 如果采用8MHZ的主时钟,一条指令就是125ns对吗? 从MSP430F149输出的MCLK是TTL电平吗?如果驱动COMS的串行时钟输入端要加上拉电阻吗 ...…

查看全部问答>

关于ds18b20读写时序的控制

最近一直在做温度传感器ds18b20的读写控制,感觉读写时序已经没有问题了,但是读出的数据始终是0,希望好心哥哥指点一下啊,我用ise 平台,vhdl语言写的代码~~~~ 芯片手册看了几百次了~求助啊…

查看全部问答>

求lm3s811芯片ft2232烧录的驱动以及烧录软件

麻烦有的能给我发一份吗?谢谢了.愿长期想各位请教!704114178@qq.com…

查看全部问答>