Help us understand the problem. What is going on with this article?

gcloud compute ssh でも tramp したい!

More than 3 years have passed since last update.

Tramp Mode について

みなさんリモートマシンのファイルを直接編集したいときは何を使っていますか? 私は Tramp Mode を使っています.いつものEmacsでリモートのファイルが編集できて本当に便利.TrampModeを使い始めてからemacs: command not found でヨヨと泣き崩れる……なんてことはなくなりました.Tramp Modeがあって本当に良かった.

gcloud compute ssh について

話は変わりますが,みなさんはGCEのインスタンスへsshでログインするときはどうしていますか? 私は gcloud compute ssh <instance name> を使っています.<instance name> だけでログインできて本当に便利.適切に設定されていれば鍵の自動配布もしてくれますから苦労がありません.gcloud コマンドがあって本当に良かった.

さて

ここからが問題です.GCE で tramp-mode を使いたいときはどうすればいいのでしょうか.gcloud compute sshssh のラッパコマンドで,裏でインスタンスのドメイン取得や鍵の選択などよしなにやってくれているわけですが,tramp-mode を使う時だってその仕組みに乗っかりたいわけです.

tramp-mode でファイルを開く際のパスを思い返してみますと, /ssh:hostname:path といった入力をすることと思います.となると当然気になるのは先頭の ssh: でして,少し調べると他にも rsyncsmb など様々なバックエンドがサポートされていることがわかります.こうなってくると直感的に独自定義の方法が追加できそうですね.gcloud compute ssh の場合はそれ自体が ssh のラッパですから,ほとんどエイリアスみたいなものでいいはずです.それではやっていきましょう.

tramp-mode の ユーザマニュアル1を開いてみますと,5.10 Using Non-Standard Methods という記述がありますからこれを読みます.すると help を開いて v キーを押下し,tramp-methods と入力して RET をキメろと言われますからその通りにします.

Screen Shot 2016-04-17 at 16.44.03.png

なにやら出てきました.良かったですね.適当によみつつスクロールしていきましょう.

Screen Shot 2016-04-17 at 16.44.38.png

おやおや,なにやら参考になりそうな感じです.恥を忍んで申し上げますと,私はEmacs Lispが書けません.なので余計なことを考えないように意識を殺して適当にinit.elへコピペしてそれらしく編集してみます.

(require 'tramp)
;; for gcloud ssh
(add-to-list 'tramp-methods
  '("gcssh"
    (tramp-login-program        "gcloud compute ssh")
    (tramp-login-args           (("%h")))
    (tramp-async-args           (("-q")))
    (tramp-remote-shell         "/bin/sh")
    (tramp-remote-shell-args    ("-c"))
    (tramp-gw-args              (("-o" "GlobalKnownHostsFile=/dev/null")
                                 ("-o" "UserKnownHostsFile=/dev/null")
                                 ("-o" "StrictHostKeyChecking=no")))
    (tramp-default-port         22)))

こんな感じになりました.この後適切な処置2を施し C-x f /gcssh:<instance name> と入力するとあら不思議! インスタンスのファイルを直接編集できるようになります.

課題感

default project の default zone ならこれで良いのですが,その辺りを指定する場合,つまり gcloud compute ssh --project <project id> --zone <zone> <instance name> みたいな指定で繋ぎたいときはどうしましょうね.どうしたらいいのでしょうか.教えて偉い人.

config-ssh を使えばいいのでは? という声もありますが,あれなんか ip 変わったとき追従できない気がしていて,ちゃんと試してないんですけどどういう挙動するのでしょう.気になってます.


  1. https://www.gnu.org/software/tramp/#External-methods 

  2. 設定の再読み込みとか.gcloud コマンドのパスがうまく通ってないってパタンもあるとおもいますから,よしなにやってあげてください. 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした