0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSLからraspberry piのアドレスを調べるのは、やっぱりpowershellが簡単でした。Ansibleにも入れても大丈夫

Last updated at Posted at 2022-02-26

WSLからRaspberry Piのアドレスを調べる

Windows10で実行しているWindows Subsystem for linuxからraspberry piにアクセスするのに、Windowsのping.exeを呼び出してraspberrypi.localのアドレスを調べてからSSH接続としていました。ちょっと不便

ping.exeを使う
$ ping.exe -4 raspberrypi.local

raspberrypi.local [192.168.0.7]に ping を送信しています 32 バイトのデータ:
192.168.0.7 からの応答: バイト数 =32 時間 =5ms TTL=64
(以下省略)

raspberry piのアドレスを調べるのはpowershellでできるとあったので、powershellで試したら簡単でした。

powershell.exeを使う
$ powershell.exe "(Resolve-DnsName -type A raspberrypi.local).IP4Address"
192.168.0.7
$

これならちょくせすSSH接続も引数に渡せばよいので、下記のようにしました。HostKeyAliasは、raspberry piのアドレスが変わっても困らないようにつけています。おすすめです

powershell.exeを使う
$ ssh -o HostKeyAlias=raspberrypi.local -l pi $(powershell.exe "(Resolve-DnsName -type A raspberrypi.local).IP4Address")
Password: 
(以下省略)

powershellの結果の開業がCRLFになって、エラーになってしまいました。とりあえずpowershellの結果から削除するように sed 's/\s*//g' tr -d '\r' を追加しました。

powershell.exeを使う
$ ssh -o HostKeyAlias=raspberrypi.local -l pi $(powershell.exe "(Resolve-DnsName -type A raspberrypi.local).IP4Address" |  tr -d '\r')
Password: 
(以下省略)

Ansibleにも入れても大丈夫

ansibleでもpowershellでraspberry piのアドレスを調べてるようにするのもできましたので、参考に載せておきます。
hosts: localhostでraspberry piのアドレスを調べてadd_hostraspberrypiを登録しています。
hosts: raspberrypiは、初期パスワードの変更とNTPやtimezoneの設定してパッケージをインストールするとこまでしか書いていません。
初期パスワードの変更は、一回デフォルトに変更して接続を試しているので二回目だとエラーになるためignore_unreachable: yesを入れています。
ansibleは、2.11.8を使っています。

Raspberry pi の新しいOSは、SDカードのイメージを作成するときに、いろいろ設定ができるように拡張されました。
また、デフォルトユーザもpiではなくなっています。
この記事はあまり参考にならないです。
下記当たりを参考にしてください
https://www.raspberrypi.com/documentation/computers/getting-started.html#advanced-options
https://www.raspberrypi.com/documentation/computers/configuration.html#setting-up-a-headless-raspberry-pi

ansible.cfg
[ssh_connection]
ssh_args = -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
main.yaml
- hosts: localhost
  gather_facts: no
  pre_tasks:
    - name: Find IP Address of Raspberry Pi
      shell: |
        powershell.exe "(Resolve-DnsName -type A raspberrypi.local).IP4Address"
      changed_when: False
      register: resolve
    - name: Show IP Address of Raspberry Pi
      debug:
        msg: '{{ resolve.stdout }}'
    - name: Add Raspberry Pi to hosts
      add_host:
        hostname: raspberrypi
        ansible_ssh_host: '{{ resolve.stdout }}'
        ansible_user: pi
        # New password
        ansible_password: 123456
        ansible_python_interpreter: python3
      changed_when: False

- hosts: raspberrypi
  gather_facts: no
  become: true
  handlers:
    - name: Restart timesyncd
      systemd:
        name: systemd-timesyncd
        state: restarted
        daemon_reload: yes
  tasks:
    - name: Change password from default password
      block:
        - name: Set default password to sshpass
          set_fact:
            # Default password
            ansible_ssh_pass: raspberry
        - name: Try changing pi user password (Ignore if unreachable)
          shell: |
            echo '{{ ansible_user }}:{{ ansible_password }}' | chpasswd
          ignore_unreachable: yes
        - set_fact:
            ansible_ssh_pass: null
    - name: NTP settings for timesyncd
      lineinfile:
        dest: /etc/systemd/timesyncd.conf
        regexp: '^#?NTP='
        line: 'NTP=ntp.nict.jp'
      notify:
        - Restart timesyncd
    - name: Set timezone to tokyo
      timezone:
        name: Asia/Tokyo
    - name: Install packages
      apt:
        package:
          - i2c-tools
          - python3-pip

新しいパスワードとして設定している123456は一番よく使われているパスワードなので参考にしないでください

ansibleの実行(ワーニングがでますが無視している)
$ ansible-playbook main.yaml
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match
'all'

PLAY [localhost] *******************************************************************************************************

TASK [Find IP Address of Raspberry Pi] *********************************************************************************
ok: [localhost]

TASK [Show IP Address of Raspberry Pi] *********************************************************************************
ok: [localhost] => {
    "msg": "192.168.0.7"
}

TASK [Add Raspberry Pi to hosts] ***************************************************************************************
ok: [localhost]
(以下省略)
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?