Ubuntu Serverで SSH の設定をする【RP4】

SSHRaspberry Pi
この記事は約32分で読めます。

Ubuntu Serverにヘッドレスで接続するためには、 SSH の設定をする必要があります。と言っても、初心者の私にはSSHが何なのか、どうやって設定するのかチンプンカンプンです。そこで、SSHについて自分なりに調べてまとめてみることにしました。

 

 

スポンサーリンク

はじめに

Raspberry Piを使ってサーバーを構築する場合、セキュリティ対策の一環としてSSH接続の設定を行うのは必須と言えます。
とは言え、私自身、Raspberry Piを触るようになってからこのことを知りました。
このため、SSHと言われても、何のことだかさっぱり分かりません。
さらに、そのSSH接続を設定するとなると訳が分からない状態です。
そこで、SSHについて調べてみると、コンピューターをリモート接続するためのプロトコルということが分かりました。

SSH接続を行うに当たってはパスワード認証と公開鍵認証の二つの方法があることも分かりました。
公開鍵の作成にはOpenSSHとPuTTYのどちらかを利用できることも分かりました。
そこで、今回、SSH接続に必要なパスワード認証と公開鍵認証の設定方法と、OpenSSHとPuTTYの設定方法について自分なりに調べてまとめてみることにしました。

 

 

SSH とは

SSHとは、Secure Shellの略で、Wikiでは以下のように説明されています。

Secure Shell(セキュアシェル、SSH)は、暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコル。

wikiより抜粋

SSHの一連の流れについては以下のサイトが分かりやすかったです。
公開鍵と秘密鍵の役割についても説明してあるので、興味があれば参照すると良いかもしれません。

SSHとは?仕組みとSSHサーバーの設定をわかりやすく解説します! - カゴヤのサーバー研究室
SSHとは「Secure Shell」の略で、ネットワークに接続された機器を遠隔操作し、管理するための手段です。ポイントはSecure(安全)に!で、そのために必要な仕組みが用意されています。この記事では初心者の方にも分かるように、あらためてSSHの概要や設定方法などの基本を解説します。 SSHとは? SSHとは「Se...

SSHを設定するためには公開鍵と秘密鍵を作成しなければなりません。
私のような初心者にとって厄介なのは、この公開鍵と秘密鍵をどうやって作成するかです。
SSHの設定方法を紹介しているサイトの多くは、いつの間にか公開鍵と秘密鍵が作成されており、何を使ってどう作成したかという手順が抜けています。
そこで、ここでは公開鍵と秘密鍵の作成手順も含めて説明したいと思います。
SSHを設定するにあたり、以下のサイトを参考にしました。

DigitalOcean home
Use a terminal to connect to Droplets using OpenSSH or PuTTY for shell access to your remote server.

Raspberry PiにSSH接続をする場合、SSHクライアントが必要です。
UbuntuやMacOSにはSSHクライアントが既にインストールされているようですが、Windowsの場合は自分でインストールする必要があります。
SSHクライアントで検索すると、数多くあり、私のような初心者にはどれを使って良いか分かりません。
上記サイトでは、SSHクライアントとして、OpenSSHとPuttyの二つを挙げています。
OpenSSHとPuTTYの違いは、それぞれ形式の異なる鍵を作成するため、互換性がありません。
このため、接続に使用するクライアントソフトウェアが異なります。

OpenSSH形式とPuTTY形式の違い - inamuu wiki site

SSH接続の認証方式にはパスワード認証と公開鍵認証の二つがあります。
ここでは、サーバーがRaspberry Piで、クライアントがWindowsになります。

パスワード認証はサーバーのパスワードさえ知っていれば、クライアント側で特別な操作をすることはほとんどありません。
ただし、ネットワーク上にパスワードが流れる可能性があり、パスワードを第三者に知られてしまうと、サーバーが乗っ取られてしまう可能性があります。
このため、個人のLAN内で使用する分にはセキュリティ面に問題はないかもしれませんが、大勢の人が利用する場合は注意が必要です。

公開鍵認証は、前もってクライアントの公開鍵と秘密鍵を作成する必要があります。
そして、公開鍵を接続先のサーバーに届けるので、パスワード認証に比べてセキュリティ面で安全性が高いです。
ただし、この公開鍵と秘密鍵の作成と、公開鍵をサーバーに届けるという初期の手続きが面倒です。
ここでは、OpenSSHとPuTTYを使用したそれぞれのパスワード認証方式と公開鍵認証方式のやり方を説明したいと思います。

 

 

OpenSSH

OpenSSHが何なのかいまいち良く分からないので、調べてみました。

OpenSSH は、SSH プロトコルを使用するリモート ログイン用の接続ツールです。 クライアントとサーバーの間のすべてのトラフィックを暗号化して、盗聴、接続ハイジャック、その他の攻撃を排除します。

