iTerm2 の Shell Integration とリモートからのファイルコピー
スポンサーリンク
数ヶ月前に安定板がリリースされたiTerm2のバージョン3系の新機能として、Shell Integrationというものがあります。
この機能を有効にすると(ログインした先の)リモートホストにあるファイルを右クリックして自動的にダウンロードしたりできるとのこと。
かなり前から便利そうなので試そうと思っていたのですが、私の環境ではメニューがグレーアウトされたまま無効になってました。 まああ無くても困らないということでそのまま放置してました。
なぜ有効にならないのかわかったので備忘録。
解決策
結論:ローカルとリモートの両方のシェルで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"をクリックする。
以下のようなダイアログが表示される。
おまけのコマンドを入力するか訊いてくるので好きな方を選ぶ。右側の”Shell Integration & Utilities”を選ぶとターミナルで画像を表示するためのimgcat
とimgls
がついてくる*1。
わざわざ"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 ..." というメニューが有効になるはず(実際には接続先のホスト名が表示される)。
この時点で何かおかしい場合は、.profile
か.bash_profile
に設定が追記されているかを確認する。それでもダメなら素直にググると多分Google Groupあたりが引っかかるのでそちらを参照。
主な使い方
ファイルのダウンロード
リモートホストにログインした状態でls
などで表示されたファイル名を右クリックするだけ。
初回は「このホストに接続してよろしいですか(意訳)」とかパスワードまたは公開鍵認証の秘密鍵のパスフレーズとか訊いてくるはず。
ダウンロードが完了するとデスクトップに通知が表示される。
何というかすごい素朴な通知で微笑ましい……。
また、iTerm2のメニュバーのDownloads
からも履歴が確認できるはず。
ファイルのアップロード
アップロードしたいファイルをoption
キーを押しながらファイルをiTerm2のウィンドウにドラッグ&ドロップするだけ。
ダウンロードの場合と同じように初回は「このホストに接続してよろしいですか(意訳)」とかパスワードまたは公開鍵認証の秘密鍵のパスフレーズとか訊いてくるはず*2。
完了するとデスクトップ通知が表示される。
また、iTerm2のメニュバーのUploads
からも履歴が確認できるはず。
そのほか
Qiitaに日本語の解説があるのでそちらを参照。
もしくは、公式ページ参照のこと。
Shell Integration - Documentation - iTerm2 - macOS Terminal Replacement
リモート、ローカルともにインストールしているのに上手くいかない場合は以下を参照(ポート番号を変更しているケースなど)。
Scp not connecting · Wiki · George Nachman / iterm2 · GitLab
まとめ
英語で簡潔にさらっと書かれてるとフツーに見落としてしまいがち。英語力の問題というより注意力の問題。
こういうしょうもない見落としてはまったりすることが時々ある。こういうことの積み重ねで生産性が落ちているわけで、間が悪いと言えばいいのか判断が鈍いというか……。
久しぶりに要領の悪さを再認識したのでした。
それではまた。