どっかの高専生の技術備忘録

10割自分の備忘録用のブログ。

WSLにKali Linuxをインストールして、Win-KexでGUI操作するまで

やりたいこと

WSL2上にKali Linuxをインストールして、GUI操作したい。
公式のドキュメントがわかりやすいので、半ば日本語訳のような記事

目次

環境

  • OS: Windows11 Pro
  • WSL: Version2
  • Kernel version: 5.10.102.1
  • Windows Terminal: 1.14.2282.0

0. Windows Terminalのインストール

コマンドプロンプトPowerShellを同時に複数開ける多機能なターミナルソフトです。
他にも、分割表示が出来たり、WSLで新しいLinuxを入れるたびに起動用のインスタンスを自動で追加してくれたりと、詳しくは公式動画をみてみてください。
インストールはMicrosoft Storeから出来ます。
起動はスタートメニューの検索からターミナルと検索するか、Win + Rで開けるファイル名を指定して実行からwtを実行することで開けます。

0-1. Windows Terminalを規定値に設定

デフォルトのターミナルアプリをWindows Console HostからWindows Terminalへ変更出来ます。
Windows Terminalの設定画面Ctrl + ,から、 規定のターミナルアプリ を変更することで出来ます。 画像は英語環境なので、注意してください。

0-2. 管理者権限で起動する方法

起動したいシェルをCtrlを押しながらクリックで管理者として起動出来ます。ちゃんと起動できると、左上に盾のマークが表示されます。

1. WSLの有効化

既に有効化できてる人は問題ないです。また、Windows 11、Windows 10 Version 2004以降を使ってる人はそのまま次のKali Linuxのインストールに飛んじゃって大丈夫です。
ようするに、最新版のWindowsなら次へ飛んじゃって大丈夫です。

PowerShellを管理者権限で起動してください。以下のコマンドたちでWSLの有効化が出来ます。

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

正常終了したら、一度再起動してください。
次に以下のコマンドを入力してください。

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

正常終了したら、また再起動してください。
再起動が終わったらWSLのバージョンを2に設定します、特に理由がない限り2で大丈夫です。
詳しく知りたい人はここから

wsl --set-default-version 2

2. Kali Linuxのインストール

PowerShellを管理者権限で起動してください。 確認が出来たらKali Linuxをインストールしていきます。

wsl --install -d kali-linux

を実行すると、インストールが始まります。

数秒するとユーザー名とパスワードの設定が求められるので、入力してください

Installing Successfullyと表示されれば、インストールが完了です。

3. アップデート

インストールが出来たら、パッケージのアップデートを行います。

sudo apt update

でアップデートを行えます。

3-1. アップデートでGPG鍵関連のエラー出る場合

W: GPG error: https://ftp.yz.yamagata-u.ac.jp/pub/linux/kali kali-rolling InRelease: The following signatures were invalid: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository <devel@kali.org>

こういったエラーが出たら、Kali Linuxの最新版がインストールされていない可能性があります。
MS Storeからアップデートをするか、wingetコマンドでアップデートをしてから、一度インストールしたWSL上のKali Linuxを削除して、初めからやり直してください。

  1. WSL上のKali Linuxの削除 wsl --unregister kali-linux
  2. Kali Linuxのアップデート winget upgrade --id kalilinux.kalilinux

4. ツールのインストール

WSL上へのインストールを早くするために、最小構成でインストールするようです。 なので、ツール一式をインストールします。

sudo apt update && sudo apt install kali-linux-large

途中で各ツールの構成設定を聞かれるので、下に自分の設定を載せておきます。

4-1. Configuring macchanger

自動的にMACアドレスを変更するか?です、Yesを選択しました。

4-2. Configuring kismet-capture-common

ワイヤレス関連のペンテストツールであるkismetの設定です。
sudoで動作させると、バグることがあるので、kismetグループを作るそうです、Yesを選択しました。 Users to add to the kismet groupには自分のユーザー名を入力します。

3-3. Configuring wireshark-common

パケット解析ツールである、wiresharkをsudo無しに使えるようにするか?という設定です、Yesを選択しました。

4-4. Mirror sync in progress?が表示されたときの対処法

リポジトリのサーバーを別のミラーに変えると改善することがあるそうです。 以下のコマンドで、/etc/apt/sources.listのバックアップを取って、https://ftp.yz.yamagata-u.ac.jp/pub/linux/kali/へミラーを変更することができます。 ミラーはここから確認できます。

sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
echo "deb https://ftp.yz.yamagata-u.ac.jp/pub/linux/kali kali-rolling main non-free contrib" >> ~/sources.list
sudo mv ~/sources.list /etc/apt/

5. Win-Kexのインストールと起動

5-1. インストール

Windows上でGUIが使えるWin-Kexをインストールします。
Win-Kexのやってることは、WSL内部にVNCサーバーを作って、WSL側からTigerVNCを起動させて画面を映す、ということをしてます。
以下のコマンドでインストール出来ます。

sudo apt update && sudo apt install kali-win-kex

5-2. 起動

Win-Kexには3つのモードがあります。
初回起動時は接続パスワードの設定を求められます。view-only passwordはnoで大丈夫です。

Windowモード

仮想マシンで起動した時みたいに、VNCのウィンドウの中にKali Linuxのデスクトップが見えます。

kex --win -s -m

Enhanced Sessionモード

Windowsに標準搭載のRDPで接続するモードです、高DPIですが処理速度は劣るそうです。
また、ARMデバイスはこのモードしか使えません。
ipオプションは公式のドキュメントによると、

Note: As of the time of this writing, Windows on Arm contains a bug causing massive packet loss when using “localhost” instead of the IP address to connect to the kali container.
注意:本記事執筆時点では、Windows on Armでは、kaliコンテナへの接続にIPアドレスではなく「localhost」を使用すると、大量のパケットロスが発生するバグが含まれています。

と、書かれています。このせいで、接続のたびにパスワードが要求されます。

kex --esm --ip -s

Seamlessモード

これは、WindowsとKaliがくっついたように表示されるモードです。
Kaliのツールバーが画面上部に表示されます。

kex --sl -s

また、このモードはKaliのパネルがWindowsのメニューバーを覆いかぶしちゃう場合があるので、 パネルの設定から、自動的に隠すを有効にするか、邪魔にならないところへ移動させましょう。

5-3. ステータス確認・停止

ステータス:kex status
停止:kex --kill

5-4. Windows Terminalにインスタンスを追加

各モードごとのインスタンス(プルダウンメニュー)を追加する方法です。
ちなみに、Kaliのアイコンはここの画像をダウンロードしてきて、Windows Terminalに設定すれば、表示されます。
また、開始ディレクトリをKaliのホームディレクトリにしたい場合は//wsl$/kali-linux/home/Kaliのユーザー名と設定すれば大丈夫です。

Windowモード

Name:Kex-Window-Mode
Command line:wsl -d kali-linux kex --wtstart -s

Enhanced Sessionモード

Name:Kex-ES-Mode
Command line:wsl -d kali-linux kex --esm --wtstart -s

Seamlessモード

Name:Kex-SL-Mode
Command line:wsl -d kali-linux kex --sl --wtstart -s

6. 参考

www.kali.org

tarenagashi.hatenablog.jp

WSLにParrotOSをインストールして、xrdpでリモートデスクトップ

目次

やりたいこと

WSL2上にDebianをインストールしてから、そこへ公式のスクリプトを使って、Parrot Security OSをインストールしていきたい。
多分、WSLじゃなくても、Debianがインストールされてるマシンにこの方法で、ParrotOSが入るかも?

環境

  • OS: Windows11 Pro
  • WSL: Version2
  • Kernel version: 5.10.102.1
  • Windows Terminal: 1.14.2282.0

!注意!

この記事ではWindows11前提で進めていきます、WSLの有効化など一部Windows10とは設定方法などが変化していることもあるので、各々読み替えて進めてください。
また、途中クローンしてきたリポジトリ内のファイルを書き換えますが、 2022/08/27時点の情報(commit:fc53611) で書いてます。

Parrotって?

ParrotOSは、ペンテストツール一式が入っていたり、ソフトウェア開発環境が整っていたり、Anonsurfのようなプライバシー保護ツールが入っていたりする、主にセキュリティー、プライバシーに重点を置いた、Debianベースなディストリビューションです。
公式サイトのトップにはこんなことが書かれています。

The ultimate framework for your Cyber Security operations
サイバーセキュリティ運用のための究極のフレームワーク

Kali Linuxとの違い

