SFTP接続にはパスワード認証と、鍵認証方式があります。
通常SSHでアクセスする際に
ssh ユーザー名@IPアドレス
でログインすると、パスワードが聞かれると思います。これがパスワード認証です。
そうではなく、今回は秘密鍵と公開鍵を利用した認証を適用します。
鍵認証方式を使用すると、上記のSSHコマンドを実行した際に、パスワードを入れることなくログインが可能になります。
前提条件:Raspberry Pi の SSH接続機能をONにする
SFTPは名前から、FTPの派生かと思いますが、SSHの派生です。
ラズパイでSFTPを受け入れるには、SSHを有効にします。
Preferences → Raspberry Pi Configurationの順に進みます。


PC側の操作:公開鍵認証のための鍵を作成する
公開鍵:アクセスしたいコンピュータに事前に知らせる鍵
秘密鍵:自身が持っておく鍵(絶対に他人に教えてはいけない)
事前にアクセス先に錠前を持ってもらって、自身が秘密鍵で鍵を開けるイメージです。
鍵が合っていないと錠前は開きません。
鍵を作るには自分のパソコン上のターミナルでコマンドを打つ必要があります。
パソコンでターミナルを開きます。
以下のコマンドで公開鍵と秘密鍵を生成します。
$ ssh-keygen -t rsa
実行すると、以下のようなメッセージが出てきます。
Enter file in which to save the key(***):
「鍵を保存する場所を教えて」とのことなのですが、特にこだわりがなければ何も入力せずにEnterで大丈夫です。
その場合は (***) に書かれている通り、デフォルトの場所(.sshという隠しフォルダ)に鍵が生成されます。
その後パスフレーズの設定を求められますが、何も入力しないままEnterでOKです。
これはSSH接続時に入力するフレーズでパスワードみたいなものです。
入力が終われば、公開鍵と秘密鍵を作ることができます。
C:\Users\<ユーザー名>\.ssh
に「id_rsa」と「id_rsa.pub」というファイルが作られています。
id_rsaが秘密鍵、.pubの拡張子付きのファイルが公開鍵です。
ラズパイ側の設定:公開鍵を登録する
次はRaspberry Piに先ほど生成した公開鍵 id_rsa.pub の内容を登録していきます。
ラズパイにログイン後、ホームディレトリにて、mkdir コマンドで ssh という隠しフォルダを作ります。
Raspberry Pi OSをインストールした際には、デフォルトで存在していると思います。
$ mkdir .ssh
フォルダが作れたら、鍵の登録先になる authorized_keys というファイルを .ssh フォルダの中に作ります。
$ touch .ssh/authorized_keys
.sshフォルダと authorized_keys の権限設定をします。
設定する権限は以下の通りです。
- .ssh → 所有者のみが読み込み(read)、書き込み(write)、実行(execute)可能
- authorized_keys → 所有者のみが読み込み(read)、書き込み(write) 可能
chmod コマンドを使って次のように設定していきます。
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
最後に、authorized_keys に公開鍵を書き込みます。
ファイルの末尾に1行追記の形でOKです。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAA...
ファイルをまるごと持ってきている場合、以下のcatコマンドでファイル内容の追記が行えます。
cat コマンドで authorized_keys にid_rsa.pubの内容を追記します。
$ cat id_rsa.pub >> .ssh/authorized_keys
以上で公開鍵認証の設定は完了です。
公開鍵認証でSSH接続できるか確認
最後に公開鍵認証でSSH接続できるかを確認します。
自分の パソコン上でターミナルを開いて、ssh コマンドで公開鍵認証でSSH接続します。
ssh ユーザー名@IPアドレス -i .ssh/id_rsa
パスワード認証のときとは違い、-i 以下で秘密鍵を指定しています。
これでSSH接続が無事にできれば成功です。
FileZillaで接続
FileZillaで接続する場合の一例です。
ホスト名にラズパイのIPアドレス
ポート:空白でOK(ポート22を必要に応じて解放)
ログオンタイプ:鍵ファイル
ユーザー名:pi
鍵ファイル:自身で生成した秘密鍵ファイルを指定

コメント