原文链接:http://blog.csdn.net/evenness/article/details/16881975
首先说移植的目的:有了ssh开机自动启动,就不用串口线来操作开发板了,可以节省很多时间,特别是文件传输的缓慢实在无法忍受。
移植过程:
下载相关源码:
openssh:http://mirror.esc7.net/pub/OpenBSD/OpenSSH/portable/openssh-6.1p1.tar.gz
openssl:http://www.openssl.org/source/openssl-1.0.1c.tar.gz
zlib:http://zlib.net/zlib-1.2.7.tar.gz
然后配置好交叉编译工具
1.编译zlib
修改Makefile
就是讲gcc ar用arm-linux-gcc arm-linux-ar来代替
2.编译openssl
这里可以直接指定交叉编译器,如果想知道哪些编译文件可以直接支持的话,一般./configure –help就可以看到说明
3.编译openssh
指定好了prefix为安装的目标目录,zlib与ssl的路径也就是我们刚才的安装路径,最后指定交叉编译器
这里并不安装,理由是不需要安装,安装到本机也无法执行,因为我们是交叉编译,你也许会问,为什么不直接换个预置安装目录来安装呢?如果不动手做你是不会知道的,sshd启动的时候会去安装目录下的etc找配置文件滴,所以这个目录不要随便指定,网上那些教程很多这里的路径都是有问题的。
编译工作至此结束,可以开始移植openssh了。
目录结构大体如下:
这就把需要拷贝的文件都准备好了,传到开发板的目录下,然后展开到/根。
这时候ssh并不能运行,还需要修改passwd与group文件,位置在/etc下,将sshd用户添加上。
passwd照着模样修改:
sshd::15:50:::/bin/sh
group照着模样修改:
sshd:*:50:
这里的两个50要对应,是组的编号
然后就是配置ssh key了。
mkdir /var/empty
现在执行/sbin/sshd应该就可以正常启动了。
如果想自动启动需要增加启动脚本与启动项。
启动脚本位置:/etc/rc.d/init.d/
启动项配置文件:/etc/init.d/rcS
如何修改可以自己参照里面的实例。
至此就已经完成了移植工作了。ssh可以正常链接。对了,这里建议修改sshd_config哦,把允许root登录与空密码选项打开,因为可以方便,这个不是服务器,不需要太高的安全级别。
今天装cygwin,遇到一些问题,这篇文章整理的很全,遇到的问题解决方法基本都有。
[问题1]
# /usr/local/sbin/sshd
/usr/local/sbin/sshd: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory
[分析与解决]
用strace跟踪sshd,查询缺少的目录和文件,给与相应的添补。
strace -f -F /usr/local/sbin/sshd
cp libnsl* /work/lib/
[问题2]
# /usr/local/sbin/sshd
Privilege separation user sshd does not exist
[分析与解决]
没有sshd用户 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
scp /etc/passwd root@HOST:/etc
scp /etc/shadow root@HOST:/etc
scp /etc/group root@HOST:/etc
[问题3]
# /usr/local/sbin/sshd
Missing privilege separation directory: /var/empty
[分析与解决]
# mkdir /var/empty
[问题4]
[root@localhost .ssh]# ssh -l root 192.168.167.132
[email protected]'s password:
Permission denied, please try again.
[分析与解决]
密码输入错误,重新连接尝试.
[问题5]
# ./ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Could not create directory '/root/.ssh'.
[分析与解决]
# ls /
bin etc linuxrc nfs sys var dev jffs2 lost+found proc tmpfs yaffs2 edwin lib mnt sbin usr
# cd /root
-sh: cd: can't cd to /root
# mkdir root
# cd /root
# mkdir .ssh
[问题6]
# /usr/local/sbin/sshd
Missing privilege separation directory: /var/empty
[分析与解决]
# ls /var
# mkdir /var/empty
# /usr/local/sbin/sshd
[问题7]
[root@localhost ~]# ssh 192.168.167.132
ssh: connect to host 192.168.167.132 port 22: Connection refused
[分析与解决]
注释 /etc/hosts.deny /etc/hosts.allow 中的限制部分.
net sshd stop
net sshd start
[问题9]
在客户端ssh到target后,用户帐户和密码验证通过,但是没有启动shell.
[分析与解决]
查看日志,发现有:PTY allocation request failed on channel 0
1.rm -rf /dev/ptmx
2.mknod /dev/ptmx c 5 2
3.chmod 666 /dev/ptmx
4.umount /dev/pts
5.rm -rf /dev/pts
6.mkdir /dev/pts
7.mount /dev/pts
[问题10]
客户端连接卡住,无法连进.
[分析与解决]
有可能是cyg维护死进程太多,此为cyg的BUG,用有权限的账号连入系统:
killall -9 bash
killall -9 sshd
net stop sshd
net start sshd
[问题11]
ssh 显示已经脸上,但马上断开.
[分析与解决]
查看当前用户 /etc/password 里shell的设置是否正确.
查看 /var/ 目录权限是否足够,包括所有者权限和文件权限.
查看当前用户的家目录是否设置正常,权限是否足够.
[问题12]
sshd 服务无法启动
[分析与解决]
$ net start sshd
发生系统错误 1069。
由于登录失败而无法启动服务。
-- 这是由于用户密码输入错误导致的,以后更改用户后sshd也可能发生这个问题,在 services.msc 里的登录标签里更改用户设置即可!
$ net start sshd
CYGWIN sshd 服务正在启动 .
CYGWIN sshd 服务已经启动成功。
事件 ID ( 0 )的描述(在资源( sshd )中)无法找到。
本地计算机可能没有必要的注册信息或消息 DLL 文件来从远程计算机显示消息。
您可能可以使用 /AUXSOURCE= 标识来检索词描述;查看帮助和支持以了解详细信息。
下列信息是事件的一部分: sshd: PID 2784: fatal: setreuid 1003: Permission denied.
-- 出现这种情况,需要重新安装服务.
net stop sshd
ssh-host-config
原文链接:http://blog.csdn.net/acanoe/article/details/7853017
编译器arm-linux-gcc和arm-none-linux-gnueabi-gcc成功。
在移植到友善2440的时候很容易,因为他4.3.2交叉编译器等库文件做等好。但是在移植到天漠devkit8000时,遇到非常多的问题。一个月之前遇到问题没有找到-lgcc_s的问题一直没有解决,以致后来非常影响开发进度。最近决心解决这个问题,在google上查到没有找到lxx其实时没有找到libxxx.so,然后与友善2440比较了下,发现果真是arm-none-linux-gnueabi/libc/lib下缺少libgcc_s.so。最后一步问题总结是我编译的时候遇到等所有问题,后一一化解,成功移植。所以,如果你在编译等时候出错,查看最后的问题总结,应该可以找到答案。
步骤:
1.下载源码包,地址如下:
openssh http://www.openssh.com/portable.html2.交叉编译
创建工作目录:
#mkdir /work # mkdir /work/lib -----〉共享库目录,通过nfs挂载
# mkdir /work/ssh -----〉工作目录
# cd /work/ssh
# mkdir compressed install source -----〉compressed 用于存放源码包
-----〉Install 软件安装目录
-----〉Source 源码包解压目录
#mv tarpakgs/openssh-4.6p1.tar.gz /work/ssh/compressed
#mv tarpakgs/openssl-0.9.8e.tar.gz /work/ssh/compressed
#mv tarpakgs/zlib-1.2.3.tar.gz /work/ssh/compressed
解压安装包:
# cd /work/ssh/compressed/ 交叉编译 zlib:
# cd /work/ssh/source/zlib-1.2.3
# ./configure --prefix=/work/ssh/install/zlib-1.2.3
# vim Makefile
CC=arm-none-linux-gnueabi-gcc
AR=arm-none-linux-gnueabi-ar rc
CPP =arm-none-linux-gnueabi-gcc -E
LDSHARED=arm-none-linux-gnueabi-gcc
# make
# make install
交叉编译openssl
# cd /work/ssh/source/openssl-0.9.8e
# ./Configure --prefix=/work/ssh/install/openssl-0.9.8e os/compiler:arm-none-linux-gnueabi-gcc
# make
# make install
3.操作目标板
3.1确保目标板上有以下目录,若没有,则新建:
/usr/local/bin/3.2从PC机上将以下文件拷贝到目标板Linux系统中
PC机 /work/ssh/source/openssh-4.6p1/ 目录下的
scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan 拷贝到目标板/usr/local/bin
moduli ssh_config sshd_config拷贝到目标板 /usr/local/etc
sftp-server ssh-keysign 拷贝到目标板 /usr/local/libexec
sshd 拷贝到目标板 /usr/local/sbin/
3.3生成Key文件
在PC机 /work/ssh/source/openssh-4.6p1/ 目录下运行:
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_host_*_key这3个文件copy到目标板的 /usr/local/etc/目录下
3.4修改目标板passwd文件。
在/etc/passwd 中添加下面这一行
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
4.测试
在目标板上运行:主机上:
#ssh root@192.168.0.34(开发板的ip)
然后输入开发板的root密码就就可以了。
//root密码就是你开发板上root的密码,如果之前root没有密码,需要重新设置,用passwd root,然后输入密码即可。
登录成功后如下图:
问题总结
通常,在linux中使用ssh的时候,如果出现这个错误,建议首先去查看log。
ubuntu的ssh的log记录在/var/log/auth.log
The authenticity of host '192.168.0.110 (192.168.0.110)' can't be established. RSA key fingerprint is a3:ca:ad:95:a1:45:d2:57:3a:e9:e7:75:a8:4c:1f:9f. Are you sure you want to continue connecting (yes/no)?当选择接受,就会将该主机的公钥追加到文件 ~/.ssh/known_hosts 中。当再次连接该主机时,就不会再提示该问题了。 如果因为某种原因(服务器系统重装,服务器间IP地址交换,DHCP,虚拟机重建,中间人劫持),该IP地址的公钥改变了,当使用 SSH 连接的时候,会报错:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is e9:0c:36:89:7f:3c:07:71:09:5a:9f:28:8c:44:e9:05. Please contact your system administrator. Add correct host key in /home/jiangxin/.ssh/known_hosts to get rid of this message. Offending key in /home/jiangxin/.ssh/known_hosts:81 RSA host key for 192.168.0.110 has changed and you have requested strict checking. Host key verification failed.上面的警告信息说的是:
Host * StrictHostKeyChecking no或者在 ssh 命令行中用 -o 参数
$ ssh -o StrictHostKeyChecking=no 192.168.0.110
$ ssh -o UserKnownHostsFile=/dev/null 192.168.0.110 The authenticity of host '192.168.0.110 (192.168.0.110)' can't be established. RSA key fingerprint is e9:0c:36:89:7f:3c:07:71:09:5a:9f:28:8c:44:e9:05. Are you sure you want to continue connecting (yes/no)?看,提示信息由公钥改变中断警告,变成了首次连接的提示。 和之前提到的 StrictHostKeyChecking 配置配合使用,则不再有任何警告出现了:
$ ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null 192.168.0.110 Warning: Permanently added '192.168.0.110' (RSA) to the list of known hosts. [email protected]'s password:如果设置了无口令 SSH 登录(即通过客户端公钥认证),就可以直接连接到远程主机。这是基于 SSH 协议的自动化任务常用的手段。
watch -n 1 du -sh /media