LoginSignup
18
8

More than 3 years have passed since last update.

VSCodeプラグインsftpを使って踏み台サーバを超えて同期をする

Posted at

はじめに

VSCodeには、便利なプラグインがたくさんあります。
その中の一つに、"sftp"というプラグインがあって、これを利用することによって、ローカルで作業した内容をVSCode内でかんたんにリモート(サーバー上)にアップロードすることができる、というものです。

この記事の対象者は、タイトル通りですが、踏み台サーバーを超えてリモートのファイルを"VSCode"で編集したいという人
つまり

Local - Server1 - Server2 (Server2へLocalから直接アクセスすることはできない)

という状態において、Server1を意識することなく、Server2と同期を取って編集したい、という人が対象になっています。

環境

Local : Ubuntu 18.04 LTS
Server1 : redhat:enterprise_linux:7.4
Server2 : SUSE Linux Enterprise Server 12 SP2
      Ubuntu 18.04.2 LTS(WSL環境)

json設定

SFTPプラグインのインストール方法等は、別のわかりやすい記事がたくさんあるので、割愛させていただきます。(私はこの記事を参考にさせていただきました)
Visual Studio Codeでリモート開発環境と完全同期する:Qiita

踏み台サーバーを超える場合の記述方法はsftpプラグインの解説ページにありました。:SFTP
これは、一つの踏み台サーバを超える場合で、複数の踏み台サーバを超えたい場合は、URL先に乗っているので確認してみてください。

sftp.json
local -> hop -> target

{
 "name": "target",
 "remotePath": "/path/in/target",

 // hop
 "host": "hopHost",
 "username": "hopUsername",
 "privateKeyPath": "/Users/localUser/.ssh/id_rsa", // The key file is assumed on the local.

"hop": { // target 
  "host": "targetHost",
  "username": "targetUsername",
  "privateKeyPath": "/Users/hopUser/.ssh/id_rsa", // The key file is assumed on the hop. 
 } 
}

この設定で動作した方は、公式が出している方法なのでそのまま利用する形で良いと思います。(なお、コメントアウトされている場所はjsonではエラーになってしまうので、実際に使う場合は消しておきましょう。ターゲットのキーは、Localではなくhop(踏み台サーバ)において置く必要があります。)

この設定のままでは私の環境では動かなかった。

この設定のままでは、私の環境ではちゃんと踏み台サーバを超えてくれませんでした。(次のようなエラーが出ました)

[05-16 19:48:41] [info] hopping from Server1 to Server2
[05-16 19:49:48] [info] config at (working Directory) {jsonの設定の内容}
[05-16 19:49:48] [error] Error: No response from server
    at Socket.<anonymous> (/*/node_modules/ssh2/lib/client.js:319:15)
    at Socket.emit (events.js:182:13)
    at TCP.Socket._destroy._handle.close [as _onclose] (net.js:596:12) 

一行目のinfoを見る限り、踏み台サーバまではたどり着いているようなので、そこからServer2に行くことに失敗しているみたい。
そこで、いくつかの設定を追加してみました。

sftp.json
{
  "name": "Server2 via Server1",
  "remotePath": "/home/remotePath",
  "host": "Server1 IP Address",
  "username": "Server1 username",
  "uploadOnSave": true,
  "hop": {
    "host": "Server2 IP Address",
    "username": "Server2 username",
    "privateKeyPath": "/Server1/.ssh/key",
    "passphrase":true,
    "port":22
    }
}

主な変更点は、"hop"の"port"と、"passphrase"の項目追加でした。
SFTPのデフォルトのポートは22で、指定しない場合22になるらしいのですが、どうやら踏み台サーバの場合では私の環境では超えてくれませんでした。また、"passphrase"も認証するときに必要になるみたいです。

この変更で踏み台サーバを超えて編集することが私の環境でもできるようになりました。
解決するまでに少しはまってしまったので、もし誰かの役に立てば幸いです。

18
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
8