記事を書いた動機
AWS EC2からGitで認証鍵を用いたsshによるリモートへの操作をするときにssh-agentが必要だったのが発端です。
ssh接続時に使用しているPuttyで上手く対応したかったので調査・検証しました。
想定環境
- Windows
- Puttyがインストール済み
- 認証に使用する秘密鍵をppkに変換済み
※あまり環境依存する内容ではないのでMacでも変わらないかもしれないです
筆者はWindowsでしか確認してません
Puttyとは?
PuTTY(パティ)とは、リモートログオンターミナルクライアントソフトです。
Pageantとは?
PuTTYに付属のソフトウェアです。
これを使うと、サーバーへ接続するためのパスワード入力などの認証処理を、自動化することができます。
今回やりたいこと
sshでサーバーに接続して、接続先のサーバーからさらに認証鍵によるssh接続をしたい場合があると思います。
例)踏み台サーバーからさらに別サーバーにssh接続する
Gitでsshを用いてサーバーにソースを反映させる
そういった場合の対応として一番安直な方法はサーバーに秘密鍵を配置することでしょう。
ただ、多くの場合サーバーには複数人でアクセスすることが想定され、不正なアクセスが行われるリスクへの考慮もしたいと思います。
そのような場合に、ローカルの秘密鍵を読み込んでおいてssh接続先でも使用したいということです。
Puttyを用いる場合にはPageantで実現できます。
このような手段は環境に合わせてPageant以外にもあります。
Pageantに秘密鍵を登録する
-
Puttyの実行ファイルが配置されているフォルダに
pageant.exe
があります。
この実行ファイルでPageantが起動します。 -
ファイルの選択画面が表示されるので登録したい秘密鍵(.ppk)を選択します。
-
タスクトレイのPageantアイコンを右クリックでView Keysを選択します。
選択した秘密鍵が登録されていることが分かると思います。
※pageantのプロセスの起動のたびに上記の登録が必要です
実際に多段ssh接続してみる
試したいサーバーにアクセスして別の接続先にssh接続してみてください。
なにも指定していなくても勝手に認証鍵が処理されるはずです。(Git等も同様)
ちなみにAWS EC2等では外部へssh接続する場合、ssh-agentを起動して接続のたびに認証鍵を登録する必要がありますが、この手順を用いれば不要になります。
Pageantを自動起動させる
勝手には起動してくれません。
常用するのであればスタートアップに登録しましょう。
WindowsであればC:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
にpageant.exe
のショートカットファイルを作成して配置すれば良いです。
また、起動時に自動で秘密鍵を読み込むこともできます。(下記参考)
Pageantに秘密鍵をセットして自動起動する(Windows)
自動的に複数の秘密鍵を読んでPageantを開始する方法
Pageantを用いれば絶対安全??
絶対安全な手段はありません。
Pageantを用いた場合、接続元のPCメモリ上に秘密鍵が生で存在している状態になるため、不正なプログラムが実行されていれば参照される危険はあるようです。
ただし、サーバーに秘密鍵を配置するよりはるかに安全だと思います。