web-dev-qa-db-ja.com

buildrootでビルドされた組み込みLinuxでブート後にsshdが起動しない?

Raspberry Piのbuildrootのデフォルト設定を使用して最小インストールを実行しました。また、opensshとopensslをmenuconfigから選択しました。

Package Selection for the target  --->
    [*] Networking  --->
        [*]   openssh
    [*] Library -->
        Crypto -->
            -*-   openssl
            [*]      openssl binary
            [ ]      openssl additional engines

Piを192.168.0.14に割り当てましたが、SSHできませんでした。 nmapはPiのすべてのポートが閉じていることを示し、Piをまったく表示しないこともあります。これは奇妙なことに、nmapがスキャンするたびにLINK LEDが点滅するので、正常に接続されていると思います。

通常、スタートアップサービスはupdate-rc.dまたはsystemctlを使用して管理しますが、SSH経由でのみPiに接続できます。HDMIポートもシリアルポートもありません。手動で設定する方法がわかりません。 /etc/init.d/S50sshdはPiに存在するので、ブート後にsshを開始する必要がありますね。

関連する設定ファイル: /etc/ssh/sshd_config/etc/init.d/S50sshd

SDカードに関連するログが見つかりませんでした。

編集:

コメントからのX Tianの提案に従って、ログを取得することができました。記録された唯一のものは /var/log/messages でした。関連部分:

Jan  1 00:00:02 buildroot auth.info sshd[75]: Server listening on 0.0.0.0 port 22.

Sshdが起動しているようです。問題は何か別のようです。

root@pc:~# ssh 192.168.0.14
ssh: connect to Host 192.168.0.14 port 22: Connection refused
root@pc:~# ping 192.168.0.14
PING 192.168.0.14 (192.168.0.14) 56(84) bytes of data.
64 bytes from 192.168.0.14: icmp_seq=1 ttl=64 time=32.8 ms
64 bytes from 192.168.0.14: icmp_seq=2 ttl=64 time=55.6 ms
64 bytes from 192.168.0.14: icmp_seq=3 ttl=64 time=79.1 ms
^C
--- 192.168.0.14 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 32.808/55.871/79.140/18.917 ms
root@pc:~# exit
debian@pc:~ nmap -F 192.168.0.14
Starting Nmap 6.47 ( http://nmap.org ) at 2015-05-30 03:25 BRT

Nmap scan report for 192.168.0.14
Host is up (0.085s latency).
All 100 scanned ports on 192.168.0.14 are closed

面白いのは、Piをシャットダウンしてイーサネットケーブルを取り外した後も、そのアドレスにpingを送信できたということです。今、私は本当に迷っています。 tarしてアップロードするのが最善だと思いました /の下のすべてのファイル 誰かがどこを見ればよいか知っている場合(これは本番環境ではなく、パスワードと秘密鍵は使用されておらず、設定されています)テスト目的のため)。

6
Alex

あなたの分析では:

Piをシャットダウンしてイーサネットケーブルを切断した後も、そのアドレスにpingを実行できました

これは重複IP症状です。つまり、同じIPアドレスを持つ2つ(またはそれ以上)のデバイスがあります。

次の2つの方法を使用して、デバイスのMACアドレスを確認する必要があります。

デバイスの1つでifconfigを実行し、HWaddrフィールドを確認します。

root@rpi# ifconfig
eth0      Link encap:Ethernet  HWaddr B8:27:EB:BE:1C:67  
          inet addr:192.168.1.11  Bcast:192.168.1.255  Mask:255.255.255.0

