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

More than 1 year has passed since last update.

Emacsのtrampでpemキー使って多段SSHし、接続先でsudoします。

サーバ、ローカルPCともLinuxを想定しています。


trampとは何か

っていう話ははしょります。

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


ネットワーク構成

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

スクリーンショット 2017-12-20 23.02.59.png

問題は


  • 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。