Showing posts with label Cygwin. Show all posts
Showing posts with label Cygwin. Show all posts

2009-11-19

MsysGit で ssh のパスフレーズがパーミッション・エラーで使えない不具合 続報

MsysGit 付属の GIT BASH で ssh の passphrase を使おうとするとエラーになる。この不具合について、Windows の環境変数「CYGWIN」を削除するとよいとのエントリーを一か月程前に書いた。

この件について、追加情報を見つけた。

せっかくなので訳しておく。

Cygwin can emulate more Unix-like file permissions but it is not enabled by default. One has to add "ntea" to CYGWIN variable in the cygwin.bat file in the cygwin root directory, which tends to be C:\cygwin. For example I have:

set CYGWIN=tty ntea

in C:\cygwin\cygwin.bat With this, "chmod 0600 .id_rsa" works as in Unix. ssh stopped complaining and I could ssh w/o entering a password. Happy ending.

(訳) Cygwin は Unix に似たファイル・パーミッションを (Windows において) エミュレートできますが、デフォールトではその機能がオフになっています。そこで、「ntea」という値を CYGWIN 変数に追加しましょう。これは cygwin のルート・ディレクトリーにある cygwin.bat ファイルに書けば良いです。cygwin のルート・ディレクトリーは通は c:\cygwin に設定されているでしょう。例えば、私は C:\cygwin\cygwin.bat に次のように設定しました。

set CYGWIN=tty ntea

この設定を入れると、「chmod 0600 .id_rsa」が Unix と同じように動きました。ssh は文句を言う (警告を出す) ことがなくなり、パスワードなしで私はログインできるようになりました。ハッピー・エンディング

やはり、環境変数 CYGWIN の ntea という値がキモみたい。GIT BASH で、同じやうに環境変数「CYGWIN」の設定をすればいいのかどうかは試してない。とりあえず、ntea が何なのかが分かった。少しモヤモヤがなくなった気分。

2009-10-16

MsysGit で ssh のパスフレーズがパーミッション・エラーで使えない不具合

MsysGit 付属の GIT BASH で、過去記事の通りパスフレーズの設定を行ない ssh $host したら、次のやうなエラーが出て困った (ワーニングは下記の参照元をコピペした)。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for '/Users/xxx/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /Users/xxx/.ssh/id_rsa
Permission denied (publickey,gssapi-with-mic).

.ssh/id_rsa ファイルのパーミッションが 600 になっていない。危険なので ssh 接続は行なわなかったよ。という警告。

GIT GUI 付属の chmod でパーミッションを変更しやうにも、パーミッション値が変わらない。

git-bash$ cd .ssh
git-bash$ ls -l id_rsa
-rw-r--r-- 1 masayuki ataka 2 2009-09-16 06:20 .ssh/id_rsa
git-bash$ chmod 600 id_rsa
git-bash$ ls -l id_rsa
-rw-r--r-- 1 masayuki ataka 2 2009-09-16 06:21 .ssh/id_rsa

Cygwin 付属の chmod ならパーミッションを変更できた、やうに見えるけど

cygwin-bash$ git-bash$ cd .ssh
git-bash$ ls -l id_rsa
-rw-r--r-- 1 masayuki ataka 2 2009-09-16 06:22 .ssh/id_rsa
git-bash$ chmod 600 id_rsa
git-bash$ ls -l id_rsa
-rw------- 1 masayuki ataka 2 2009-09-16 06:23 .ssh/id_rsa

GIT GUI 付属の ls で確認するとパーミッションが元に戻ってる。

git-bash$ ls -l id_rsa
-rw-r--r-- 1 masayuki ataka 2 2009-09-16 06:21 .ssh/id_rsa

そのせいか、GIT BASH 経由で ssh 接続にパスフレーズが使えない。

困った

解決方法

原因を一つに絞り込めていないのだけど、次の作業を行なったら不具合が解決した。

  1. Windows の環境変数「CYGWIN」を削除した
  2. Windows の環境変数「HOME」を削除した

両方の環境変数を削っても、Cygwin 及び MsysGit を使う上で特に問題は起きていない。

時間がなくて調べ切れてない。もしかしたら「HOME」を削除しなくても良いかもしれない。あと、環境変数「CYGWIN」には「ntsec」という値が設定されていたのだけど、その値の意味も調べてない。他の値に変更するだけでも動いたのかもしれない。詳しい方、コメント下さい。