リモートコンピューターの1つで、arp -a <device IPaddr>etherフィールド `を確認します。

jml@pc$ arp -a 192.168.1.11
? (192.168.1.11) at b8:27:eb:be:1c:67 [ether] on eth0

私の例では、両方のMACアドレスが同じです。そうでない場合は、ネットワークのすべてのIPアドレスをチェックする必要があります(静的および動的)。

ほとんどの場合、この問題は、他の静的アドレスで使用されるDHCPサーバーの設定ミスが原因です。たとえば、DHCPサーバーに192.168.1.10および192.168.1.20、あなた必須ではないこの範囲内に他の静的アドレスがあります。

Piの問題に戻ります。 DHCP範囲にない新しいIPアドレスを割り当ててみてください。または、DHCPサーバーを再構成して、静的アドレス用のスペースを増やします。

2
jml

Sshd_configは、rootとしてログインしている空のパスワードを許可しておらず、rootアカウントにはパスワードが設定されていません。

ssh_configを変更する

#PermitEmptyPasswords no

PermitEmptyPasswords yes

ログの詳細情報を取得するには、sshのログレベルを上げてみてください

から

#LogLevel INFO

LogLevel DEBUG

この答え でsshdログレベルの変更についてさらに読んでください。

2
X Tian

/etc/init.d/S50sshdはPiに存在するので、ブート後にsshを開始する必要がありますね。

ではない正確に。 /etc/init.d/S50sshdファイルが使用されますが、呼び出されるのは適切なランレベルフォルダーからのファイルです。 update-rc.dを実行すると、必要な/etc/rc?.d/フォルダーにinit.dのS50sshdへのシンボリックリンクが作成されます。

現在のステータスは次の方法で表示できます。

ls etc/rc*.d/*ssh*

(私はそれがランレベル2、3、4および5に存在することを期待します)

そしてそれらを作成します:

ln -s /etc/init.d/ssh /etc/rc2.d
ln -s /etc/init.d/ssh /etc/rc3.d
ln -s /etc/init.d/ssh /etc/rc4.d
ln -s /etc/init.d/ssh /etc/rc5.d
0
Ángel

Buildrootでもこの問題が発生しました。/var/empty権限が原因で、etc/init.d/S50sshdにもかかわらず、sshdが起動に失敗していることがわかります(ヒントは、コンソールの出力を注意深く見たものです)

Starting sshd: /var/empty must be owned by root and not group or world-writable.

# ls -l /var/                                                                                                                                                                                               
total 0                                                                                                                                                                                                     
..                                                                                                                                 
drwxr-xr-x    2 sshd     sshd            40 Jan  1 00:09 empty  

私の解決策はそれを削除して再作成することでした(私はすでにルートでした)

# ls -l /var/                                                                                                                                                                                               
total 0                                                                                                                                                                                                     
..                                                                                                                                 
drwxr-xr-x    2 root     root            40 Jan  1 00:09 empty  

次に、sshdを手動で起動します。

0
Vineet Gupta

ルーターなし+通常のイーサネットケーブル+ RPI 2 + Buildroot 2016.05 + Ubuntu 16.04 Host

この問題を2つの部分に分けた後、うまくいきました。

  1. raspbianで動作するイーサネットSSHと直接ケーブル接続(すでに適切に設定されたsshdデーモンが既に実行されている)を取得 https://raspberrypi.stackexchange.com/a/54394/33424

  2. qEMU + buildrootで適切なsshd構成を行う方法を学ぶ: https://stackoverflow.com/a/39301480/895245

    実際のボードでは、もちろん/etc/ssh/sshd_configを変更するためのQEMUウィンドウがないため、次のいずれかを行う必要があります。

    • フラッシュする前にホスト上で変更(BR2_ROOTFS_OVERLAYoutput/images/sdcard.imghttps://askubuntu.com/a/496576/52975 でマウント、またはoutput/targetでプレイ)
    • UART TTL経由で接続します。ボード上でbuildrootディストリビューションをデバッグするための最良の方法であるため、遅かれ早かれこれを機能させる必要があります。

.configは、単にraspberrypi2_defconfigを有効にしたmake menuconfig + opensshです。

次にちょうど:

ssh "root@$(cat /var/lib/misc/dnsmasq.leases | cut -d ' ' -f 3)"

画像のTTLのみが電力に使用されます。