大きな違いとして、Kali LinuxにはないHome Editionが用意されており、ペンテストツール系は入っていませんが、ソフトウェア開発用のツールや、
プライバシー保護ツールなどが揃っており、日常的にも使えるようなOSです。 また、デスクトップ環境にMATEが使われているので、WSLや仮想マシンで動作させるのには向いてます。 細かい違いはここの記事がわかりやすかったので載せておきます。
この日本語訳記事も需要があったら書いてみようかな

0. Windows Terminalのインストール

コマンドプロンプトPowerShellを同時に複数開ける多機能なターミナルソフトです。
他にも、分割表示が出来たり、WSLで新しいLinuxを入れるたびに起動用のインスタンスを自動で追加してくれたりと、詳しくは公式動画をみてみてください。
インストールはMicrosoft Storeから出来ます。
起動はスタートメニューの検索からターミナルと検索するか、Win + Rで開けるファイル名を指定して実行からwtを実行することで開けます。

0-1. Windows Terminalを規定値に設定

デフォルトのターミナルアプリをWindows Console HostからWindows Terminalへ変更出来ます。
Windows Terminalの設定画面Ctrl + ,から、 規定のターミナルアプリ を変更することで出来ます。 画像は英語環境なので、注意してください。

1. Debianのインストール

PowerShellを管理者権限で起動してください。Windows Terminalを使ってる人はCtrlを押しながらクリックで管理者として起動出来ます。 起動ができると左上に管理者権限で起動していることを示す、盾のマークが表示されます。 確認が出来たらDebianをインストールしていきます。

wsl --install -d Debian

を実行すると、インストールが始まります。 数秒するとユーザー名とパスワードの設定が求められるので、入力してください Installign Successfullyと表示されれば、インストールが完了です。 Windows TerminalのドロップダウンリストにDebianが追加れています。

2. Debianのアップデートと必要ツールのインストール

次に、Debianのアップデートと必要ツールのインストールをしていきます。

sudo apt update && sudo apt upgrade && sudo apt install curl wget gnupg git apt-transport-https ca-certificates

を実行すると、アップデートとツールのインストールが始まります。 done.と表示されれば、正常に終了してます。

3. ParrotOSのインストール

公式ドキュメントのやり方通りではエラーになるので、注意してください。
sudo権限で実行しないとエラーになります!

3-1. リポジトリのクローン

git clone https://github.com/ParrotSec/alternate-install.git

を実行して、リポジトリをクローンしてきます。 終わったら、スクリプトに実行権限を付与します。

cd ./alternate-install && sudo chmod +x ./parrot-install.sh

3-2. sources.listの編集

このままだと、スクリプトを実行してもエラーが帰ってきてしまうので、クローンしてきたリポジトリ内のsources.listを編集します。

echo "deb https://deb.parrot.sh/parrot/ parrot main contrib non-free" >> ./config/etc/apt/sources.list

リポジトリ内のファイルに追記をします。

3-3. スクリプトの実行

ソースリストの編集が終わったら、` sudo ./parrot-install.sh` スクリプトを実行します。

3-4. エディションの選択

スクリプトを実行すると、以下のようにインストールするエディションを選択する画面になります。
今回はSecurity Editonを入れるのですが、Core Onlyを選択しないと正常なリポジトリが入らないので、1を入力します。 エディションを選択すると、ParrotOSのインストールが始まります。 正常に終了するとParrot OS Core Installed!!!となります。 終わったら、念のため

sudo parrot-upgrade

を実行して、アップデートをしてください。

3-5. セキュリティツールとGUIのインストール

sudo apt install parrot-interface parrot-interface-full parrot-tools-full

を実行することで、GUI環境と、Securityエディションにある、ペンテストツール一式がインストールされます。

4. XRDPを使って、デスクトップ環境にアクセス

4-1. XRDPのインストール

sudo apt update && sudo apt install -y xrdp

でxrdpをインストールします。

4-2. リッスンポートの変更

XRDPデフォルトのリッスンポート3389はWSLで予約されているので、3389意外のポートへ変更します。
もちろん、ウェルノウンポート意外のポートにしてください。
仮にAAAA番ポートへ変更するとしたら、以下のコマンドを実行してください。

sudo cp -p /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak && sudo sed -i 's/3389/AAAA/g' xrdp.ini

上のコマンドでは/etc/xrdp/xrdp.ini.bakにバックアップを作っています。 もとに戻す場合はここから復元してください。

