Emacs trampで多段SSHをpemキー使いながら、接続先でsudoする話。


Emacsのtrampでpemキー使って多段SSHし、接続先でsudoします。
サーバ、ローカルPCともLinuxを想定しています。

trampとは何か

っていう話ははしょります。
ざっくりいうとローカルマシンのEmacsでsshで繋いでリモートファイルをいじる便利なやつです。

ネットワーク構成

以下のように、踏み台サーバを介した後に対象のアプリサーバにつなぎ、sudoすることを考えます。

問題は

  • trampは公開鍵(pemキー)認証に対応していない。
  • 対象のサーバではsudo権限がほしいが、接続先で権限を変えることが出来ない。

pemで認証して踏み台しつつ、sudoするってのは、ググってもでなかったのでここで共有します。
接続先でapacheとか編集したいよね..

sshの設定から。

trampだけで公開鍵認証は使えないので、一旦ssh/configに設定を書き、sshでつながるようにします。
.ssh/configの設定を以下のように行います。

Host bastion
  HostName 172.0.0.0
  User myuser
  IdentityFile /path/to/key1.pem

Host app
  HostName 192.0.0.0
  User myuser
  IdentityFile /path/to/key2.pem
  ProxyCommand ssh -W %h:%p bastion

ProxyCommandにて踏み台を介す設定です。

こうして以下のように疎通をとります。未知の接続先なら一旦接続していたほうが後々便利です。trampで初回接続しようとすると、yes/noきかれるところで止まっていまいます。

$ ssh app
ECDSA key fingerprint is ...
Are you sure you want to continue connecting (yes/no)? yes 脚注
[myuser@app ~]$

emacsの設定

以下のように.emacs.d/init.elを設定します。

(require 'tramp)
(setq tramp-default-method "ssh")

trampでの接続

で、以下のようにC-x C-f (find-file)してappに接続します。

/ssh:app:
or
/app:

通常ユーザ(ここではmyuser)でログインできることを確認。

sudoになる

上記の通り入力すると/home/myuserのdiredが開いているはずなので、その状態でC-x C-fすると以下がミニバッファに出ます。

/ssh:app:/home/user/

これを以下のように編集

/ssh:app|sudo:app:

こうするとrootユーザでログインできてます!
確認はC-M-!からwhoamiを入力するとrootと出ればOK。