2009-10-15

Cygwin の黒いターミナルにクリップボードの中身を貼り付ける

Cygwin で bash ターミナルを開くと、Windows のクリップボードの中身を貼り付けられなくて苦労する。

そこで重宝するのが、getclip といふコマンド。

$ getclip
Windows でコピペしたごにょごにょ

Linux コマンドをウェブ・ページからコピペして実行したい? そんな時はこんなコードを .bashrc に埋め込んでおく。

alias p=`getclip`

「p」と入力するだけで、クリップボードの中にコピペしたコマンドを実行できる。

Git Bash にもどうぞ

Cygwin さえ入っていれば、Git Bash (MsysGit より) からでも getclip を呼べて便利。長〜い git clone のための URL をコピペできなくて泣きさうになってた人は嬉ぶはず。

Git Bash と Cygwin 両方入れてる人がどれ程いるかは疑問だけど :p

2008-06-23

Cygstart -- Cygwin からフォルダーを開く、Word ファイルを開く

昨日のエントリーの続き:

Cygwin を使いこなしていても、時々、Winodws のエクスプローラー (explorer) でカレント・ディレクトリーを開きたくなることがある。

clmemo@aka: Cygwin のカレント・ディレクトリーを Explorer で開かせるシェル・スクリプト より引用

ぼくは、cygpath コマンドを explorer に渡す shell script を組む方法をエントリーに書いた。そしたらコメントで、cygstart コマンドを教えてもらった。cygstart は、ぼくの書いた shell script 以上のことをもっとスマートにやってくれるコマンドだった。

cygstart コマンド

コマンド cygstart に引数を渡すと、Windows のデフォールトの動作が呼び出される。言い換えると、エキスプローラーで対象をダブル・クリックした時と同じ結果が得られる。

フォルダーを引数に取ると、そのフォルダーがファイル・マネージャーで開かれる。

$ cygstart foo/

Word ファイルを引数にすると、Microsoft Word が起ち上がって Word ファイルが開かれる。Excel, Power Point も同じ感じ。

$ cygstart bar/hoge.doc
$ cygstart ~/fuga.xls
$ cygstart ~/doc/foo.ppt

mp3 などの音楽ファイルなら、Windows Media Player が起ち上がる。もし、音楽ファイルを他の iTunes や WinAMP で開く設定にしているなら、Windows Media Player の代わりにそちらが起動する。動画ファイルも同様。

$ cygstart sample.mp3
$ cygstart sample.avi

URL を引数に取ると、デフォールトのブラウザーが起ち上がる。

$ cygstart http://www.google.co.jp/

従って、カレント・ディレクトリーを Windows の GUI で開きたくなったら、次のコマンドを実行すればいい。

$ cygstart .

cygpath コマンドをごちゃごちゃしたりするより、cygstart の方がスマート。shell script みたいに難しいこと考えなくてもいい。とてもいいコマンドを教わった。手離せなくなりそう。

2008-06-22

Cygwin のカレント・ディレクトリーを Explorer で開かせるシェル・スクリプト

Cygwin を使いこなしていても、時々、Winodws のエクスプローラー (explorer) でカレント・ディレクトリーを開きたくなることがある。

例えば、GUI 派な人にカレント・ディレクトリーを見せる時とか、TortoiseSVN で Subversion を GUI から利用してる場合とか、ダブル・クリックして開く方が早い Windows 系のファイル (ex. Microsoft Office, Visio, mp3, mpeg, etc.) があるなんてケース。

こういう場合、explorer コマンドにカレント・ディレクトリーの path を渡してやればいい。path は Cygwin の「/cygdrive/c/cygwin/home/...」といふ形式じゃなくて「c:/cygwin/home/...」の形。これは、cygpath というコマンドを使って取得できる。

ぼくの環境だと、explorer コマンドの入ってる c:/WINDOWS/ に PATH が通っていなかった。それに、cygpath のコマンドを手で入力するのが面倒。

といふわけで、一行 shell script を作った。以下、ソース。適当な名前で保存して、実行権限を与えられたし。

#!/bin/bash

/cygdrive/c/WINDOWS/explorer.exe "$(cygpath -wa `pwd`)"

