前言

原创文章,转载引用务必注明链接。如有疏漏,欢迎斧正。

最近在试用Wyliodrin,安装过程中出现了两个问题,一是无法使用SSH登录到Edison;二是EDISON磁盘的问题。分别涉及到systemd和linux文件系统之/dev/loop的理解。

测试环境:Windows 7 64 bit,Xshell 5,WIFI,Intel Edison 最新固件

配置完成后无法通过SSH连接到开发板

图1 - Intel Edison 配置向导】可以看到此时设置了SSH密码,并连接到了无线网,理论上可以正常连接,根据群里其他人的反馈确实如此

但是我自己测试发现,无法通过SSH连接,串口连接正常(注意,会显示两个串口,试两次就ok了),网络连接正常,为了找问题,我们看一看22端口被谁占用了:

netstat -lnp

图2 - 系统端口开放情况】可以看到22被PID为1的init初始进程占用,这里可以以及后面佐证可以看到,Edison使用的Yocto Project使用systemd进行管理。之前在树莓派上使用过Raspbian,基于Debian Jessie,也是使用systemd管理,但是Yocto比Debian Jessie 使用systemd更彻底,类似Arch Linux。

解决问题以及探讨可能机制

经群友提醒,重新刷了一边固件,这次可以正常使用SSH登录了,但是22端口仍然被init占用,所以这里我们分析一下。

注意:

systemd入门教程推荐看阮一峰的博客,简洁明了:12

系统有没有安装SSH服务?

图3 - 系统情况】

图4 - JuiceSSH连接Edison】这里发现系统安装了openssh这个SSH程序,包括服务端和客户端,此外也开启了sshd服务。其中192.168.1.104为Edison地址,108为本机地址,看起来似乎是使用配置向导时配置的,这里起初以为被设置为仅可以使用特定主机、特定网络、本块Edison开发板才可以连接SSH,用手机试了一下,并非如此,其他设备也可以连接。

  • static:该配置文件没有[Install]部分(无法执行),只能作为其他配置文件的依赖

我们查看一下sshd@0-192.168.1.104:22-192.168.1.108:52281.service 里面写的什么:

systemctl cat sshd@0-192.168.1.104:22-192.168.1.108:52281.service

图5 - sshd配置文件】可以看到配置文件本体是sshd@.service,启动时执行的命令为/usr/sbin/sshd -i,依赖并在sshdgenkeys.service之后启动。具体请参看阮一峰的博客(二)以及金步国先生翻译的sshd手册

sshd -i:ssh以inetd方式运行;

来自: http://man.linuxde.net/sshd

StandardInput=socket,通过socket传入参数

inetd、socket 与 systemd

一般的启动都是直接写好参数然后让sshd后台运行,这里我们发现了一个参数-i,以及得知一个关键词inetd。继续查找资料,看到OpneBSD手册关于inetd的部分

DESCRIPTION

inetd should be run at boot time by /etc/rc (see rc(8)). It then listens for connections on certain internet sockets. When a connection is found on one of its sockets, it decides what service the socket corresponds to, and invokes a program to service the request. After the program is finished, it continues to listen on the socket (except in some cases which will be described below). Essentially, inetd allows running one daemon to invoke several others, reducing load on the system.

大致可以这样理解,inetd相当于一个总管,它监听网络上的socket,并根据其特征来分发到对应的后台服务,通常情况下,处理完一个socket之后它会继续监听。这样的好处是仅通过一个守护进程(daemon)来调用多个服务,可以减少系统负载,但是随之可能会导致效率有所降低。

这里猜测init进程监听22端口,并将接收到的网络socket根据特征分发到制定后台服务,其中之一就是sshd(openssh服务器)。这里理解有误,希望大家指正。

观察一下Linux系统启动树:

systemd-cgls

【Linux系统启动树】systemd-cgls命令可以树形递归显示 Linux 控制组结构层次,这里看到init进程后会启动sshd服务。

总结

本文从探讨Edison开启SSH服务的方式入手,主要介绍了systemd机制以及systemctl的部分用法。openssh通过inetd方式开启服务,由init进程监听22端口,将SSH连接请求传递给sshd,与传统直接让sshd监听22端口的方式不同,可能是因为还有其他服务会用到22端口。

