記事の目的
Remote Developmentを導入にあたって、何点か障壁があったので、共有しようと思います。先に言うと、ホスト側のログインシェルがcsh(tcshも?)では使えません。結局、私は導入できませんでした。
Remote Developmentについて、ここでは説明しません。下記URLで説明されているので参考にしてください。
https://forest.watch.impress.co.jp/docs/news/1183384.html
Remote Development導入の動機
現状の開発では、Windowsでコーディングして、ソースコードをscpでLinuxに送ってbuildしています。さらに、ソースコード管理にgitを使っているので、branchを切り替えたりすると、WindowsとLinuxでたまに同期がうまくとれない場合があり、少々不便でした。できれば、ソースコードは1ヶ所に置きたいと思っており、今回Visual Studio Codeの拡張機能のRemote Developmentを試してみようと思いました。
導入手順
Visual Studio Code Insidersのインストール
ここからダウンロードして、インストールします。
https://code.visualstudio.com/insiders/
Remote Developmentのインストール
Visual Studio MarketplaceからRemote Developmentを検索して、インストールします。このとき、Remote SSH等も一緒にインストールされます。
接続先の設定
Remote DevelopmentをインストールするとVisual Studio Codeの左側にあるアクティビティーバーにサーバに接続しそうなアイコンが追加されるのでクリックします。すると、アクティビティーバーのすぐ右画面にサイドバーが出ます。そこにCONNECTIONタブがあり、その右のほうに設定のアイコンがあるのでクリックすると、設定ファイルを選択できるようになります。ここでは"C:¥User¥username¥.ssh¥config"をクリックします。
エディタで下記のようにHostname等を入力しましょう。これで保存するとサイドバーにあるCONNECTIONにhogeが追加されます。
Host hoge
Hostname hostname
user username
SSHクライアントのインストール
hogeをクリックするとSSHしようとするのですが、その前にSSHクライアントを下記の方法でインストールする必要があります。
https://code.visualstudio.com/docs/remote/troubleshooting#_installing-a-supported-ssh-client
補足すると、まずWindows10とWindows7で方法が違います。Windows10ではOSの機能としてON/OFFできて、おそらくデフォルトでONになっています。Windows7ではGit for windowsをインストールして、PATHをはればOKです。
SSH接続
私の環境ではSSH接続しようとすると、SSHクライアントが途中で落ちる?ような状態となってしまい、このままでは実行できませんでした。これは一度、ターミナルでSSHして、RSA key fingerprintを作成しておけば解消されます。
これでCONNECTIONのhogeをクリック(hogeの右側にでるアイコンでないとダメかも)するとSSH接続がはじまって、Visual Studio Codeの右下に"ⓘ Confirming that hoge is reachable ..."とポップアップがでます。
私はここでつまづいたのですが、これを待っているだけでは接続できません。Visual Studio Codeの統合ターミナル(bash, powershellになっている?)をunameに変更して、"username@hostname's password:"と出力されているので、パスワードを入力します。これで接続!...できるはずでしたが、現実は甘くはありませんでした。
ログインシェルの制約
私の場合は接続できず、下記のようなWarningが出力されました。このWarningはcshとtcshで出力されるらしく、ログインシェルの変更が必須になるようです。私の環境ではログインシェルの変更ができず、泣く泣くRemote Developmentの導入は諦めました。残念です。
Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.
もう一つ問題
私の環境ではもう一つ上手くいかないことがありました。
SSH接続の際、"C:¥Users¥username¥AppData¥Local¥Temp"にあるファイルを参照するのですが、このPathが間違って読み込まれているようでした。
エラーを追っていくと、"C:¥Users¥username¥.vscode-insiders¥extensions¥ms_vscode-remote.remote-ssh-x.xx.x¥out¥extension.js"のprocess.env.TEMPがうまく読み込めていませんでした。
システム変数をcallしているのですが、システム変数TEMPには"C:¥Users¥username¥AppData¥Local¥Temp"が与えられ、間違っていませんでした。設定の変更では回避できずに、process.env.TEMPの箇所に直接、"C:¥Users¥$username¥AppData¥Local¥Temp"を記載して(extension.js修正後、マシンの再起動要)、なんとか動かせました。ログインシェルの問題で、結局動かせなかったのですが...