前提条件
- ラズパイにOSをインストール済であること
- ディスプレイ必要です
目的
- 自身のmacからSSHでラズパイに接続する
- その際に公開鍵認証でアクセスする
環境
- macOS: Catalina 10.15.7
- raspbian: 10.7
目次
- user名変更
- 公開鍵の作成
- 公開鍵認証の設定
- IP固定&ポート変更
- おまけ
内容
1. user名変更
- ラズパイの初期情報
- user:pi
- password:raspberry
このまま使用すると誰でも簡単にSSH接続できてしまうし、
その他にも問題多数なのでまずはユーザー情報を変更する。
やり方はいつかあるがここでは、ユーザー名とパスワードを変更するやり方で行う。
直接変更できれば良いのだが、ログインしているユーザーの情報を直接変更することができないため
一度別ユーザーを作成し、そちらでログイン後、変更していく。
# '仮のユーザ(tmp)を作成する'
sudo useradd -M tmp
# 'tmpユーザをsudoグループに追加(そうしないとsudoが使えない)'
sudo gpasswd -a tmp sudo
# 'tmpユーザのパスワードを設定'
sudo passwd tmp
# 'ログアウトする'
exit
アカウントの作成が終わったら、SSH接続に必要なのでIPアドレスを確認する。
# 'ifconfigで情報を表示'
ifconfig
# '複数行出てくるが下記のような表示を探し、inetのところがIPアドレスなのでメモしておく'
wlan0: flags=1111<UP,BROADCAST,RUNNING,MULTICAST> mtu 1111
inet 111.111.11.1 netmask 255.255.255.0 broadcast 111.111.11.255
inet6 fe11::1aa:1a4a:a1a1:1aa1 prefixlen 64 scopeid 0x20<link>
ここまで確認したら、画面の表示をCLIに変更します。
デスクトップのままだと、どこかでPiユーザーを使用しているらしく名前の変更ができません。
設定方法は、左上のラズパイのロゴから
「RaspberryPiの設定」 -> 「システムタブ選択(最初に選択されてる)」
-> 「boot(ブート)のをCLIに変更」 -> 「現在のユーザーでログインするからチェックを外す」
-> 「インターフェース(interface)タブ選択」 -> 「SSHのところを有効にする」
ここまで完了したらラズパイを再起動します。
再起動後、macの方からSSHで接続。
# 'ssh [先ほど作成したユーザー名]@[ラスパイのIPアドレス] -p 22'
ssh tmp@111.111.11.1 -p 22
接続ができたら、Piユーザーの情報を変更します。
rootユーザーにもパスワードを設定しておきましょう。
(rootユーザーは元々存在し、名前変更不可のため後ほどSSHログインできないようにします)
# 'usermod -lでユーザ名をpiからnewpiに変更'
sudo usermod -l newpi pi
# 'usermod -dでホームディレクトリを/home/piから/home/newpiに変更'
sudo usermod -d /home/newpi -m newpi
# 'groupmod -nでpiグループをnewpiグループに変更'
sudo groupmod -n newpi pi
# 'rootユーザーのパスワード変更'
sudo passwd root
# 再起動
reboot
これで変更完了。
再起動と同時に、SSH接続が切れるので変更したユーザーでSSH接続を試みる。
再接続できたら、tmpユーザーは不要なので削除する。
ssh newpi@111.111.11.1 -p 22
# '仮ユーザを削除(警告的なのが出るが、構わず削除)'
sudo userdel tmp
# 'newpiユーザのパスワードを変更(必要であれば)'
sudo passwd newpi
2. 公開鍵の作成
まずはmac側のHOMEディレクトリ配下に.sshというディレクトリを作る。
その後、そのディレクトリ内に鍵を作成。
# 'mac側のホームディレクトリ配下に、.sshディレクトリの作成'
mkdir ~/.ssh
# '.sshディレクトリに移動'
cd ~/.ssh
# '鍵の作成'
ssh-keygen -t rsa
鍵の作成のコマンドを打つと下記の3つを順番に聞かれる。
・ 鍵ファイルを保存するフォルダの名前
・ パスフレーズ
・ パスフレーズ(確認用)
全てエンターでも良いが、パスフレーズは入力しておくほうがベター。
作成後、~/.sshの中に次のような2つのファイルが作成されている。
# '秘密鍵'
id_rsa
# '公開鍵'
id_rsa.pub
3. 公開鍵認証の設定
ラズパイ側に鍵を格納するディレクトリを作成。
# 'ラズパイ側のホームディレクトに、.sshディレクトリ作成'
mkdir ~/.ssh
作成後、公開鍵をmacからラズパイに送ります。
# 'mac側の.sshディレクトリ内に移動'
cd ~/.ssh
# 'scp -r id_rsa.pub [ユーザー名]@[ラズパイのIPアドレス:/home/[ユーザー名]/.ssh]'
scp -r id_rsa.pub newpi@111.111.11.1:/home/newpi/.ssh
これで公開鍵の送信は完了です。
次に、ラズパイ側で受け取った鍵の情報を書き出し、鍵のパーミッションの変更をしていきます。
# 'ラズパイ側の.sshディレクトリに移動'
cd ~/.ssh/
# '公開鍵の情報を使用する用に書き出す'
cat id_rsa.pub >> authorizedkeys
# 'authorized_keysのパーミッションを600に変更'
chmod 600 authorized_keys
# '.sshフォルダのパーミッションを700に変更(うまくいかなければsudoをつける)'
chmod 700 ~/.ssh
# '公開鍵ファイルを削除'
rm ~/.ssh/id_rsa.pub
これで基本的な設定は完了。接続できるかテスト・
# 'mac側の.sshディレクトリに移動'
cd ~/.ssh
# 'ssh [ユーザー名]@[ラズパイのIP] -i [秘密鍵] -p 22'
ssh newpi@111.111.11.1 -i id_rsa -p 22
パスワードを要求されるので、公開鍵の生成の際に入力したパスワードを入力。
ログインできたら完了です。
せっかくSSHログインできるようにしたので、パスワードログイン不可にしましょう。
ラズパイ側の設定ファイルを変更します。
ついでなので他のもいじりますが必要に応じて変えてください。
変更するのは下記3点
・ rootユーザーのログイン禁止
・ パスワード認証を無効化して公開鍵認証のみを許可
・ 空パスワードを無効
# 'vimで設定ファイルを開く(vim意外で開きたい方はviの部分変えてください)'
sudo vi /etc/ssh/sshd_config
# 'rootユーザーのログイン禁止'
# '#PermitRootLogin prohibit-password」を「PermitRootLogin no」に変更'
PermitRootLogin no
# 'パスワード認証を無効化して公開鍵認証のみを許可'
# '「#PasswordAuthentication」を「PasswordAuthentication no」に変更'
PasswordAuthentication no
# '空パスワードを無効'
# '「#PermitEmptyPasswords no」を「PermitEmptyPasswords no」に変更'
PermitEmptyPasswords no:wq
この設定ファイルにはいろんな情報が書いてあるので、探すの大変かと思うので
vimの場合コマンドモードで、 /[検索したい文字]
とすると検索できるので便利。
ここまで終わったら再度SSH接続を試みて成功すれば完了。
4. IP固定&ポート変更
IPアドレスは、自インターネット内で自動で振り分けられるため
変更する可能性があるので、IPを毎回固定になるような設定をする。
# 'IPの設定は/etc/dhcpcd.conf'
sudo vi /etc/dhcpcd.conf
# '下記設定を書き込む'
interface wlan0
static ip_address=192.168.11.111/24
static routers=192.168.11.1
static domain_name_servers=192.168.11.1
# 'ラズパイ再起動'
reboot
ip_addressに好きなIPを設定。
routersというのはデフォルトゲートウェイに当たります。
上記はBuffaloのルーターでの設定です。
Buffaloルーターをお使いの場合は、下2つは同じ値で大丈夫だと思います。
再起動後、ip -a でwlan0のところのinetが192.168.11.111/24が表示されていれば成功。
想定外のエラー
自分の場合、この設定でうまくいかなかった。
結果的にはラズパイ側のwifiの設定を変えたら成功した。
やったことは下記。
# 'wifiの設定を普通に行うとパスワードが平文で入っているため変更'
wpa_passphrase "Wi-FiのSSID" "パスフレーズ"
# 'このように表示されるので全てコピー'
network={
ssid="Wi-FiのSSID"
#psk="パスフレーズ"
psk=xxxxxx
}
# 'wifiの設定ファイルは/etc/wpa_supplicant/wpa_supplicant.conf'
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
# '先ほどのnetworkの設定をペーストし、#psk="パスフレーズ"の部分を削除して保存'
network={
ssid="Wi-FiのSSID"
psk=xxxxxx
}
# 'ラズパイ再起動'
reboot
自分の場合はこれで解決できたので参考までに。
5. おまけ
毎度毎度、sshの長々したコマンドを打つのは大分めんどくさいと思います。
そんなときはエイリアスを登録すると良いです。
まずはエイリアスを書くためのファイルを作りましょう。
# 'touch [秘密鍵が保管されているディレクトリ]/config'
touch ~/.ssh/config
# 作成したファイルを開く
vi ~/.ssh/config
configファイルの中に情報を書き込みます。
この際、Hostのところに記載する文字でSSH接続するので、覚えやすいものにすると良い。
# 'フォーマット'
Host [任意のホスト名]
HostName [ラズパイのIP]
User [ラズパイのユーザー名]
port [変更していなければ22]
IdentityFile [秘密鍵のパス]
# '例'
Host newpi
HostName 111.111.11.1
User newpi
port 22
IdentityFile ~/.ssh/id_rsa
これでエイリアスの登録は完了です。
早速、接続してみましょう。
# 'ssh configで設定したHost名'
ssh newpi
これで毎回長々とコマンド打たなくて済みます!
続く。。。
このラズパイはファイルサーバー化する予定なので続きを近日公開するかも??