読者です 読者をやめる 読者になる 読者になる

iTerm2 の Shell Integration とリモートからのファイルコピー

macOS iTerm2

数ヶ月前に安定板がリリースされたiTerm2のバージョン3系の新機能として、Shell Integrationというものがあります。

この機能を有効にすると(ログインした先の)リモートホストにあるファイルを右クリックして自動的にダウンロードしたりできるとのこと。

www.iterm2.com

かなり前から便利そうなので試そうと思っていたのですが、私の環境ではメニューがグレーアウトされたまま無効になってました。 まああ無くても困らないということでそのまま放置してました。

f:id:atuyosi:20161031230315p:plain

なぜ有効にならないのかわかったので備忘録。

解決策

結論:ローカルとリモートの両方のシェルでShell Integrationをインストールする

You should do this on every host you ssh to as well as your local machine.

ちゃんとevery host って書いてあるし。

iTerm2の拡張機能を呼び出すんだからてっきりMac側(ローカル側)だけだと思ってました……。うわー、なんてダサい……。

設定方法

iTerm2のメニューをクリックするだけでShell Integration機能に必要なファイルがダウンロードされて、設定ファイルも自動編集されます。同じことをローカルのMacと、接続先のunix系OSで実行するだけです。

Mac

iTerm2を起動してメニューから"Install Shell Integration"をクリックする。

f:id:atuyosi:20161031220007p:plain

以下のようなダイアログが表示される。 f:id:atuyosi:20161031220021p:plain

おまけのコマンドを入力するか訊いてくるので好きな方を選ぶ。右側の”Shell Integration & Utilities”を選ぶとターミナルで画像を表示するためのimgcatimglsがついてくる*1

f:id:atuyosi:20161031220024p:plain

わざわざ"in the current shell? "でと確認するのはなぜだろうと疑問に思っていたがローカルだけじゃダメだからか。

必要なファイルがダウンロードされ、環境に応じて.profileまたは.bash_profileに自動的に設定が追記される。


一度exitしてiTerm2のウィンドウを閉じて再度起動し直すとシェルのプロンプトの左端部分にインジケーター(緑色の不等号みたいなもの)が表示されるようになる。


上記で上手くいかないか、どうしてもという場合はコマンドを直接実行することも可能。

$ curl -L https://iterm2.com/misc/install_shell_integration.sh | bash

正体不明のスクリプトをパイプ経由で実行したくない場合は公式ドキュメントを参照。

リモートホスト

リモートホストsshでログインした状態で、上記と同じようにiTerm2のメニューから"Install Shell Integration"をクリックすると、勝手に標準入力にコマンドが入力されて実行されるはず。

一旦ログアウトしてログインし直すと、プロンプトの左端に緑色のインジケーターが表示されるようになる。

この時点でlsでファイルのリストを表示した状態でファイル名を右クリックすると "Download with scp from ..." というメニューが有効になるはず(実際には接続先のホスト名が表示される)。

f:id:atuyosi:20161031225150p:plain


この時点で何かおかしい場合は、.profile.bash_profileに設定が追記されているかを確認する。それでもダメなら素直にググると多分Google Groupあたりが引っかかるのでそちらを参照。

主な使い方

ファイルのダウンロード

リモートホストにログインした状態でlsなどで表示されたファイル名を右クリックするだけ。

f:id:atuyosi:20161031225150p:plain

初回は「このホストに接続してよろしいですか(意訳)」とかパスワードまたは公開鍵認証の秘密鍵パスフレーズとか訊いてくるはず。

f:id:atuyosi:20161031232229p:plain

f:id:atuyosi:20161031223300p:plain

ダウンロードが完了するとデスクトップに通知が表示される。

f:id:atuyosi:20161031231411p:plain

何というかすごい素朴な通知で微笑ましい……。

また、iTerm2のメニュバーのDownloadsからも履歴が確認できるはず。

f:id:atuyosi:20161031231508p:plain

ファイルのアップロード

アップロードしたいファイルをoptionキーを押しながらファイルをiTerm2のウィンドウにドラッグ&ドロップするだけ。

f:id:atuyosi:20161031221707p:plain

ダウンロードの場合と同じように初回は「このホストに接続してよろしいですか(意訳)」とかパスワードまたは公開鍵認証の秘密鍵パスフレーズとか訊いてくるはず*2

f:id:atuyosi:20161031232229p:plain

f:id:atuyosi:20161031223300p:plain

完了するとデスクトップ通知が表示される。

f:id:atuyosi:20161031221641p:plain

また、iTerm2のメニュバーのUploadsからも履歴が確認できるはず。

f:id:atuyosi:20161031221635p:plain

そのほか

Qiitaに日本語の解説があるのでそちらを参照。

iTerm2 3.0 - Shell統合 - Qiita

もしくは、公式ページ参照のこと。

Shell Integration - Documentation - iTerm2 - macOS Terminal Replacement

リモート、ローカルともにインストールしているのに上手くいかない場合は以下を参照(ポート番号を変更しているケースなど)。

Scp not connecting · Wiki · George Nachman / iterm2 · GitLab

まとめ

英語で簡潔にさらっと書かれてるとフツーに見落としてしまいがち。英語力の問題というより注意力の問題。

こういうしょうもない見落としてはまったりすることが時々ある。こういうことの積み重ねで生産性が落ちているわけで、間が悪いと言えばいいのか判断が鈍いというか……。

久しぶりに要領の悪さを再認識したのでした。

それではまた。

*1:他にもおまけコマンドが使えるかもしれないが確認してない

*2:毎回パスフレーズ問い合わせてくるのは何とかして欲しい