4-3. 起動・停止

起動:sudo service xrdp start
停止:sudo service xrdp stop
ステータス確認:sudo service xrdp status

4-4. 自動起動

後日追加予定!!!
WSLでは systemctl が利用できないので/lib/systemd/systemにserviceファイルを作って自動という方法が取れません、なにか別の方法を見つけて後日追記します。

4-5. 接続

XRDPを起動してから、Windows標準のRDPクライアントから接続します。
コンピュータの部分にlocalhost:AAAAを入力し、接続を押すと画面が表示されます。 画面が表示されたら、Debianをインストールした時に設定したユーザー名とパスワードを入力すれば、ログインできます。

参考

jeffmur.dev

RaspberryPiにUbuntuサーバーを入れて公開鍵とGoogle Authenticator使ってSSHするまで

目次

やりたいこと

RaspberryPi 4 Model BにUbuntu Server 22.04を入れて、SSHがしたい。
余裕があれば、ログインに公開鍵とGoogle Authenticatorを用いた2段構えにしたい。 どうせなら、自分なりの自宅内ラズパイSSH鯖の初期設定も書いちゃおう モニタがないので、Windows Terminal上からこれらの設定をしていく。

!注意!

ポート開放をして、外部からSSH出来るようにするHOWTOはこの記事では紹介してません。
ルーターによって設定が異なったり、そもそも契約内容によっては出来なかったりするので、各々調べてみてください。。。m( )m

環境

  • ラズパイ:RaspberryPi 4 Model B
  • SSHするクライアント:Windows 11にデフォで入ってるsshコマンド
  • 入れるOS:Ubuntu Server 22.04 LTS
  • OSイメージ焼くソフト:Raspberry Pi Imager1.7.2

そもそも公開鍵ってなんぞや?って人には。。。

以前、共通鍵暗号方式、公開鍵暗号方式について記事を書きました。
原理は同じなので、公開鍵についてよく知らないって方はこちらの記事を読んでみてください。

Step 0 ~Raspberry Pi Imagerを使ってSDに書き込む~

Raspberry Pi Imager
ホスト名の変更や、WiFiの設定、ユーザー名の設定は右下の歯車から変更できます。
後から、コンソール上で変更も出来ますが、自分は面倒くさがりなので、ここで設定しちゃいます。
下に各設定について書いていきます。

ホスト名

設定すると、mDNSに対応してる環境だと、LAN内ならIP直打ちしなくてもアクセスできるようになります。

SSHを有効化する

今回はSSHのログインに公開鍵認証を使いたいので、ちょこっと詳しく書きます。
1. 鍵ペアの作成
ssh-keygen -t ed25519を叩いて鍵ペアを作ります。
Windows環境だと、C:\Users\ユーザー名\.ssh以下に鍵が生成されます。Linux環境だと、~/.ssh以下に生成されると思います。
2. 公開鍵をautorized_keysに登録
詳細な設定欄から、 SSHを有効化->公開鍵認証のみを許可する->ユーザーhogehogeのためのauthorized_keysに作った鍵ペアの公開鍵を貼り付けてください。
公開鍵は拡張子が.pubになっているものです。間違っても、秘密鍵を登録しちゃだめですよ?
ssh-ed25519 XXXXXXXXXXXXXXXXX hogehoge@HOGEHOGEみたいになってたらそれが公開鍵です。

ユーザー名とパスワードを設定する。

見ての通りユーザー名とパスワードを設定できます。 Ubuntu Serverの場合、何も設定しなくても初回ログインの時にパスワードを変更するように言われますが、ここで設定しちゃうのが楽かもしれないです。

Wi-Fiを設定する

これも見ての通りWi-Fiが設定できます。
今回は有線LANを使う予定なので設定しませんでしたが、チェックを入れた時、PCがどこかしらのアクセスポイントに接続してると自動でSSIDとPWを設定してくれるみたいです。

ロケール設定をする

タイムゾーンの設定をしないと、時刻表記UTCになってしまいます。
また、JISキーボードを使っている人は、ここで設定したほうがいいと思います。

Step 1 ~RaspberryPiの起動と、ログイン~

OSが書き込み終わったらラズパイに電源を投入して、SSHにログインします。
ここからは、以下のようにラズパイの設定をしたと仮定して進めていきます。

