2020年10月31日土曜日

RaspberryPi にsshdとSambaサーバの設定をする


1.sshdとSambaを設定する

1.1 sshd/SSH ネットワーク経由でRasberryPiが操作できる

sshdを設定するとWindowsパソコンからターミナルで接続できるようになり、設定作業がWindowsパソコンからできます。さらに設定した内容が記録としても残せるので、後で操作を確認したりもできますし、なにより画面が広くアプリが揃ったWindowsパソコンで調べた結果をコピペして設定することができ作業効率が格段と高まります。接続にはSSHに対応したターミナルソフトを使用しますが、Windows10では標準でSSHクライアント機能をもつようになったので、コマンドプロンプトからSSH接続でき非常に便利になりました。

1.2 Sambaファイル共有とは

Sambaを設定するとWindowsパソコンとファイル共有ができるので、Raspberry Piへプログラムを送ったり、RasberryPiで収集した結果をパソコンに持ってきたりが簡単にできるようになります。

2. sshdの設定 WindowsパソコンからSSHで接続できるようにする

2.1 RasbberryPi OSのSSHDの有効化

RasbberryPi の画面上で設定する方法とターミナルからコマンドを入力して設定する方法とがあります。

2.1.1 RasbberryPi の画面上で設定する

左上のラズベリーマークから[設定][Raspberry Pi の設定]をクリック
[インターフェイス]タブからSSH(●)有効をクリックします。
[OK]をクリックでSSHDが起動し他のPCからSSHで接続できます。

2.1.2 ターミナルで設定する 

左上のラズベリーマークの隣にある黒い■マークをクリックします。
次のようにコマンドを入力し有効化します。
$sudo su -
#cd /etc/ssh
#cp sshd_config sshd_config_org
#nano sshd_config

sshd_configファイルが開きます。次の箇所の#を削除します。
[sshd_config]
 :
Port 22
 :
PasswordAuthentication yes

Port 22 を開きます #を削除します
PasswordAuthentication を有効にします #を削除します
キーボードのコントロールを押しながらO(オー)でファイル上書き
キーボードのコントロールを押しながらXで編集終了

最後にSSHDサーバーを有効化し再起動します
#/etc/init.d/ssh enable
#/etc/init.d/ssh restart

2.2 IPアドレスを固定する

各種ネットワークサーバーをRaspberry Piで動作させるのに、IPアドレスが毎回変わるようだと接続が面倒になります。そのためIPアドレスを固定します。いろいろ調べたところIPアドレスの固定はDHCPClientDを使って固定する方法を推奨しているようなので、ここではその方法に習って設定します。
左上のラズベリーマークの隣にある黒い■マークをクリックします。
次のようにコマンドを入力します。

