my cognition

書きたいことを書きます。

Windows 上に Visual Studio Code + Cygwin で Ansible を実行する環境をセットアップする

f:id:kitkatayama:20220313172147j:plain:w480

この文書では、

ような環境を構築します。

環境構築後の最終的な操作可能な状態イメージは、以下の画像の通りです。 VSCode 上の Cygwinssh を実行したり、 ansible を実行しています。

f:id:kitkatayama:20220313162635p:plain:w320

Cygwin

まずは、Cygwinのセットアップを行います。

本体のダウンロード

Cygwin はこちらからダウンロードします。 ここでダウンロードする setup-x86_64.exe は、アプリケーションをインストール後削除する一般的なものとはことなり、 Cygwin に再度パッケージを追加する場合に必要となりますので、保管しておきましょう。

https://www.cygwin.com/

パッケージの追加

インストールのガイダンスは、皆さんの環境に合わせてセッティングをしてください。以降の解説は、インストール先をデフォルトの C:\cygwin64 にインストールしたものとして進めます。

パッケージをインストールするためには、 Cygwin Setup - Select Packages 画面で操作を行う必要があります。

ViewFull に変更して、 Search に対象のパッケージ名を入力し、 New カラムからインストールするバージョンを指定します。必要に応じて vimwget などもインストールしておくといいでしょう。

  • ansible
  • git
  • openssh

f:id:kitkatayama:20220313173116p:plain

VS Code のセットアップ

VS Code 上では、ターミナルの設定と、 github.com にプッシュする上で問題となるファイル末尾の改行設定を行います。 また、 VS Code を使用する上での Cygwin 特有の補足がありますので、紹介します。

ターミナル

VS Code のターミナルとして Cygwin を使用するように設定を行います。

VS code ターミナル タブから + の隣の v の部分をクリックし、 既定のプロファイルの選択 を選択します。

f:id:kitkatayama:20220313150012p:plain

プロンプトが表示されるので、検出済みの Cygwin を選択します。

f:id:kitkatayama:20220313150032p:plain

設定後、 Cygwin をターミナルとして選択できるようになります。

f:id:kitkatayama:20220313173306p:plain

ファイル末尾に改行を挿入する設定

VS Code 上で操作を行う場合、デフォルトではファイル末尾に New Line が挿入されません。言葉で説明するとわかりづらいですが、いわゆる github.com 上のコードの末尾に 🚫 が出るやつです。

Ctrl+,(カンマ) を入力して設定を呼び出し、設定の検索files.insert と入力した辺りで対象の設定が表示されます ので、チェックをしましょう。

f:id:kitkatayama:20220313155522p:plain

補足: フォルダーを開く を実行する場合

Windows 上の Cygwin のインストールフォルダ C:\cygwin64 の配下が Cygwin 上のルート / となります。つまり、 C:\cygwin64\usr\local が、 Cygwin 上の /usr/local にあたります。

そのため、例えば、VS CodeCygwin のホームディレクトリを開く場合は、 ファイル > フォルダーを開く から C:\cygwin64\home\<Windows上のユーザネーム> を指定します。

Cygwin の設定

ssh の設定は、cygwin 上で鍵を生成して登録する方法と、現在 Windows 上で使用している鍵を使いまわしたり、コピーする方法が考えられますので、それぞれ解説します。

その後、ターミナル上では Cygwin 特有のプロンプトの設定がなされているため、補足として、他の代表的な環境と合わせるための変更方法を記載しています。

ssh(新規に鍵を生成する場合)

Cygwin 上には openssh がインストールされているので、 ssh-keygen が使用できます。例えば、以下のようなコマンドで鍵を生成します。

ssh-keygen.exe -t ecdsa -b 521 -C "cygwin"

生成した公開鍵を ansible を実行する対象のリモートサーバ内の authorized_keys に追加します。例えば、以下のようなコマンドで鍵を追加することが出来ます。

ssh-copy-id -i .ssh/*.pub user@hostname

また、github.comにも公開鍵を登録します。 以下のコマンドを実行して鍵をクリップボードにコピーした後、 SSH keys / Add new から公開鍵を追加しましょう。

cat .ssh/id_*.pub | clip

ssh(Windows で使用しているssh設定を共有する場合)

VS Code の Remote SSH を使用するなどで、 Windows 上で ssh のセッティングを行っている場合、それらを使いまわしたいことがあると思います。

Cygwin 上では "${HOMEPATH}/.ssh/" にアクセスすることで、Windows 上のユーザの .ssh の情報を取得することができます。

現在の Windows ユーザの .ssh を共有する場合は、以下のようにシンボリックリンクを作成すれば、 Windows 上のユーザの .ssh ディレクトリを Cygwin 上のホームディレクトリの .ssh として利用することが可能です。

ln -s "${HOMEPATH}/.ssh" ~/.ssh

ssh(Windows で使用しているssh設定をコピーする場合)

.ssh を共有はしないまでも、現在の Windowsssh 設定をコピーしたい場合もあると思います。その場合は、以下のように実行すると良いでしょう。

cp -r "${HOMEPATH}/.ssh" ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/*

ssh の接続確認

以上のいずれかの設定を行うことで、接続が可能になります。例えば、 github.com に接続してみましょう。

ssh -T git@github.com

## 成功すれば、以下のような内容が出力される
Hi <username>! You've successfully authenticated, but GitHub does not provide shell access.

補足: プロンプト PS1 の変更

Cygwin インストール直後では、/etc/bash.bashrc に、以下のような PS1 が設定されています。

PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '

この出力を変更したい場合は、 ~/.bashrc に以下のように記述すると良いでしょう。

## Ubuntu っぽく
PS1='\u@\h:\w\$ '

## RHEL っぽく
PS1='\u@\h \W\\$ '

以上で、環境構築は完了となります。お疲れさまでした。

f:id:kitkatayama:20220313162635p:plain:w320

参考文献

(順不同)