ラズパイのIPアドレス:192.168.0.XX
ラズパイのホスト名:hogehoge.local
ユーザー名:hage
作成した鍵ペアのファイル名:id_ed25519, id_ed22519.pub

ラズパイが起動したことを確認したら、早速ログインしていきます。
初回ログインの場合、SSHはデフォルトの22番ポートでリッスンされてるので、
ssh -i C:/Users/ユーザー名/.ssh/raspberry_ed25519 hage@hogehoge.localで接続出来ると思います。
もし、mDNS非対応な環境なら
ssh -i C:/Users/ユーザー名/.ssh/raspberry_ed25519 hage@192.168.0.XXで接続出来ると思います。
初めて接続する時にはこのようにこのホストを信用してもいいか?と聞いてくるので、一応フィンガープリントを確認してyesとタイプしてください。

SSH Login
ログインに成功すると下のSCのように、ラズパイの状態を表示してくれます。
SSH Loged in

小咄~パスワードでSSHにログインしようとどうなるか?~

きちんと、SSHのログインに公開鍵のみ使われているか確認してみると こんな感じに、Permission denied (publickey)となってしまい、PWではログイン出来ないようになっています。

SSH Login Denied

Step 2 ~IPアドレスの固定化~

/etc/netplan/以下にあるyamlファイルを弄れば出来ますが、ルーターの方でも設定が必要なことがあります。
ルーターによって設定が異なると思うので、各自調べてみてください。
sudo nano /etc/netplan/99-netcfg.yamlを叩いてyamlファイルを作ります。
作ったら以下のように書き込んでください

network:
    ethernets:
        アダプタ名:
            dhcp4: false
            addresses: [設定したいIPアドレス/24]
            nameservers:
              addresses: [1.1.1.1,1.0.0.1]
            gateway4: ゲートウェイアドレス
    version: 2
    renderer: networkd

アダプタ名などはip addrコマンドなどを使って調べてみてください。

Step 3 ~SSHのリッスンポートを変更~

ゆくゆくは学校からとかでもSSH出来るようにしたいので、デフォルトの22番ではなく、リッスンポートを適当なものに変更します。
ポート番号は0~65535の中からここに乗っていないものを選びましょう。
もし65535に設定するとしたら /etc/ssh/sshd_configの一番下にこのように追記してください。

#User settings
port 65535

変更したらsudo service sshd restartSSHデーモンを再起動して、設定したポート番号でログイン出来るか試してみてください。
65535番に設定した場合はssh -i C:/Users/ユーザー名/.ssh/raspberry_ed25519 -p 65535 hage@hogehoge.localでログイン出来ると思います。 ちなみに、ポート番号が間違っていると、port 22: Connection refusedのように表示されます。

Step 4 ~ufwを使ってふぁいやーうぉーる

下にチートシートを作ったので、これを参考にして見て下さい。
設定を間違えると、ログインできなくなったりするので、必ず1セッションは残したまま作業してくださいね?

コマンド 内容
sudo ufw enable ufwの有効化
sudo ufw disable ufwの無効化
sudo ufw status 現在設定されているルールとufwの動作状態
sudo ufw default deny ufwホワイトリスト方式で運用する、今回はこっち
sudo ufw defalut allow ufwブラックリスト方式で運用する
sudo ufw allow AAAA AAAAポートへのアクセスを許可する
sudo ufw deny AAAA AAAAポートへのアクセスを拒否する
sudo ufw allow 192.168.0.YY to any port AAAA 192.168.0.YYからAAAAポートへのアクセスを許可する
sudo ufw deny 192.168.0.YY to any port AAAA 192.168.0.YYからAAAAポートへのアクセスを拒否する
sudo ufw delete N N番のルールを削除する

Step 5 ~Google Authenticatorを使って2段階認証~

ここから、Google Authenticatorを使った2段階認証を導入していきます。
目標は公開鍵の認証とGoogle Authenticatorによる6桁コードの入力による、2段階認証です。

0. 対応アプリをDL

Google Authenticatorを使って2FAするので、もちろん対応アプリが必要です。
AndroidならAegis, Google Authenticator, Microsoft Authenticator
iPhoneならGoogle Authenticator, Authy, Microsoft Authenticatorあたりになるかな?
個人的にはAndorid勢ならAegisがおすすめ、Androidの自動バックアップのなかにデータを入れてくれるので、機種変がすんごく楽

