SSH エージェントフォワードで多段ログインを実現
[History] [Last Modified] (2015/06/10 00:14:35)
ここは
趣味のプログラミングを楽しむための情報共有サービス。記事の一部は有料設定にして公開できます。 詳しくはこちらをクリック📝
Recent posts
Popular pages

概要

SSH-agent はこちらのページに記載しましたように秘密鍵のパスワード入力を省略する目的で使用することができます。実はそれだけではなく、やはりこちらのページで紹介した SSH config による多段ログインに相当する機能も提供しています。これを特に SSH エージェントフォワードとよびます。

ログイン実験

一段目

秘密鍵 mykey.pem で認証してログインできるホストが 2 つ存在しています。

  • stp-0001
  • inner-0001 (172.30.3.239)

ローカル PC に mykey.pem を設置すれば stp-0001 に SSH ログインできます。

Last login: Tue Jun  9 13:48:02 2015

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\\___|___|

https://aws.amazon.com/amazon-linux-ami/2015.03-release-notes/
[ec2-user@ip-172-30-0-44 ~]$

このあと inner-0001 にログインしようとしても stp-0001 には mykey.pem が存在しないため失敗します。

[ec2-user@ip-172-30-0-44 ~]$ ssh 172.30.3.239
Permission denied (publickey).

ところがローカル PC から stp-0001 にログインするときに以下の二つの設定を行っておけば、stp-0001 にログインしたときの認証情報を inner-0001 へのログインに流用できます。

  • ローカル PC で SSH-agent を起動して秘密鍵を覚えさせておく
  • stp-0001 へのログイン時に ForwardAgent = yes に相当するオプションを付与

上記設定を行って再度試してみます。

[ec2-user@ip-172-30-0-44 ~]$ ssh 172.30.3.239
Last login: Tue Jun  9 14:03:32 2015 from 172.30.0.44

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\\___|___|

https://aws.amazon.com/amazon-linux-ami/2015.03-release-notes/
[ec2-user@ip-172-30-3-239 ~]$

二段目 (続き)

ローカル PC で起動した SSH-agent は多段に転送して流用することができます。inner-0002 を追加しました。

  • stp-0001
  • inner-0001 (172.30.3.239)
  • inner-0002 (172.30.3.59)

通常は inner-0001 から inner-0002 にログインしようとしても失敗します。

[ec2-user@ip-172-30-3-239 ~]$ ssh 172.30.3.59
Permission denied (publickey).

ところが「stp-0001 から inner-0001 へのログイン時に ForwardAgent = yes に相当するオプションを付与」しておくとログイン情報が流用できるため、以下のように成功するようになります。

[ec2-user@ip-172-30-0-44 ~]$ ssh 172.30.3.239 -A
[ec2-user@ip-172-30-3-239 ~]$ ssh 172.30.3.59
Last login: Tue Jun  9 14:17:56 2015 from 172.30.3.239

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\\___|___|

https://aws.amazon.com/amazon-linux-ami/2015.03-release-notes/
[ec2-user@ip-172-30-3-59 ~]$

SSH-agent を利用するための設定

RLogin (Windows) の場合

Rlogin の場合は GUI で設定します。設定の「サーバー」→「プロトコル」→「SSH」→「エージェント転送を有効にする」にチェックを入れます。これだけで「SSH-agent の起動して秘密鍵を覚えさせる」および「ログイン時に ForwardAgent = yes に相当するオプションを付与」の両方が実現されます。

Uploaded Image

Putty (Windows) の場合

付属ソフト pagent.exe を起動して常駐させておき、秘密鍵を登録します。これによって「SH-agent の起動して秘密鍵を覚えさせる」に相当する設定が完了します。更に設定から「Connection」→「SSH」→「Auth」→「Allow agent forwarding」にチェックを入れれば「ログイン時に ForwardAgent = yes に相当するオプションを付与」の設定が完了します。

OpenSSH の場合

SSH-agent の起動

次回ログイン時には自動で起動します。初回、または複数の ssh-agent を起動してしまって kill した後に必要な操作です。

$ ssh-agent > ~/.ssh-agent
$ ps auxw | grep agent
ec2-user  2682  0.0  0.0  53064   564 ?        Ss   14:29   0:00 ssh-agent
ec2-user  2684  0.0  0.0 110404   860 pts/0    S+   14:29   0:00 grep agent

新規に起動した場合はエージェントに鍵を登録します。

$ source ~/.ssh-agent
$ ssh-add ~/.ssh/mykey.pem

次回以降のログイン時には環境変数の設定ファイルを読み込むだけです。

$ source ~/.ssh-agent

これらの処理を自動的にすべて行うためのシェルスクリプトはこちらです。

SSH-agent フォワードの設定

二つの選択肢があります。

  • ~/.ssh/config に ForwardAgent yes と記載する
  • -A オプション を付与して ssh ログインする (例: $ ssh ec2-user@172.30.3.239 -A)
Related pages