OpenSSH を使用して、OpenSSH Client がインストールされている Windows 10 (ビルド 1809 以降) または Windows Server 2019 デバイスから、OpenSSH Server がインストールされているデバイスに接続できます。

OpenSSH をインストールする」より抜粋

OpenSSHは、Windows 10 ビルド 1809 以降にインストールできるようになりました。
ただ、OpenSSHはコマンドによって操作するので、コマンド入力に慣れていない人にはなじまないかもしれません。
以下のチュートリアルでは、Windowsの場合、OpenSSHをインストールすることを紹介しています。

https://ubuntu.com/tutorials/how-to-install-ubuntu-on-your-raspberry-pi#4-boot-ubuntu-server

OpenSSHにはOpenSSH ClientとOpenSSH Serverがあります。
WindowsからUbuntu ServerにSSHで接続する場合、WindowsにはOpenSSH Clientをインストールします。

インストール方法には、Windows 設定を使用してインストールする、あるいはPowerShellを使用してインストールする二通りがあります。
インストール方法は、以下のサイトを参照し、好きな方を選んでください。

OpenSSH をインストールする
Windows 用 OpenSSH Client と Server のインストール。

OpenSSHをインストールすると、コマンドプロンプトやPowerShellでWindowsからRaspberry Piへ接続できるようになります。
コマンドプロンプトとPowerShellのどちらを使えばいいかというと、PowerShellの方がコマンドプロンプトよりできることが多いので、PowerShellの方が良いでしょう。
ただ、ちょっとした動作確認をしたり、リモートでRaspberry Piに何かをインストールしたり、アップデートをする場合は、コマンドプロンプトの方が軽量で動作が速いので、コマンドプロンプトの方が良いかもしれません。

 

パスワード認証

前述したUbuntuのチュートリアルで一連の流れを見ると、OpenSSHのデフォルトではパスワード認証が設定されています。
SSH接続をする場合、コマンドプロンプトやPowerShellのいずれかを起動し、以下のsshコマンドとIPアドレスを入力します。
仮に、Raspberry Piで設定した固定IPアドレスが192.168.1.23の場合は以下のようになります。
固定IPアドレスの設定方法はコチラを参照してください。

C:\Users\ユーザー名> ssh ubuntu@192.168.1.23

これまでにSSH接続をしたことがない場合は以下のようなメッセージが表示されます(図1)。

図1

よくWindowsではyes/noの入力の際に”y”と入力することが多いですが、ここでは”yes”を入力します。
そうすると、known_hostsファイルにIPアドレスが追加されたというメッセージが表示されます。
そのメッセージが表示されると、今度はパスワードの入力を求められるので、初回のログインであれば”ubuntu”と入力します(図2)。
このとき、入力した文字は表示されないので、入力間違いをしないように注意して入力してください。

図2

Ubutu Serverにログインすると、初回ログインの場合はパスワードの変更を求められます。
初回ログインでは、Current passwordには”ubuntu”と入力します(図3)。
次に、新しいパスワードの入力を求められるので、New passwordには任意のパスワードを入力します。
Retype new passwordには先ほど入力した新しいパスワードを入力します。

図3

新しいパスワードが設定されると、接続を一旦切られます。
この直後に再度ログインしようとしたらできませんでした。
Raspberry Piを再起動するとログインできたので、パスワードの設定後はRaspberry Piの再起動が必要と思われます。

図4

Ubutuのチュートリアルでは、OpenSSHで有線LANを経由して接続しているため、Ubutu Serverにログインした後に無線接続の設定を行っています。
しかし、この記事では事前にnetwork-configで無線接続の設定をしているため、この操作は必要ありません。

余談

ちなみに、パスワード認証方式でUbuntu Serverの設定や動作確認をするために、Raspberry PiにOSを再インストールしてから、同じIPアドレスでSSH接続をすると、以下のような警告が表示されます(図5)。
このような警告に関して、以下のサイトを参考にしました。

ssh接続をする際に「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」と出てつながらない|Tech Blog|日本情報通信株式会社
常田です。クラウドになってサーバを作ったり消したりしていると同じIPアドレスでサーバが用意される事があります。SSHで接続する際には接続先毎にローカルに情報が保管されるため、中身が別のサーバになったり…
図5

この警告は、以前、SSHをした際に接続したときの情報がローカルディレクトリ(Users\\ユーザー名\.ssh)に保存されているからです。
この場合、.sshディレクトリにあるknown_hostsファイルを削除しても良いのですが、以下のコマンドを使用した方が不要なファイルだけ削除できるので安全です。
Windowsの場合、コマンドプロンプトからでも実行できます。
この例の場合、固定IPアドレスとして192.168.1.23を使用しているので、そのアドレスを指定して入力しています。

