😶

踏み台経由で快適 sftp 生活する

2021/08/13に公開

やりたいこと

例えば AWS EC2 な開発環境の場合、ほとんどの場合、以下のいずれかの方法で開発を進めていくと思います。

  1. EC2 に ssh で入って Vim で直接コーディングする
  2. ローカル環境で編集したファイルを SCP ツールやエディタの拡張機能で開発環境に sync する

慣れ親しんだ VSCode 使いたいなー、いちいち ssh して生の Vim めんどっちーなー ってことで、
今回は 2. を採用し、踏み台サーバを経由してローカル PC のエディタでコーディングする方法を設定します。

使用するツール

  • 前述の通り、VSCode を使います
  • sftp の extention を install しておきます

多段 ssh の設定

.ssh/config の編集

.ssh/config
# 踏み台サーバ
Host bastion-server
    HostName xxxxxxxx
    User xxxx-xxxx
    IdentityFile xxxx
    ForwardAgent yes
    ServerAliveInterval 30
  
# 踏み台経由で接続したい(編集したファイルの転送先にしたい)サーバ
Host dev-server
    HostName xxxxxxxx
    User xxxx-xxxx
    IdentityFile xxxx
    ForwardAgent yes
    ServerAliveInterval 30
    ProxyCommand ssh -W %h:%p bastion-server

config 効いてるか確認

ログインできればおっけー。一旦抜けておく。

> ssh dev-server
> exit

VSCode で sftp する

sftp.json の編集

Command + P>sftp で sftp 設定ファイルを作成する。
2回目以降は、 Command + psftp.json でも編集できます。
後述の通り、ポートフォワーディングでトンネル掘っちゃうので、localhost にしてます。

sftp.json
{
    "name": "dev-server",
    "host": "localhost",
    "protocol": "sftp",
    "port": 9999,
    "username": "xxxx-xxxx",
    "remotePath": "xxxx",
    "sshConfigPath": "xxxx",
    "privateKeyPath": "xxxx",
    "passphrase": true,
    "uploadOnSave": true
}

他にも、同期オプション等の細かい設定が可能です。
ぼくはめんどくさがりなので、とりあえず最低限必要なものだけにしておきました。

ポートフォーワードしておく

ターミナルで、9999 番にポートフォワーディングしておきます。
9999 という数字に特に意味はないです。こう、ふわっと浮かんできたんです。9999 という数字が

ssh -A {username}@dev-server -L 9999:localhost:22

これで完了です。
エディタのウインドウ下部に SFTP の文字が出たら成功。

Discussion