2018-01-12更新:VSCode派になったので、VSCodeでの方法を追加しました。
背景
僕はコーディングはGUIなエディタでしたいポリシーなので、ローカルだろうがSSHだろうが2段SSHだろうが3段SSHだろうが(Atom|VSCode)を使います。
今回多段SSHのファイルを編集しないといけなくなったため、その時に行った作業をメモしときます。
以下では分かりやすいように踏み台サーバーをserver1、目的のサーバーをserver2としましょう。(いらすとやに圧倒的感謝!)
方法の検討
Atomでリモートのファイルを変更したい時に思いつく方法はこんな感じです。
1. remote-ftpもしくはsftp-deploymentを使う
これらはAtomでFTPやSFTPが使えるクライアントパッケージです。多少の機能の違いはありますが、どちらもローカルとリモートで同期が取れたりするので直接編集するのと変わらない感覚です。
ただこれらには致命的な欠点があります。多段SSHに非対応なのです。大事なことなのでもう一度言います。なんと、多段SSHに非対応なのです。
2. rmate + remote-atomで直接編集する
リモートで、rmate hoge
とするだけでhogeがローカルのAtomで開かれ、編集できます。vimを起動するのと同じ感覚ですね!
普段は1番の方法を使っているのですが、欠点に書いたように多段SSHに非対応なので、今回は2番の方法の手順を書きます。
導入手順
リモートにrmateを導入する
まず通常どおりserver1を踏み台にserver2にSSHしましょう。
rmateを動かすのにRubyが必要なので入っていない人は入れといてください。
rmateをPATHの通ってる場所にダウンロードします。特に理由がなければ/usr/local/bin
で良いでしょう。
$ # server2にて
$ curl -o /usr/local/bin/rmate https://raw.githubusercontent.com/aurora/rmate/master/rmate
$ sudo chmod +x /usr/local/bin/rmate
[Atom] ローカルのAtomにremote-atomを入れる
Atomのパッケージインストーラ(Settings > Install)で"remote-atom"を検索してインストールしましょう。
[VSCode] ローカルのVSCodeにRemote VSCodeを入れる
SSHポートフォワーディングの設定
rmateをつかってローカルのAtomにデータを転送するためにSSHのポートフォワーディングを使います。ポートはデフォルトでは52698番が使わますが、変更も可能です。
ローカルの.ssh/config
に以下の設定を追加します。ファイル未作成の人は作成してください(permissionは600)。また、公開鍵認証はすでに設定してある前提です。
Host server1
HostName server1のホスト名
User server1のユーザー名
IdentityFile server1の秘密鍵のパス
Host server2
HostName server2のホスト名
User server2のユーザー名
IdentityFile server2の秘密鍵のパス
ProxyCommand ssh -W %h:%p server1
RemoteForward 52698 127.0.0.1:52698
使ってみる
[Atom]
Atomを起動した状態で
$ ssh server2
$ rmate hoge
これでhogeがAtomで開かれれば成功です。
[VSCode]
VSCodeを起動した状態でコマンドパレットを開き、Remote: Start Server
を選択します。
$ ssh server2
$ rmate hoge
これでhogeがVSCodeで開かれれば成功です。
おまけ
.bashrc
とかにこれを書いておくとatom感、VSCode感が増します。
alias ratom=rmate
alias rcode=rmate
幸せな(Atom|VSCode)ライフを!
※Sublime Textでもrsubパッケージを使うことで同じことが出来ます。