C:\Users\ユーザー名> ssh-keygen -R 192.168.1.23

 

公開鍵認証

公開鍵暗号方式には、DSA・RSA・ECDSA・ED25519があります。
それぞれの違いは、以下の表の通りです。

TypeDefaultのBitsBitsの種類コマンドセキュリティ
DSA10241024-t dsa

RSA20481024, 2048, 4096-t rsa -b ビット数
ECDSA256256, 384, 521-t ecdsa -b ビット数
ED25519256256-t ed25519

各公開鍵暗号方式の詳細はよく分かりませんが、以下のサイトでは、実装や互換性を重視する場合は公開鍵の鍵長が2048bitもしくは4096bitのRSA、パフォーマンスやセキュリティを重視する場合はEdDSA(ED25519)を推奨しているようです

SSHの公開鍵暗号には「RSA」「DSA」「ECDSA」「EdDSA」のどれを使えばよいのか?
リモートでコンピューターにアクセスするためのプロトコルであるSSHは、コンピューターの認証を行うために公開鍵暗号を利用しています。公開鍵暗号の方式には「RSA」「DSA」「ECDSA」「EdDSA」があり、それぞれの仕組みと「SSHに適した方式」についてソフトウェア企業「Gravitational」のVirag Mod...

とりあえず、今後、Raspberry Piに外部から接続できるようにすることも考えると、セキュリティの面からED22519が推奨されることが考えられます。
ということで、この記事ではED22519を使用した公開鍵認証の設定について説明します。
ED22519はOpenSSH6.5以降でサポートされています。
Windows 10のコマンドプロンプトでssh -Vを実行してバージョンを確認したところ、OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2でした。

公開鍵と秘密鍵の作成

Windowsで公開鍵と秘密鍵を作成する場合、注意が必要です。
公開鍵と秘密鍵の作成する場合、以下のようなメッセージが表示されます。

Enter file in which to save the key (C:\Users\ユーザー名/.ssh/id_ed25519):

上記には保存先が表示されており、特にファイル名の指定がない場合、ファイル名id_ed25519が.sshディレクトリに保存されると読み取れます。
しかし、実際には.sshディレクトリに保存されず、カレントディレクトリに保存されます。
.sshディレクトリに保存したい場合、cdコマンドで.sshディレクトリを指定する必要があります。
なお、.sshディレクトリがない場合、事前に作成しておく必要があります。

C:\Users\ユーザー名> cd .ssh

次に、.sshディレクトリを指定したら、ssh-keygenコマンドを実行します。
以下のコマンドは、コチラのサイトを参考にしました。

C:\Users\ユーザー名\.ssh> ssh-keygen -o -a 256 -t ed25519 -C ""

あるいは、以下のようにオプション-fで.ssh/ファイル名を指定すると、cdコマンドでディレクトリを移動しなくても.sshディレクトリに公開鍵と秘密鍵が作成されます。

C:\Users\ユーザー名> ssh-keygen -o -a 256 -t ed25519 -f .ssh/ファイル名 -C ""

各オプションについては以下の通りです。

短いオプション意味
-o互換性のあるPEM形式ではなく、新しいOpenSSH形式で秘密鍵を保存する場合に指定します。OpenSSH7.8以降ではデフォルトになっているので、OpenSSHのバージョンによっては不要です。詳細はコチラ
-a ラウンド数ed25519形式で生成する際のKDF(Key Derivation Function)ラウンド数を指定する。数が大きいと暗号の耐性が上がるが、処理に時間がかかるようになる。
-t 方式作成する鍵の暗号化形式を「rsa」(デフォルト)・「dsa」・「ecdsa」・「ed25519」から指定する。
-f ファイルファイルを指定する(生成または読み出すファイルを指定)。ただし、併用するオプションによって意味が変化する(通常は鍵ファイル)。
-C コメントコメントを指定する(デフォルトは「ユーザー名@ホスト名」。「-C “”」でコメントを削除)

上記のssh-keygenコマンドに関する詳細は以下から抜粋にしました。

【 ssh-keygen 】コマンド――SSHの公開鍵と秘密鍵を作成する
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、SSHの公開鍵と秘密鍵を作成する「ssh-keygen」コマンドです。

.sshディレクトリへの移動から公開鍵と秘密鍵の作成までの一連の流れを図にしました(図6)。
ファイル名はtestにしました。
パスフレーズの入力は任意です。
パスフレーズが空白の場合、パスフレーズの入力なしに接続できるようになります。
ただし、その分だけセキュリティは甘くなるので、注意が必要です。

図6

最後のtypeコマンドはLinuxのcatコマンドの代わりで、作成した公開鍵の内容を表示しています。
この作業はある設定をする場合に必要になります。

