su/sudoした先でエージェントフォワードを使うためのたった1つのこと
例えばServerA、ServerBがあって、自マシン->ServerA->ServerBのようにServerAを踏み台にしてServerBにSSHしたいとする。
エージェントフォワードを使わない場合、ServerAにServerBにログインできる秘密鍵を置かなければならないが、セキュリティ上置きたくない場合もある
。
エージェントフォワードを使えばServerAに鍵を置く必要はなく、自マシンに鍵を置いておけばよい。
ただしServerAにログインした後、su/sudoコマンドでroot等の他ユーザーになってそこからsshする場合、エージェントフォワードが効かなかったのでちゃんと調べてみた。
suを使うかsudoを使うかで遣り方が違うのでメモ。
前提
エージェントフォワードを有効にしてServerAにログインした場合、以下のような環境変数が設定される。$ env
-省略-
SSH_AUTH_SOCK=/tmp/ssh-egzmmXXXXX/agent.XXXXX
-省略-
詳しい仕組みは調べていないが、この環境変数がポイントの模様。
suの場合
普段suを使ってrootになる場合、このようにコマンドを打っていた$ su -
-をつけるとそのユーザーの環境変数が設定しなおされ、SSH_AUTH_SOCKが消されるためエージェントフォワードができない。
ServerA$ su ServerA# ssh ServerB ServerB#
sudoの場合
sudoの場合、元の環境から引き継ぐ環境変数がsudoの設定で決まっているが、SSH_AUTH_SOCKは初期設定では引き継がれない。ServerA$ sudo su -l -c "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK; bash" ServerA# ssh ServerB ServerB#
これで解決。