実は目的はログインだけではなく、ファイルのバックアップだったりします。近年の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も使用せずにバックアップすると思います。(さてどうやるのでしょう
それではまたお会いしましょう!