公開鍵の転送

MacやLinuxなら、ssh-copy-idコマンドを使用することで、簡単に公開鍵を転送できるそうです。
Windowsなら、Windows Subsystem for Linux(WSL)をインストールすることで使用可能になると思います。
しかし、WSLに関しては説明が長くなるので、別の機会に記事にしたいと思います。
今回の一連の流れは以下のサイトを参考にしました。

買ったらまず実施!RaspberryPiのセキュリティ対策 - Qiita
はじめに 本記事は主にこちらを参考にさせて頂きました。

Ubuntu Serverではデフォルトユーザー名がubuntuなので、この記事でのユーザー名はデフォルトユーザー名をそのまま使用します。
また、IPアドレスには、固定IPアドレスとして192.168.1.23を設定します。
固定IPアドレスの設定方法はコチラを参照してください。

ファイルを転送するコマンドには、scpsftprsyncがあるようです。
ただ、以下のサイトにあるように、scpはOpenSSH公式で非推奨とのことです。

OpenSSH公式で非推奨ですが、参考にscpコマンドの方法も紹介しておきます。

scp

公開鍵をRaspberry Pi側に転送する場合、scpコマンドを使用する方法があります。
PC側でコマンドプロンプトを起動している場合、.sshディレクトリに移動しているか確認してください。
もし.sshディレクトリに移動していない場合は、cdコマンドで.sshディレクトリに移動します。
次に、scpコマンドを以下のように実行します。
ユーザー名はWindows側とUbuntu Server側の二つがあるので注意が必要です。

C:\Users\ユーザー名(Windows側)\.ssh> scp 公開鍵のファイル名.pub ユーザー名(Ubuntu Server側)@IPアドレス:/home/ユーザー名(Ubuntu Server側)/.ssh

ここでのユーザー名(Ubuntu Server側)は、デフォルトではubuntuなので、ubuntuと入力します。
公開鍵のファイル名は先ほど作成したtest.pubを指定します。
一連の流れを以下に表示します(図7)。

図7
sftp

PC側でコマンドプロンプトを起動している場合、.sshディレクトリに移動しているか確認してください。
もし.sshディレクトリに移動していない場合は、cdコマンドで.sshディレクトリに移動します。
sftpで公開鍵ファイルを転送する場合、sftpでセッションを開始する必要があります。
セッションを開始するコマンドは以下の通りです。

C:\Users\ユーザー名(Windows側)\.ssh>sftp ユーザー名(Ubuntu Server側)@IPアドレス

次に、クライアント側(Windows)からサーバー側(Ubuntu Server)に公開鍵を転送するコマンドは以下の通りです。

sftp> put 公開鍵のファイル名.pub

一連の流れを以下に表示します(図8)。
sftpコマンドをでセッションを開始します。
次に、ログインパスワードを入力します。
Ubuntu Serverにログインした後、cdコマンドで.ssdディレクトリに移動します。
次に、putコマンドで公開鍵を転送します。
転送が完了したらexitコマンドでsftpのセッションを終了します。

図8
rsync

Windowsのコマンドプロンプトでrsyncを実行しようとすると、エラーが出てコピーできませんでした。
そもそもコマンドプロンプトでrsyncは実行できないそうです。
もしrsyncを使用したい場合、やはりWSL(Windows Subsystem for Linux)をインストールする必要があります。
この記事では、できるだけコマンドプロンプトやPowerShellで実行することを目的にしているので、rsyncに関する説明は省きます。
参考として、以下のサイトを紹介させていただきます。

Windowsでrsyncを使いたい
Windows環境でrsyncを使おうとすると最初に見つかる選択肢は cwRsync です。cwRsyncはrsyncを動作させるためにCygwinやら何や

公開鍵の登録

PCからRaspberry Piに公開鍵を転送したら、今度は公開鍵の内容を authorized_keysファイルに登録します。
この登録には、Raspberry Pi側にアクセスして以下のようにcatコマンドを使用します。
catコマンドはファイルの中身を表示するだけでなく、ファイルの中身もコピーできます。

$ cat 公開鍵のファイル名.pub >> authorized_keys

現在位置やディレクトリの内容の確認など所々に不要な操作がありますが、例として一連の操作を表示します(図9)。
最初にsshコマンドを入力して、パスワード認証でRaspberry Piに接続します。
次に、ログインパスワードを入力します。
Ubuntu Serverにログインしたら、cdコマンドで.sshディレクトリに移動します。
次に、catコマンドで公開鍵の内容をauthorized_keysに登録します。

図9

Raspberry PiにSSH接続した後の公開鍵登録の基本的な流れは、以下の通りです。

$ cd .ssh
$ cat 公開鍵のファイル名.pub >> authorized_keys

