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。