1. パッケージの更新とアップグレード

sudo apt update && sudo apt upgradeでパッケージの更新とアップグレードをします。
初めて実行するときは、すごい量のパッケージが更新されていくので気長に待ちましょう。

2. libpam-google-authenticatorのインストール

2段階認証用のPAMモジュールをインストールしていきます。PAMというのは、Linuxのあらゆるログイン処理に関わるモジュールです。
sudo apt install libpam-google-authenticatorちなみに、QRコードを表示させるために、libqrencode4もついでにインストールされます。

3. Google Authenticatorの設定

google-authenticatorを叩いて2段階認証の設定をしていきます。

Do you want authentication tokens to be time-based (y/n)
これは、時間ベースでコードを生成するか?という質問なのでyを入力します。

入力するとこのようにQRコードが表示され上部に画像へのリンク、下に秘密鍵が表示されます。
これをアプリで読み取ったら、Enter from appとなっているところに6桁の番号を入力します。
成功するとこのように、アプリが使えない場合の非常用コード5個が表示され
Do you want me to update your "/home/dtk-qry/.google_authenticator" file? (y/n)と聞かれます。
これは、設定ファイルを書き出すか?と聞いてるので、yを入力します。

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n)

これは、同じコードを複数回使うことを禁止するか?という質問です。yを入れた場合30秒に1回のみのログインになります。
今回は1度に複数のセッションをたてるためにnを入力しました

By default, a new token is generated every 30 seconds by the mobile app.
In order to compensate for possible time-skew between the client and the server,
we allow an extra token before and after the current time. This allows for a
time skew of up to 30 seconds between authentication server and client. If you
experience problems with poor time synchronization, you can increase the window
from its default size of 3 permitted codes (one previous code, the current
code, the next code) to 17 permitted codes (the 8 previous codes, the current
code, and the 8 next codes). This will permit for a time skew of up to 4 minutes
between client and server.
Do you want to do so? (y/n)

これは、アプリとサーバー間で4分の時間のズレを許容するかという質問です。デフォルトは30秒なのでyにしておきました

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting? (y/n)

これは、3回ログインに失敗すると、この30秒で生成されたコードは無効にするという設定です。
ただ、表示されてる数字を3回も間違えることはないと思うので、yを入力します

4. /etc/ssh/sshd_configの編集

SSHのログインに公開鍵認証とチャレンジレスポンス認証を有効にします。
(Google Authenticatorもチャレンジレスポンス認証の1種になります。)
/etc/ssh/sshd_config/の末尾に以下を追記します

ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

また62行目付近にある

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
# KbdInteractiveAuthentication no

KbdInteractiveAuthentication no必ずコメントアウトしてください。最悪、ログインできなくなります。(1敗)
これで、SSHのログインに公開鍵(publickey),キーボードからの入力(keyboard-interactive)が求められるようになります。
しかし、このkeyboard-interactiveには自動でパスワードの入力を求める機能がついているので、それを無効化していきます。

5. PAMの設定 /etc/pam.d/sshd

先のパスワードが聞かれちゃう事象とそもそもlibpam-google-authenticatorを使うように設定をしていきます。
/etc/pam.d/sshdの4行目にある

# PAM configuration for the Secure Shell service

# Standard Un*x authentication.
@include common-auth

@include common-authコメントアウトさせます。これで、パスワードの入力を求められなくなります

# PAM configuration for the Secure Shell service

# Standard Un*x authentication.
# @include common-auth

こんな感じ
そうしたら、末尾に以下を追記します

# User settings
auth required pam_google_authenticator.so nullok

nullokGoogle Authenticatorを設定していないユーザーは公開鍵認証のみでログイン出来るようにするためのオプションです。
ちなみに、入力中の6桁コードを表示させたい場合は

# User settings
auth required pam_google_authenticator.so nullok echo_verification_code

のように、echo_verification_codeを追加してあげてください。

6. SSHの再起動

設定を更新するためにsudo service ssh restartSSHを再起動してあげてください

7. SSHにログインする

ここまでの設定がきちんと出来ていれば、このように、2段階認証用の2桁コードが求められます。
コードを入れてログインができれば、完璧です!!

参考にさせて頂いたところ

hana-shin.hatenablog.com

luciferous-report.hatenablog.com