2007-09-28

Cygwin で C 言語コンパイル環境を整える

友人が東芝のノート PC を買って、C 言語を始めやうとしている。おすすめのコンパイラーを聞かれたので、フリーの Cygwin に gcc が入っているよと答えた。せっかくなので、初めて Cygwin を使う人向けにインストール記事を書いてみる。

Cygwin とは

Cygwin とは、Linux のツール群を Windows に移植した、一種の環境を指す (そもそも Linux 自体が Linux カーネルとツール群から成り立っている)。公式ページの言葉を引くと

Cygwin is a Linux-like environment for Windows. It consists of two parts:

  • A DLL (cygwin1.dll) which acts as a Linux API emulation layer providing substantial Linux API functionality.
  • A collection of tools which provide Linux look and feel.

Cygwin は、Windows 向けの Linux 風環境である。Cygwin は二つのパートから構成されている: 一つは、DLL (cygwin dll) で、Linux API のエミュレーション・レイヤーのように働き、実質的な Linux API の機能を提供する。もう一つはツール群で、Linux のルック & フィールを提供する。

Cygwin Information and Installation より引用

となる。

昔は Cygwin がサポートしているツールの数も少なく、一つの単体ソフトとして提供されていた。インストラーをダブル・クリックするとツール群が全てインストールされていた。

けれど、サポートするツールの数が増えるに従って、全てのツールをインストールするのは非効率的になった。そこで、今の Cygwin はインストーラーからインストールするツールを選べるやうになっている。

Cygwin のインストール

まずは、Cygwin のインストーラーをダウンロードする。

Cygwin Installer 上記ページから、「Install or update now!」リンクをクリックして、ダウンロード。

そしたら、インストーラーをダブル・クリックしてインストール開始。

「次へ」をクリック。

上から順に「ネットからインストール」「ローカルに保存 (インストール作業は行なわない)」「ローカルに保存したツールをインストール」。ネットの回線が細い時などは、インストール作業を「ローカルに保存」「保存したツールのインストール」といふ風に二回に分ける。普通は「ネットからインストール (デフォールト)」のままでよいでせう。

Cygwin のインストール先指定。デフォールトは「c:\cygwin」。D ドライブを持っているなら、「d:\cygwin」に変えてしまってもよいかも。

「Install For」と「Default Text File Type」は、初めのうちはいじらない方がいい。

インストールするツールを一時保存する場所。デフォールトは「c:\tmp」。特に理由がない限り、ここもいじる必要なし。

インターネットへの接続方法を指定。ここも、「Direct Connection (直接続)」のままでいい。

もし、大学や会社でインストールしようとしていて、ファイヤーウォールやプロキシの関係で Cygwin インストールに失敗するようなら、「Use IE5 Settings」を選ぶ。

ダウンロード元の指定。これは、日本のサイトを選びませう。サイトの最後が「.jp」になってるものを選ぶ。もし、ダウンロードが遅くてしょうがなければ、他のサイトを選び直す。海外のサイトさえ選ばなければ、それほど気にかける必要はない。

パッケージの選択。デフォールトは、minimum install (最小限のインストール) になっている。確か、このままだと gcc はインストールされなかったはず。「Devel」のカテゴリーをクリックして、「Default」から「Install」に変更する。

※ 「Editor」の項目の「Emacs」も「Install」すると幸せになれるかもしれない。

パッケージの依存関係を調べて不足分をインストールするかどうか聞いている。素直に「次へ」

するとインストールが始まる。あとはひたすら待つ。かなり時間がかかると思う。

インストールが終わったら、デスクトップにアイコンが出来る。

C 言語で Hello, World!

Cygwin がインストールされたら、C のソース・ファイルをコンパイルできるか試しませう。

サンプル・ファイルは以下の通り。

#include <stdio.h>

int main (void)
{
  printf("Hello, World!\n");
  return 0;
}

これを sample.c という名前をつけて、c:\cygwin\home\USERNAME 以下に置く。ここで USERNAME は、ウィンドウズのログイン・ユーザー名。

Cygwin を起動して、コンパイル。

$ gcc sample.c

コンパイルが通ったら、プログラムを実行。

$ ./a.exe
Hello, World!

「Hello, World!」と出たらおなぐさみ。