公開鍵を登録したら、exitコマンドを使用してRaspberry Piとの接続を一旦切ります。

公開鍵認証による接続

コマンドプロンプトで公開鍵認証によるSSH接続を行う場合、sshコマンドを使用します。
一つは、以下のように秘密鍵のフルパスを入力する方法があります。

C:\Users\ユーザー名> ssh ユーザー名@IPアドレス -i C:\Users\ユーザー名\秘密鍵のファイル名

もう一つは、.sshディレクトリに移動し、以下のように秘密鍵のファイル名を入力する方法です。

C:\Users\ユーザー名\.ssh> ssh ユーザー名@IPアドレス -i 秘密鍵のファイル名

これまでに公開鍵を使用する説明をしてきたので混乱するかもしれませんが、公開鍵認証による接続では秘密鍵を使用するので間違えないようにしてください。

Raspberry Piに接続できたら、authorized_keysに登録し終えた公開鍵ファイルを削除します。
削除する必要があるかは個人の判断ですが、今後、接続する人が増えて公開鍵がたまっていくと、記憶領域が圧迫されるかもしれません。
公開鍵ファイルを削除するには、rmコマンドを使用します。
.sshディレクトリに移動していない場合は、

$ rm ~\.ssh\公開鍵のファイル名.pub

.sshディレクトリに移動している場合は、

~\.ssh$ rm 公開鍵のファイル名.pub

となります。

余談

Ubutu Serverの.sshディレクトリのパーミッションは、デフォルトで700です。
また、転送した公開鍵のパーミッションは、デフォルトで664です。
さらに、公開鍵の内容を登録するauthorized_keysのパーミッションは、デフォルトで600です。
ここまでの手順でSSH接続をすると、”WARNING: UNPROTECTED PRIVATE KEY FILE!”という警告メッセージが表示される場合があります。
このため、各ファイルやディレクトリのパーミッションがどのような設定になっているか確認する必要があります。
パーミッションの確認にはlsコマンドを使用します。

$ ls -all

または、

$ ll

上記の警告メッセージが表示される場合、.sshディレクトリあるいは公開鍵やauthorized_keysなどのファイルのパーミッションに問題がある可能性があります。
この警告を解消するには、chmodコマンドを使用して、Raspberry Piの/home/ユーザー名(デフォルトユーザーではubuntu)/.sshディレクトリにあるauthorized_keysあるいは公開鍵のパーミッションを600に変更する必要があります。
あるいは、.sshディレクトリのパーミッションを700に変更する必要があります。

$ chmod 600 authorized_keys
$ chmod 700 ~/.ssh

また、OpenSSHを使用してUbuntu Serverにある設定やファイルを操作するにあたり、文字の色が非常に見難いという問題にぶち当たります。
この問題を解決するにあたり、以下のサイトが参考になります。

Windows10標準搭載SSH経由のVim表示色がおかしいので変更してみた
以前、Windows上にテスト用のWEBサーバーを構築する方法を紹介した。この構築したサーバーにWindows PowerShellを使用してSSH接続を行い、Vimを使用したところVimのコメントの表示色が背景色と似た感じになりまったく読めなかった。このままではまともに使えないのでVimのカラースキームをカラーテーマ...

 

スポンサーリンク

 

PuTTY

SSH接続をするための方法として、OpenSSH以外にPuTTYというSSHクライアントソフトを使用するということが挙げられます。
OpenSSHのようにコマンドプロンプトなどのCUIでコマンド入力をする必要がないので、初心者でも扱いやすいです。
PuTTYの設定をするにあたり、以下のサイトを参考にしました。

PuTTYで公開鍵認証方式でのSSH接続を行う手順まとめ - Qiita
PuTTYで公開鍵認証方式を使ったSSH接続 PuTTYのインストールと使い方 インストール まず次のリンクからPuTTYをダウンロードします。「Zip file:」と書かれた右側の「putty.zip」をクリックして下...
公開鍵認証によるSSH接続 - PuTTYの使い方 - Linux入門 - Webkaru
Windows対応のSSHクライアントPuTTYを利用した、パスワード認証によるSSH接続について解説します。

 

PuTTYのインストール

PuTTYのダウンロードは、こちらから。

図10図11

ダウンロードしたファイルを実行すると、インストーラーが起動します。
最初は特に設定することがないので、「Next」をクリックします(図12)。
次に、インストール先のディレクトリを変更する場合は、「Change」をクリックして、インストールディレクトリを変更します。
インストール先のディレクトリに問題がなければ、「Next」をクリックします(図13)。

図12図13

インストール先が決まったら、インストールする項目を選択します(図14)。
選択されていない項目はデスクトップ上にPuttyのショートカットを追加するかどうかだけなので、必要なければ「Install」をクリックします。
すると、PuTTYのインストールが開始されます(図15)。