$sudo su -
$ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (ローカルループバック)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.11 netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::2f42:xxxx:xxxx:xxxx  prefixlen 64  scopeid 0x20<link>
        inet6 2405:6587:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx  prefixlen 64  scopeid 0x0<global>
        ether b8:27:eb:12:41:0d  txqueuelen 1000  (イーサネット)
        RX packets 18772  bytes 4701790 (4.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1649  bytes 258988 (252.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


#cd /etc
#cp dhcpcd.conf dhcpcd.conf.org
#nano dhcpcd.conf

パソコンでも確認してみます。Windows10のコマンドプロンプトを開きます。
スタートボタン田の右の虫眼鏡マークよこに
cmd
と入力しキーボードEnterを押します。
ipconfigとarp -a として確認します。

C:\Users\Owner>ipconfig
Windows IP 構成
イーサネット アダプター 192.168.0.12:
   接続固有の DNS サフィックス . . . . .: flets.jp
   IPv6 アドレス . . . . . . . . . . . .: 2405:6587:xxxx:xxxx:xxxx:xxxx:xxxx
   一時 IPv6 アドレス. . . . . . . . . .: 2405:6587:xxxx:xxxx:xxxx
   一時 IPv6 アドレス. . . . . . . . . .: 2405:6587:xxxx:xxxx:xxxx:xxxx:xxxx
   一時 IPv6 アドレス. . . . . . . . . .: 2405:6587:xxxx:xxxx:xxxx:xxxx
   リンクローカル IPv6 アドレス. . . . .: fe80::4989:xxxx:xxxx
   IPv4 アドレス . . . . . . . . . . . .: 192.168.0.12
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .: fe80::225:xxxx
                                          192.168.0.1

C:\Users\Owner>arp -a

インターフェイス: 192.168.0.52 --- 0xf
  インターネット アドレス 物理アドレス           種類
  192.168.0.1           00-XX-XX-XX-XX-XX-XX-da     動的
  192.168.0.3           34-XX-XX-XX-XX-XX-XX-be     動的
  192.168.0.5           84-XX-XX-XX-XX-XX-XX-50     動的
  192.168.0.8           00-XX-XX-XX-XX-XX-XX-f7     動的
  192.168.0.12          00-XX-XX-XX-XX-XX-XX-96     動的
  192.168.0.18          00-XX-XX-XX-XX-XX-XX-9f     動的
  192.168.0.65          38-XX-XX-XX-XX-XX-XX-d3     動的
  192.168.0.66          d4-XX-XX-XX-XX-XX-XX-9e     動的
  192.168.0.67          cc-XX-XX-XX-XX-XX-XX-c4     動的
  192.168.0.73          dc-XX-XX-XX-XX-XX-XX-cc     動的
  192.168.0.74          a8-XX-XX-XX-XX-XX-XX-9e     動的
  192.168.0.81          b8-XX-XX-XX-XX-XX-XX-0d     動的
  192.168.0.87          00-XX-XX-XX-XX-XX-XX-64     動的
  192.168.0.255         ff-XX-XX-XX-XX-XX-XX-ff     静的
  224.0.0.22            01-XX-XX-XX-XX-XX-XX-16     静的
  224.0.0.251           01-XX-XX-XX-XX-XX-XX-fb     静的
  224.0.0.252           01-XX-XX-XX-XX-XX-XX-fc     静的
  239.255.255.250       01-XX-XX-XX-XX-XX-XX-fa     静的
  239.255.255.253       01-XX-XX-XX-XX-XX-XX-fd     静的
  255.255.255.255       ff-XX-XX-XX-XX-XX-XX-ff     静的


このWindows10パソコンのIPアドレスは192.168.0.12です。
デフォルトゲートウェイ(ルーターのアドレス/インターネットへの出口)は
192.168.0.1です。

以上を踏まえ、次のような行を探し行頭の#を削除しIPアドレスを設定します。
このとき事前に調べたIPアドレスを参考に修正します。
[dhcpcd.conf]
interface wlan0
static ip_address=192.168.0.126/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1
 
interface wlan0
このwlan0は、ifconfigで得られた名前です。RaspberryPiOSのWifiはこの名前です。
static ip_address=192.168.0.126/24
この192.168.0としているところはWindows10パソコンの値を参考にして同じにします。
static ip_address最後の3桁126としているところは、120~126とか220~250ぐらいならだいたい他の機器で使用されておらず問題が起こりにくいのですが、この番号をどの番号にするかはルーターの設定状況と接続機器によって変わります。
先の arp -a で、同じ番号が無いことを確認し、なければたいがい問題ありません。もしあれば別の番号に変更します。
この番号の選定について、さらに詳しくはIPアドレスとDHCPについて調べてみてください。
static routers=192.168.0.1
static domain_name_servers=192.168.0.1
はデフォルトゲートウェイの値を使います。

以上で編集は終了です。
キーボードのコントロールを押しながらO(オー)でファイル上書きし、
キーボードのコントロールを押しながらXで編集終了します。
最後に設定を反映させるために再起動します。

#reboot

以下RaspberryPiのIPアドレスは192.168.0.126として説明いたしますが、適宜環境に合わせて読み替えてください。

2.3 Windows10からSSHで接続する

Windows10 April 2018 UpdateよりSSH接続が正式対応しました。今までだとSSH接続用にPuttyやTeraTermやRLoginといったソフトのインストールが必要だったところが、Windowsに標準搭載されたことで、すぐにSSH接続できるようになりました。
Windows10のコマンドプロンプトを開きます。
スタートボタン横の検索窓からcmdと入力します。

コマンドプロンプトが開きます



以下次のように入力します。
C:\Users\Owner>ssh pi@192.168.0.126

@以下の192.168.0.126は先のページのdhcpcd.confで設定したRasberryPiのIPアドレスです。

Are you sure you want to continue connecting (yes/no)? yes

yesと入力します。

pi@192.168.0.126's password:

RasberryPiOSの初期設定で設定したパスワードを入力します。

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Oct 31 06:43:07 2020
pi@raspberrypi:~ $

このような表示が出てくればSSHでの接続が成功しています。

3 Sambaの設定

以下のURLの記事を参考にいたしました。
リモートワークで使えるRaspberry Piで作るファイル共有サーバhttps://qiita.com/Brutus/items/d3b3caee982852587b77

3.1 Sambaのインストール

$sudo su -
#apt-get install -y samba samba-common-bin  

DHCP から WINS 設定を使うように smb.conf を変更しますか?
と表示が出たら<いいえ>を選んでEnter

3.1.1 共有フォルダの作成

# mkdir /var/samba
共有フォルダへアクセスするユーザの作成
# useradd smbuser

3.1.2 パスワードの設定

他のパソコンから接続するためのパスワードを設定します。
これも、後で使用するので必ず控えてください。
# passwd smbuser
新しいパスワード: ********
新しいパスワードを再入力してください: ********
passwd: パスワードは正しく更新されました

3.1.3 権限変更

# chown smbuser:smbuser /var/samba/
Sambaのアクセス設定
# pdbedit -a smbuser
new password: ********
retype new password: ********
Unix username:        smbuser
NT username:
 :

3.1.4 共有フォルダの公開設定

# cp -p /etc/samba/smb.conf /etc/samba/smb.conf.org
# nano /etc/samba/smb.conf

/etc/samba/smb.confファイルに以下を追記する。
pi126の箇所は、先の固定IPを割り当てたものを使用しています。

[pi126]
   comment = Share Folder
   browseable = yes
   path = /var/samba
   writable = yes
   valid users = smbuser
   force user = smbuser

3.1.5 Sambaの再起動

動作状態の確認
# service smbd status
smbd.service - Samba SMB Daemon
   Loaded: loaded (/lib/systemd/system/smbd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-10-31 10:40:12 JST; 26min ago
     Docs: man:smbd(8)
           man:samba(7)
           man:smb.conf(5)


Active: active (running) となっていれば動作中です。
再起動します。
# service smbd restart


pdbedit
pdbeditコマンドは、SAM データベース (Samba ユーザーのデータベース) を管理します。
SAM データベース内に保持されるユーザーアカウントを管理するために利用され、 root だけが実行できます。

pdbeditを使用することで、ユーザーアカウントの追加、ユーザーアカウントの削除 、ユーザーアカウントの変更、ユーザーアカウントの一覧表示、ユーザーアカウントのインポートの操作が行えます。

データベースのユーザーアカウントを一覧表示
$ sudo pdbedit -L
smbuser:1001:

データベースのユーザーアカウントを一覧表示(詳細)
$ sudo pdbedit -L -v
---------------
Unix username:        smbuser
NT username:          
Account Flags:        [U          ]
User SID:             S-1-5-21-1950213270-485466186-3954191822-1000
Primary Group SID:    S-1-5-21-1950213270-485466186-3954191822-513
Full Name:            
Home Directory:       \\raspberrypi01\smbuser
HomeDir Drive:        
Logon Script:         
Profile Path:         \\raspberrypi01\smbuser\profile
Domain:               RASPBERRYPI01
Account desc:         
Workstations:         
Munged dial:          
Logon time:           0
Logoff time:          never
Kickoff time:         never
Password last set:    水, 25  3月 2020 15:11:40 JST
Password can change:  水, 25  3月 2020 15:11:40 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
ファイル共有サーバのアクセス
Raspberry Pi側でファイアウォールを有効にしている場合は、Sambaで使用する通信が許可されていることを前提とし、WindowsとMacそれぞれのアクセス方法について記載しています。

3.1.6 共有フォルダーにユーザーpiを追加する

このままではユーザーsmbuserしかファイルの操作ができません。smbuserは外からアクセスしてきたユーザーとなるので、自動ログインするユーザーpiにも権限を与えなければ、この共有フォルダーを使用できません。
ユーザーpiをsmbuserグループに追加します。
#adduser pi smbuser
ユーザ `pi' をグループ `smbuser' に追加しています...
ユーザ pi をグループ smbuser に追加
完了。

所属グループを確認するには
#cat /etc/group
:
systemd-coredump:x:996:
sambashare:x:116:
smbuser:x:1001:pi

続いてこのままでは未だに/var/sambaフォルダーはユーザーsmbuserからしか読み書きできません。ユーザーpiは読み込みのみです。そのため、ユーザーpiもこのフォルダーへの読み書きできるようにするにはフォルダーのアクセス権限を変更します。
変更前のアクセス権限の確認。
#ls -l /var
drwxr-xr-x  2 smbuser smbuser      4096 10月 31 10:43 samba

グループに所属するユーザーにも書き込み権限を与える
#chmod 775 /var/samba

変更後のアクセス権限の確認
#ls -l /var
drwxrwxr-x  2 smbuser smbuser      4096 10月 31 10:43 samba
#exit
$cd /var/samba
$echo Hello > test.txt
-bash: test.txt: 許可がありません

いえいえ慌てなくても大丈夫です。RaspberryPiにログインし直します。
$exit
>ssh pi@192.168.0.126
$cd /var/samba
$echo Hello > test.txt
$ls -al
合計 12
drwxrwxr-x  2 smbuser smbuser 4096 10月 31 19:10 .
drwxr-xr-x 12 root    root    4096 10月 31 10:43 ..
-rw-r--r--  1 pi      pi         6 10月 31 19:10 test.txt
このようにtest.txtが作成できました。

3.2 Windowsで共有フォルダーを開く

Windows10でSambaにアクセスするためには、Samba(SMB)のクライアントが必要になります。
Windows 10の場合はSMB 1.0 が無効になっているため、以下の手順でSambaのクライアントを有効にします。以前にファイル共有の設定が終わっていれば以下の設定は必要ありません。が、一応確認されたほうが良いと思います。

コントロールパネルを開く


プログラムから、

[Windows の機能の有効化または無効化]を開く

SMB 1.0/CIFS ファイル共有のサポートを開き


[SMB 1.0/CIFS クライアント]にチェックを入れて、[OK]をクリックします。
以上でWindows10側のファイル共有の設定が終わりました。


Windows10でRaspberryPiの共有フォルダーを開いてみます。
エクスプローラーを開く。

一番下のネットワークからRASPBERRYPIがあればそれを開きます。
今回共有フォルダーにした[pi126]をダブルクリックします。

ユーザー名を先に登録したsmbuser
パスワード設定したものを入力し[OK]を押します。

もし、ネットワークに[RASPBERRYPI]が存在しなければIPアドレスを指定して開きます。
アドレスバーに\\192.168.0.126\
と入力します。

pi126を開きます。
ユーザー名は先に登録したsmbuser
設定したパスワードを入力し[OK]を押します。
test.txtを開いてみます。
うまく開けました。

3.3 Macで共有フォルダーを開くには

Macの場合はFinderからアクセスします。

Finderの[移動]から、[サーバへ接続]を選択する。
[サーバアドレス]にsmb://192.168.0.126 と入力し、[接続]をクリックする。
ユーザー名は先に登録したsmbuser
設定したパスワードを入力し[OK]を押します。



4 ホスト名を変更する

Windowsやその他デバイスからSambaのネットワークを開くとホスト名が
『raspberrypi』と表示されます。複数台数のRaspberryPiがネットワークに接続された状態で識別するには名前を変更します。

/etc/hostname

/etc/hosts

の両方のファイルの「raspberrypi」を任意のホスト名に置き換えます。
ここでは「pi126」とします。

変更後、rebootすると反映されます。

※/etc/hostnameのみの変更だとrebootした後に元に戻ってしまうため、必ず2つとも変更する



参考:

Raspberry Piのホスト名を変更するhttps://qiita.com/naoyukisugi/items/66fd21512da75b437465