Intel Edision —— 从SSH无法连接到systemd的更多相关文章

  1. Intel Edision —— 上电、基本设置与系统初探

    前言 原创文章,转载引用务必注明链接.如有疏漏,欢迎斧正. Intel的文档其实挺清楚了,坛子上很多人把文档又详细复述一边,私以为一篇就够了其他的跟着文档走一遍也挺好的...俗一把使用过程顺手记录下来 ...

  2. Navicat---使用SSH远程连接到MySql,报错80070007: SSH Tunnel: Server does not support diffie-hellman-group1-sha1 for keyexchange

    尝试使用Navicat远程连接到我在阿里云服务器上的MySql,通过SSH. 但是报错: 80070007: SSH Tunnel: Server does not support diffie-he ...

  3. 使用SSH工具连接到MySQL

    在SSH中查看MySQL数据信息 格式为:mysql -h主机地址 -u用户名 -p用户密码 -P端口号 -D数据库名称 例如: mysql -uroot -p123456 -h192.168.1.1 ...

  4. Intel Edision —— 开发环境选择一贴通

    前言 原创文章,转载引用务必注明链接.如有疏漏,欢迎斧正. 使用Intel开发板设置工具配置好之后,会自动跳转到集成开发环境(integrated development environment,ID ...

  5. ssh远程连接到Ubuntu

    1.ubuntu首先得安装ssh sudo apt-get install openssh-server 2.启动ssh sudo /etc/init.d/ssh start 3.检查是否开启 ps ...

  6. Laradock 如何通过 ssh 方式连接到 workspace

    用 docker-compose exec workspace bash 方式可以进入容器,但是还是在 xshell 终端连接比较方便.   在网上也没找到方法,其实可以通过密钥的方式连接.记录一下仅 ...

  7. REDHAT一总复习1 ssh配置 禁用root用户SSH连接

    生成SSH公钥 $ ssh-keygen 生成的公钥安装到指定的服务器上,这里安装到desktop0上的student账户 $ ssh-copy-id desktop0 $ su - 禁用root用户 ...

  8. Ubuntu安装SSH服务

    1 SSH服务 Ubuntu默认并没有安装ssh服务,如果通过ssh远程连接到Ubuntu,需要自己手动安装ssh-server(openssh-server). 1.1 检测是否安装SSH服务 出现 ...

  9. Telnet、SSH和VNC

    以下内容出自<Red Hat Linux服务器配置与应用>第17章:Telnet.SSH和VNC服务的配置与应用.俗话说:“前人栽树,后人乘凉”.我懒得再照书本打一遍了,就从这里拷贝了一份 ...

随机推荐

  1. 【支付宝支付】扫码付和app支付,回调验证签名失败问题

    在检查了参数排序,编码解码,文件编码等问题后,发现还是签名失败,最后找出原因: 扫码付和app支付采用的支付宝公钥不一样   Pid和公钥管理里面:   开放平台密钥界面和开放平台应用界面的密钥应该一 ...

  2. Linux poll机制

    1.用户空间调用(参考 poll(2) - Linux man page) int poll(struct pollfd *fds, nfds_t nfds, int timeout); it wai ...

  3. leetcode刷题——动态规划

    知识点 专题-B-动态规划 题目 斐波那契数列 矩阵路径 数组区间 分割整数 最长递增子序列 最大连续子序列和 最长公共子序列 最长回文子序列 最长公共子串 最长回文子串 背包 题解 CS-Notes ...

  4. js 百度云搜索框

    // ==UserScript==// @name 百度云插件+APIKey// @namespace // @version 5.0.2.1// @description 在百度云网盘的页面添加一个 ...

  5. ecplise建立模拟器,安装apk文件

    方法一,把所要安装的apk,例xxx.apk拷贝到sdk下的adb的路径下,也就是和adb在同一个文件夹,比如我的是D:\Program Files\Android\sdk\platform-tool ...

  6. IPy模块--IP地址处理

    Python之实用的IP地址处理模块IPy 实用的IP地址处理模块IPy 在IP地址规划中,涉及到计算大量的IP地址,包括网段.网络掩码.广播地址.子网数.IP类型等 别担心,Ipy模块拯救你.Ipy ...

  7. Python第三方库之openpyxl(6)

    Python第三方库之openpyxl(6) 折线图 折线图允许在固定轴上绘制数据,它们类似于散列图,主要的区别在于,在折线图中,每个数据序列都是根据相同的值绘制的,不同的轴可以用于辅助轴,与条形图类 ...

  8. USACO Hamming Codes

    题目大意:求n个两两hamming距离大于等于d的序列,每个元素是一个b bit的数 思路:仍然暴力大法好 /*{ ID:a4298442 PROB:hamming LANG:C++ } */ #in ...

  9. 刷题总结——支线剧情(bzoj3876费用流)

    题目: [故事背景] 宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等.不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧情.这些游戏往往 都有很多的支线剧情,现在JYY想花费最 ...

  10. 【leetcode dp】132. Palindrome Partitioning II

    https://leetcode.com/problems/palindrome-partitioning-ii/description/ [题意] 给定一个字符串,求最少切割多少下,使得切割后的每个 ...