図14図15

インストールが完了すると、セットアップウィザード終了が表示されるので、「Finish」をクリックします(図16)。

図16

以降の説明では、IPアドレスを固定していることを前提にしています。
固定IPアドレスの設定方法はコチラを参照してください。

 

パスワード認証

PuTTYを起動すると、以下のような画面が表示されます。

図17

Host Nameには固定IPアドレスを入力してください(図17の赤枠)。
Portはデフォルトで22になっていますが、セキュリティ対策でポート番号を変更している場合はそのポート番号に変更する必要があります(図17の青枠)。
Connection typeはSSH接続をするので、SSHにします(図17の緑枠)。
各値や設定を確認して問題がなければ、Openをクリックします。

Opneをクリックすると、以下のようなメッセージが表示されます。

図18

内容としては、このサーバーに接続しても問題ないか?ということを尋ねてきているだけなので、今回の場合は問答無用でAcceptをクリックします(図18)。
Acceptをクリックするとログインユーザー名の入力を求められるので、初回ログインではubuntuと入力します(図19)。
次に、ログインパスワードの入力を求められるので、初回ログインではこれもubuntuと入力します(図19)。
ログインに成功すると、今度はCurrent Passwordの入力を求められますが、これもubuntuと入力します(図20)。
今度はNew Passwordの入力を求められるので、ここでは新規に自分のパスワードを入力します(図20)。
簡単なパスワードだと拒否されるので、それなりに複雑なパスワードを入力してください。
問題がなければ先ほど入力した新規のパスワードを再入力します(図20)。
これでPuTTYによるパスワード認証は終了です。

図19図20

 

公開鍵認証

PuTTYをインストールしたら、公開鍵を作成するためにPuTTYgenを起動します。
PuTTYgenを使用するにあたり、以下のサイトを参考にしました。

https://www.ranvis.com/doc/putty/man/pubkey.html#puttygen-keytype

公開鍵と秘密鍵の作成

PuTTYgenはスタートメニューからPuTTY(64-bit)を選択し、その中にあるPuTTYgenをクリックします(図21)。
PuTTYgenを起動させたら、鍵の種類(Type of key to generate)でEdDSA(図22-①)を選択します。
Curve to use for generating this keyは、デフォルトのままで、Ed25519を選択します。
鍵の種類を選択したら、「Generate」をクリックします(図22-②)。
「Generate」をクリックすると、図23のようにプログレスバーが表示されます。
この時、”Please generate some randomness by moving the mouse over the blank area.”というへメッセージが表示されるので、マウスを適当に動かします。
そうしないと、鍵の生成がいつまで経っても進みません。

図21図22図23

Key commentは、図24-①に示すPublic key for pasting into OpenSSH authorized_keys fileの末尾に追加されます。
デフォルトでは日付が入力されていますが、任意の文字列に変更可能です。
図24-②に示すKey passphraseは、空白だとセキュリティ上問題があるので、任意の文字列を入力してください。
図24-②に示すConfirmは、Key passphraseの内容の確認なので、Key passphraseと同様の文字列を入力してください。
図24-③に示すSave public keyでは、名前を指定して公開鍵を任意の場所に保存します。
公開鍵は、今回は試しにtest_puttyとしました。
拡張子を付けたい場合、ファイル名に.pubを付けると良いです。
公開鍵は、コマンドプロンプトでpscpコマンドを使用してUbuntu Serverに転送します。
コマンドプロンプトでは、初期位置がユーザーディレクトリなので、.sshフォルダに保存しましょう。
図11-③に示すSave private keyでは、名前を指定して秘密鍵を任意の場所に保存します。
秘密鍵は、これも同様にtest_puttyとし、拡張子.ppkがついてtest_putty.ppkになります。

図24

公開鍵の転送

PuTTYでファイルを転送する方法には、pscpコマンドpsftpがあるようです。
それぞれの違いは、pscpは全てのSSHサーバーで動作するが、psftpはSSH-2に対応したサーバーのみで動作するようです。
また、pscpはファイル転送を一回するとすぐに終了するように設計されているそうです。
psftpは、ディレクトリの内容をリストアップしたり、ファイルシステムをブラウズしたり、複数のgetやputコマンドを発行したり、最終的にはログアウトすることもできるそうです。
pscpはファイルを転送したら、そのファイルがちゃんと転送されているかの確認はサーバーにSSH接続を行わないとできません。
しかし、psftpはサーバーに接続した状態でファイルを転送し、それを確認することができます。
どちらが良いかは私自身には判断できかねますが、OpenSSHではscpよりも新しいsftpを推奨しており、PuTTYでもpscpよりも新しいpsftpの方が将来的には良いのかもしれません。

