SSHログイン時パスワードではなくssh-keyでログインするには

実は目的はログインだけではなく、ファイルのバックアップだったりします。近年のLinuxディストリビューションの多くは、標準で「Secure Shell Server」、sshサービス、sshデーモンが既定で起動しています。

ターミナルによるログイン、つまりリモートでのシェルの起動機能の他に、scpとsftpによるファイル転送機能を利用できます。

特徴として、Secureな通信、暗号化技術を使用しているため、パケットの盗聴はできず、安全にファイルの転送が可能です。

何かファイルをバックアップしたい場合、ftpやnfs等の暗号化されていないプロトコルを使用すると、パケットの盗聴による情報漏えい等の危険性があります。

scpやsftp、そしてsshによる暗号化したストリームの転送を簡単に行えるように。

ssh-keyによるログイン設定を記録させて頂こうと思います。


ssh-keygenによるパスワードなしログイン設定手順

サーバ側にてアカウントを用意

まずは、sshにて接続する先、サーバ側にアカウントを用意しておきます。

今回、こちらがサーバ側になります。

  • サーバ側ホスト名: neo4
  • サーバ側ユーザ名: hide

neo4へのログインは、通常通りパスワードで行っております。

SSDを取り付けたストレージ・サーバになっており、ファイルのバックアップ先に使用する予定です。


パスワードなしでログインできるようにするため、クライアント側でssh-keygenを実行

次はクライアント側です。

  • クライアント側ホスト名: node1
  • クライアント側ユーザ名: core

Kubernetesのコントロール・プレーンのノードです。先程のストレージ・サーバはKubernetesではありません。

やりたいことは、こちらのnode1から、先程のneo4へ、安全にファイルを転送したい。夜間のバックアップに使用するため、パスワードではなく、ssh-keyによる認証を使いたい、ということになります。

こちらでssh-keygenコマンドを実行して、キーペア(秘密鍵と公開鍵のペア)を作成します。

「node1」の部分はコメントです。あとでキーを識別できるように、クライアント側のホスト名を入れました。

ssh-keygen -t ed25519 -C "node1"

暗号化の方式は、強度の高いed25519を選択しました。(ファイルの転送速度は落ちるかも

既定の設定では、~.ssh/id_ed25519ファイルにキーが保存されます。

パスフレーズは空でエンターを入力しました。(パスワードなしで入れるようにするため

次のファイルが生成されました。

  • 秘密鍵: .ssh/id_ed25519
  • 公開鍵: .ssh/id_ed25519.pub

秘密鍵は動かさず。厳重な管理の対象となります。

公開鍵は、行の最後に先程のコメント「node1」が付いています。こちらをサーバに転送します。


公開鍵をクライアントからサーバへ転送

クライアント側で、引き続き操作します。転送は、ssh-copy-idコマンドを使用します。

ssh-copy-id <サーバのユーザ名>@<サーバ名>

サーバのログインパスワードを聞かれますので、入力します。

「キーを1つ追加しました」

「”ssh ‘<サーバのユーザ名>@<サーバ名>'”コマンドで動作確認してね」

と表示されて、正常にキーが転送されたことを確認できました。


パスワードなしでログインできるかどうか確認

ssh '<サーバのユーザ名>@<サーバ名>'

新しく作成した秘密鍵・公開鍵による暗号化が有効になりました。

その結果として、パスワードなしで、このような感じで特定のクライアントからサーバへログインが可能になりました。

サーバ側の~.ssh/authorized_keysファイルを見ますと、確かに先程作成した、node1の公開鍵が追加されています。

こちらのファイルに記載がある鍵は、信頼された鍵という扱いになります。

こちらも厳重な管理の対象になります。何か不審な行が追加されていないか等、確認が必要になります。


ssh接続を行った目的ですが、安全にファイルを転送したい、という理由から行いました。

ftpやnfs、smb等は、パケットをコピーされると、内容が丸見えになり、安全なファイルの転送とは言えません。

今回作成したキーペアを使用して、node1とファイルサーバ間の安全な経路、暗号化されて通信する経路ができました。

パスフレーズなしで入れるようにしましたので、夜間のファイルのバックアップ等に利用が可能になりました。

Kubernetesのポッドからデータを取り出し、安全な経路でファイルサーバにバックアップする手順は、また別の記事にて。

おそらく、scpもsftpも使用せずにバックアップすると思います。(さてどうやるのでしょう

それではまたお会いしましょう!

スポンサーリンク

フォローする

スポンサーリンク