pscp

公開鍵をRaspberry Pi側に転送する場合、pscpコマンドを使用します。
PC側でコマンドプロンプトを起動している場合、.sshディレクトリに移動しているか確認してください。
もし.sshディレクトリに移動していない場合は、cdコマンドで.sshディレクトリに移動します。
次に、pscpコマンドを以下のように実行します。
ユーザー名はWindows側とUbuntu Server側の二つがあるので注意が必要です。

C:\Users\ユーザー名(Windows側)\.ssh> pscp 公開鍵のファイル名 ユーザー名(Ubuntu Server側)@IPアドレス:/home/ユーザー名(Ubuntu Server側)/.ssh

ここでのユーザー名(Ubuntu Server側)は、デフォルトではubuntuなので、ubuntuと入力します。
公開鍵のファイル名は先ほど作成したtest_puttyを指定します。
一連の流れを以下に表示します(図25)。

図25
psftp

psftpを使用して公開鍵を転送する場合、PSFTPを起動します。
PSFTPはスタートメニューからPuTTY(64-bit)→PSFTPをクリックします(図26)。

図26

PSFTPの詳細に関しては以下のサイトを参照してください。

Using PSFTP to transfer files securely - PuTTY Documentation

PSFTPでRaspberry Piに接続する場合、openコマンドを使用します。

PSFTP> open ユーザー名(Raspberry Pi側)@IPアドレス

次に、ログインパスワードの入力を求められるので、パスワードを入力します。
Raspberry Piに接続できたら、今度はcdコマンドで.sshディレクトリに移動します。
.sshディレクトリに移動しない場合、後に説明するputコマンドでファイルがhome\ubuntuに転送されます。
.sshディレクトリに移動し、以下のようにputコマンドとWindows側にある公開鍵のフルパスを入力します。

PSFTP> put C:\Users\ユーザー名(Windows側)\.ssh\公開鍵のファイル名

ディレクトリの内容の確認で所々に不要な操作がありますが、例として一連の操作を表示します(図27)。
最初にopenコマンドを入力して、パスワード認証でRaspberry Piに接続します。
次に、ログインパスワードを入力します。
Ubuntu Serverにログインしたら、cdコマンドで.sshディレクトリに移動します。
次に、putコマンドで公開鍵のフルパスを入力して公開鍵を指定のディレクトリに転送します。
図にはありませんが、転送が完了したら、quitコマンドで接続を終了します。

図27

公開鍵の登録

pscp、あるいはpsftpで公開鍵をRaspberry Piに転送したら、公開鍵をautorized_keysに登録します。
登録には以下のssh-keygenコマンドを使用します。

ssh-keygen -i -f 公開鍵のファイル名 >> authorized_keys

各オプションについては以下の通りです。

短いオプション意味
-i暗号化されていない秘密鍵ファイルまたは公開鍵ファイルを読み出し、OpenSSH互換形式に変換してから標準出力に出力する(変換元のファイルは-fオプションまたは対話式で指定、-mオプションで変換元の鍵の形式を指定できる)。
-fファイルを指定する(生成または読み出すファイルを指定)。ただし、併用するオプションによって意味が変化する(通常は鍵ファイル)。

この場合、コマンドプロンプト(OpenSSH)でもPuTTYでもどちらでもできます。
とりあえず、PuTTYで説明しているので、PuTTYを使用します。
登録内容の確認で所々に不要な操作がありますが、例として一連の操作を表示します(図28)。
まず、PuTTYを起動してパスワード認証でRaspberry Piに接続し、Ubuntu Serverにログインします。
次に、cdコマンドで.sshディレクトリに移動します。
ssh-keygenコマンドで公開鍵の内容をauthorized_keysファイルに登録します。
OpenSSHではcatコマンドで登録しますが、PuTTYではssh-keygenコマンドを使用します。
この理由として、PuTTYで作成した公開鍵はOpenSSHと形式が異なるので、OpenSSH形式に変換する必要があるからです。

図28

公開認証鍵による接続

PuTTYで公開認証鍵による接続を行う場合、パスワード認証と同様にIPアドレスを入力します。
この記事では固定IPアドレスを設定していることを前提にしているので、192.168.1.23を入力します(図29の赤枠)。
セキュリティ対策としてポート番号を変更している場合はポート番号も指定します(図29の青枠)。
その次に左側にあるツリーメニューのCategoryからConnection→SSH→Authの順で展開していきます。
AuthにあるPrivate key file for authenticationで秘密鍵のファイル名.ppkを選択します。
今回の場合、test_putty.ppkと作成したので、それを選択します(図30の赤枠)。

図29図30

ここまでの手順の場合、PuTTYで公開認証鍵による接続をするたびにこの操作を繰り返す必要があります。
この操作を毎回するのは面倒なので、設定を保存します。
設定を保存するには、左側にあるツリーメニューのCategoryからSessionを選択し(図31の赤枠①)、Saved SessionsにSession名を入力します(図31の赤枠②)。
例えば、今回の場合はSession名をPuTTY_testにしました。
次に、Saveボタンをクリックすると、Saved Sessionsに登録されているのが確認できます(図32)。
今後、PuTTYで同様の設定を呼び出す場合は、Saved Sessionsに登録したSession名を選択し、Loadボタンをクリックします。
セッションの保存が完了したらOpenをクリックします。

図31図32

Openをクリックするとログインユーザー名の入力を求められます。
この記事では、ログインユーザー名はデフォルトのubuntuなので、ubuntuと入力します(図33)。
次に、パスフレーズの入力を求められるので、公開鍵と秘密鍵の作成時に設定したパスフレーズを入力します(図33)。
パスフレーズに間違いがなければ、Ubuntu Serverにログインしてコマンドを入力できるようになります(図34)。

図33図34

これで、今後はPuTTYで公開認証鍵による接続が可能になります。

余談

PuTTIYも使用してUbuntu Serverにある設定やファイルを操作するにあたり、文字の色が非常に見難いという問題にぶち当たります(図35)。

図35

この文字の色を変更する方法として、以下のサイトを参考にしました。
このサイトでは既にセッションを開始している状態からの変更を紹介していますが、私の環境では設定変更が反映されませんでした。

PuTTYの青文字が見づらいので変更する方法 - Qiita
リモートサーバーへ接続するのに、PuTTYを愛用しているのですが、青色がとにかく見づらい。 なぜこの色なのか理解不可能なほど暗い色が設定されています。 変更は簡単にできる。 タイトルを右クリックして、メニューのChange Set...

このため、セッションを開始する前に設定値を変更しておく必要があります。
やり方としては、PuTTYでセッションを開始する前にCategoryのツリーメニューからWindow→Coloursの順に開き、Select a colour to adjustからANSI Blueを変更する方法します(図36)。
RGB valueの数値を変更すればいいのですが、どういう色か分かりません。
そこで、Modifyをクリックすると色設定が表示されるので、好きな色に変更してください(図37)。
先述した公開認証鍵の接続の図31のようにセッションを保存すれば、それ以降の変更は不要です。

図36図37

また、PuTTYでllコマンドを入力してディレクトリやファイルを表示すると色分けされている場合があります(図38)。

図38

ファイルやディレクトリの色分けには意味があるようで、以下のサイトが参考になりました。

monitor-items-color-linux
monitor-items-color-linux

 

 

最後に

公開鍵認証でRaspberry Pi(サーバー)に公開鍵を転送する方法には、コマンドプロンプト・Windows PowerShell・Windows Terminal・WSLのようなCUI以外に、TeraTerm・RLoginのようなGUIもあり、どれが良いのか混乱します。
とは言え、今回調べてまとめていく中で、今回の記事では紹介できませんでしたが、恐らく、WSLを利用した方が良いのではないかと思いました。
その理由として、WSLで利用できるコマンドを使えば簡単にできることが、OpenSSHやPuTTYではできず、その代わりの方法を探すのに時間と手間が掛かったからです。
また、WSLを使用すれば、Windows 10にUbuntuをインストールでき、Raspberry PiがなくてもUbuntuの操作を練習することができます。
実際、私が調べたサイトの中にはWSLをインストールして、それにさらにUbuntuを組み込んで、PC1台でWindowsとUbuntuとのSSH接続を試しているサイトもありました。
また、以下のサイトではWSLを開発環境として使用することをメリットして挙げています。

WSLでWindows 10にLinux仮想環境を構築 | パソコン工房 NEXMAG
Windows 10では、WSL(Windows Subsystem for Linux)という仕組みにより、Linux環境を構築できます。カーネルインターフェースとユーティリティで構成されるLinuxエミュレータであるWSLについて、その仕組みと構成、UbuntuによるLinux仮想環境の構築方法、WSLのメリットに...

公開鍵認証を実行できるようにするにあたり、OpenSSHでもPuTTYでも公開鍵の転送と登録にパスワード認証を使っています。
そして、公開鍵認証でSSH接続ができるようになったからと言って、パスワード認証ができなくなっているわけではありません。
このため、セキュリティの面で見るとまだまだ安全ではないことが言えます。
今後、Ubuntu Serverに外部から接続できるようにするためには、よりセキュリティを高めるための設定が必要となります。
OpenSSHやPuTTYでSSH接続する説明だけでも随分と長くなってしまいました。
Ubuntu Serverのセキュリティの設定に関してはまた別の記事に調べてまとめたいと思います。

コメント