Parallels Desktop 11 for Mac の Ubuntu 15.10 上で Swift をビルド、example のコンパイル、GitHub にある Apple のリポジトリを全てダウンロードする自作スクリプトとコマンド git の補助スクリプト集を紹介。

以前の書き込みから随分経ってしまいました。新年を跨ぎましたが、今年も宜しくお願いします。

Swift.org - Welcome to Swift.org
https://swift.org/

Swiftオープンソースとして公開されてから、2ヶ月程経ちました。コンパイラの仕組みについては、以前から興味があったのでビルドに挑戦してみました。ただし、OS X 側の環境を汚したくないので、Parallels Desktop 11 for Mac の仮想環境で Ubuntu 15.10 をインストールして Swift をビルドしてみました。swift-package-manager を使った example のコンパイルGitHub にある Appleリポジトリを全てダウンロードするスクリプトとコマンド git の補助スクリプト集を紹介したいと思います。

最初に自作スクリプトを下記URL で公開しておきます。詳細は、アーカイブに含まれる ReadMe.rtfd ファイルとブログの後半を参考にしてください。

GitHub にある Appleリポジトリを全てダウンロードする自作スクリプトとコマンド git の補助スクリプト集。
http://kyoshiaki.sakura.ne.jp/osx/Sample/Apple.zip

Parallels Desktop 11 for MacUbuntu 15.10 の仮想環境を作成。

まず、最初に Linux ディストリビューションUbuntu 15.10 をダウンロードする必要があります。

The leading OS for PC, tablet, phone and cloud | Ubuntu
http://www.ubuntu.com/
Download Ubuntu Desktop | Download | Ubuntu
http://www.ubuntu.com/download/desktop

上記 URL から (ここでは、英語版での解説になります。)

Ubuntu 15.10
64-bit

‘ダウンロード’ ボタンをクリックして、ファイル ubuntu-15.10-desktop-amd64.iso をダウンロードしてください。

Parallels Desktop 11 for Mac を起動し、メニュー/ファイル/新規… を選び、イメージファイルとして ubuntu-15.10-desktop-amd64.iso を選択してインストールしてください。

インストールに成功したら、Ubuntu 15.10 を Software Updater で最新の状態にしてください。

Ubuntu 15.10 上で swift コマンドを実行できる環境を作成。

次に Ubuntu 上で swift コマンドを実行できる環境を作成します。詳しい解説は、

Swift.org - Download Swift
https://swift.org/download/
Linux
https://swift.org/download/#linux

を参照してください。上記 URL の

Latest Development Snapshots
Linux	Ubuntu 15.10 Swift 2.2 Snapshot (Signature) January 11, 2016

から Ubuntu 15.10 Swift 2.2 Snapshot のリンクを Ubuntu 15.10 上の Firefox などのウェブブラウザでクリックして、ファイル swift-2.2-SNAPSHOT-2016-01-11-a-ubuntu15.10.tar.gz をダウンロードしてください。さらに (Signature) のリンクをクリックして swift-2.2-SNAPSHOT-2016-01-11-a-ubuntu15.10.tar.gz.sig ファイルもダウンロードしてください。Signature ファイルはダウンロードしたファイルが改変されていないか検証するために使います。

(最新の Snapshot をダウンロードしてください。2016/01/17(Sun) 現在、Ubuntu 15.10 Swift 2.2 Snapshot (Signature) January 11, 2016 が最新です。)

Ubuntu 上で Terminal を起動し、

~ $ sudo apt-get install clang libicu-dev
~ $ 

で必要なパッケージをインストールします。

~ $ wget -q -O - https://swift.org/keys/all-keys.asc | gpg --import -

上記コマンドで公開鍵をインポートします。これは、1回だけ実行すれば良いようです。

swift-2.2-SNAPSHOT-2016-01-11-a-ubuntu15.10.tar.gz
SNAPSHOT-2016-01-11-a-ubuntu15.10.tar.gz.sig

先ほどダウンロードした上記2つのファイルをデスクトップに移動します。

~/Desktop $ gpg --keyserver hkp://pool.sks-keyservers.net --refresh-keys Swift

上のコマンドを実行した後、

~/Desktop $ gpg --verify swift-<VERSION>-<PLATFORM>.tar.gz.sig

ダウンロードしたアーカイブが改変されていないか上記コマンドで検証します。ここでは、

~/Desktop $ gpg --verify swift-2.2-SNAPSHOT-2016-01-11-a-ubuntu15.10.tar.gz.sig
gpg: assuming signed data in `swift-2.2-SNAPSHOT-2016-01-11-a-ubuntu15.10.tar.gz'
gpg: Signature made Tue 12 Jan 2016 10:02:41 AM JST using RSA key ID xxxxxxxx
gpg: Good signature from "Swift Automatic Signing Key #1 <swift-infrastructure@swift.org>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
~/Desktop $ 

上記コマンド gpg –verify swift-2.2-SNAPSHOT-2016-01-11-a-ubuntu15.10.tar.gz.sig になります。gpg: Good signature と表示されれば良いようです。ただし、警告が表示されています。どこか間違っているのかもしれません。

~/Desktop $ tar xzf swift-2.2-SNAPSHOT-2016-01-11-a-ubuntu15.10.tar.gz

コマンド tar を使って上記のように swift-2.2-SNAPSHOT-2016-01-11-a-ubuntu15.10.tar.gz を展開します。

swift コマンドのパスを環境変数 PATH に設定します。ホームディレクトリの .profile ファイルは、.bashrc ファイルを読み込んでいます。.bashrc ファイルの最後に

export PATH=$HOME/Desktop/swift-2.2-SNAPSHOT-2016-01-11-a-ubuntu15.10/usr/bin:"${PATH}"

emacsvim、vi などのエディタを使って追加します。Terminal を再起動し、

~ $ swift --version
Swift version 2.2-dev (LLVM 3ebdbb2c7e, Clang f66c5bb67b, Swift 42591f7cba)
Target: x86_64-unknown-linux-gnu
~ $

上記のように swift コマンドで実行できるか確認できます。

swift-package-manager を使った example のコンパイル

Apple · GitHub
https://github.com/apple/
GitHub - apple/example-package-dealer: Example package for use with the Swift Package Manager
https://github.com/apple/example-package-dealer

上記の example の大元は example-package-dealer です。依存関係はパッケージマネージャーが面倒を見てくれます。

~/Desktop $ git clone https://github.com/apple/example-package-dealer.git
Cloning into 'example-package-dealer'...
remote: Counting objects: 18, done.
Unpacking objects: 100% (18/18), done.
remote: Total 18 (delta 0), reused 0 (delta 0), pack-reused 18
Checking connectivity... done.

上記のように git clone コマンドで example-package-dealer リポジトリをダウンロードし、

~/Desktop $ cd example-package-dealer/
~/Desktop/example-package-dealer $ swift build
Cloning https://github.com/apple/example-package-deckofplayingcards.git
Using version 1.0.2 of package example-package-deckofplayingcards
Cloning https://github.com/apple/example-package-fisheryates.git
Using version 1.0.2 of package example-package-fisheryates
Cloning https://github.com/apple/example-package-playingcard.git
Using version 1.0.1 of package example-package-playingcard
Compiling Swift Module 'FisherYates' (1 sources)
Linking Library:  .build/debug/FisherYates.a
Compiling Swift Module 'PlayingCard' (3 sources)
Linking Library:  .build/debug/PlayingCard.a
Compiling Swift Module 'DeckOfPlayingCards' (1 sources)
Linking Library:  .build/debug/DeckOfPlayingCards.a
Compiling Swift Module 'Dealer' (1 sources)
Linking Executable:  .build/debug/Dealer
~/Desktop/example-package-dealer $ 

example-package-dealer ディレクトリに移動した後、 上記のように swift build コマンドを実行します。

実行ファイルは .build/debug に作成されます。

~/Desktop/example-package-dealer $ cd .build/debug
~/Desktop/example-package-dealer/.build/debug $ ./Dealer
♠︎Q
♣︎3
♠︎8
♢4
♣︎Q
♢6
♢J
♡2
♡5
♠︎J
~/Desktop/example-package-dealer/.build/debug $ 

上記が実行結果です。

Ubuntu 15.10 上で swift コマンドをビルドする。

Ubuntu 15.10 上で Terminal を起動し、

~ $ sudo apt-get install git cmake ninja-build clang python uuid-dev libicu-dev icu-devtools libbsd-dev libedit-dev libxml2-dev libsqlite3-dev swig libpython-dev libncurses5-dev pkg-config

を実行してください。

Apple · GitHub
https://github.com/apple/
GitHub - apple/swift: The Swift Programming Language
https://github.com/apple/swift

から Swiftリポジトリを Ubuntu15.10 デスクトップ上の Apple という名前のフォルダに

~ $ cd Desktop/
~/Desktop $ mkdir Apple
~/Desktop $ cd Apple/
~/Desktop/Apple $ git clone https://github.com/apple/swift.git
Cloning into 'swift'...
remote: Counting objects: 324410, done.
remote: Compressing objects: 100% (156/156), done.
remote: Total 324410 (delta 62), reused 0 (delta 0), pack-reused 324254
Receiving objects: 100% (324410/324410), 68.43 MiB | 5.43 MiB/s, done.
Resolving deltas: 100% (265946/265946), done.
Checking connectivity... done.
~/Desktop/Apple $ ls
swift
~/Desktop/Apple $

上記コマンド git clone https://github.com/apple/swift.git を使ってダウンロードします。

Swift のビルドの仕方の詳細は、

~/Desktop/Apple/swift/README.md

に書いてあります。(後で、AppleGitHub 上のリポジトリを全てダウンロードするスクリプトを紹介します。そのスクリプトOS X 上で実行し、Finder 上で Apple/swift/README.md ファイルをダブルクリックすると Xcode で Markdown 形式のファイルを見ることができます。)

追記) 2016/03/09(Wed)
Markdown 記法ファイルの表示、編集には下記 URL の Atom エディタを使うのが一番簡単です。

Atom
https://atom.io/

Markdown の表示は、Markdown ファイルを開き、

ショートカットキー: ctrl-shift-M
コマンド: Markdown Preview:Toggle

で表示できます。

Split Pane だと扱いにくいので
Settings/Packages の Package: markdown-preview をクリックして、設定画面を表示し、Open Preview In Split Pane のチェックを外してください。別 Pane に表示されるようになります。

~/Desktop/Apple $ cd swift
~/Desktop/Apple/swift $ ./utils/update-checkout --clone
--- Cloning 'cmark' ---
--- Cloning 'lldb' ---
--- Cloning 'llvm' ---
--- Cloning 'swift-corelibs-xctest' ---
--- Cloning 'swift-integration-tests' ---
--- Cloning 'swiftpm' ---
--- Cloning 'swift-corelibs-foundation' ---
--- Cloning 'clang' ---
--- Cloning 'llbuild' ---
~/Desktop/Apple/swift $ 

上記コマンド ./utils/update-checkout –clone を使って必要なパッケージをダウンロードします。(swift フォルダではなく、Apple フォルダに保存されので注意してください。)

最後に ./utils/build-scrip スクリプトを実行して swift コマンドをビルドします。引数 -R を指定しない限り debug モードでビルドされます。引数 -R の場合 release モードになります。引数 -t は Ninja による基本的なテストを行います。

詳しい解説は

~/Desktop/Apple/swift $ ./utils/build-script -h

を参照してください。環境変数 SWIFT_SOURCE_ROOT(ソースの位置)、SWIFT_BUILD_ROOT(swift が作成される位置) を設定できます。設定されていない場合、推論されます。

実際に ./utils/build-script -t でビルドすると

~/Desktop/Apple/swift $ ./utils/build-script -t
.
.
libLLVMSupport.a -lrt -ldl -ltinfo -lpthread -lm -Wl,-rpath,"\$ORIGIN/../lib" && :
clang: error: unable to execute command: Killed
clang: error: linker command failed due to signal (use -v to see invocation)
[1121/1984] Linking CXX executable bin/llvm-ar
ninja: build stopped: subcommand failed.
./utils/build-script: command terminated with a non-zero exit status 1, aborting
~/Desktop/Apple/swift $ 

上記エラーによりビルドに失敗します。メモリが足りないと表示されるようです。

図 1) 構成…/ハードウェア/CPU および メモリ

Parallels Desktop 上で、メニュー/処理/構成… を選び 、’ハードウェア’ タブを選択し、上図のように Ubuntu 側のメモリを 8192MB に変更します。

また、メモリを節約する意味で、引数 -j 1 を指定して、ビルドプロセスを1つにします。最終的に

~/Desktop/Apple/swift $  time ./utils/build-script -j 1 -t

上のコマンドを実行します。(time コマンドはビルド時間を計測してくれます。)

私の MacBook Pro の動作環境は

OS X El Capitan バージョン 10.11.3
MacBook Pro (Retina, 15-inch, Late 2013)
プロセッサ 2.3GHz Intel Core i7
メモリ 16GB 1600 MHz DDR3
グラフィクス
Intel Iris Pro 1536 MB
NVIDIA GeForce GT 750M
Parallels Desktop 11 for Mac
バージョン 11.1.2 (32408)
~/Desktop/Apple/swift $  time ./utils/build-script -j 1 -t
-- check-swift-linux-x86_64 finished --
--- Finished tests for swift ---
real	108m35.712s
user	112m17.964s
sys	4m48.860s
~/Desktop/Apple/swift $ 

です。上記のように time コマンドで確認するとビルドに1時間40分ほどかかりました。

ビルドした swift コマンドの位置は、

~/Desktop/Apple/build/Ninja-DebugAssert/swift-linux-x86_64/bin/swift

にあります。

最後にOS X 上で使用する自作スクリプトを紹介したいと思います。

GitHub にある Appleリポジトリを全てダウンロードする自作スクリプトとコマンド git の補助スクリプト集。

GitHub にある Appleリポジトリを全てダウンロードする自作スクリプトとコマンド git の補助スクリプトhttp://kyoshiaki.sakura.ne.jp/osx/Sample/Apple.zip

上記 URL で GitHub にある Appleリポジトリを全てダウンロードする自作スクリプトとコマンド git の補助スクリプト集を公開します。

ダウンロードした Apple.zip をデスクトップに移動し、Finder 上でダブルクリックして展開します。コマンド install.sh を

~/Desktop/Apple $ ./install.sh
Cloning into 'swift'...
Cloning into 'swift-package-manager'...
.
.
~/Desktop/Apple $ 

上記のように実行すると、GitHub にある Appleリポジトリを全てダウンロードします。すべてのリポジトリを最新の状態にアップデートしたい場合は update.sh を使用します。

~/Desktop/Apple $ ./log.rb
0: example-package-dealer
1: example-package-deckofplayingcards
2: example-package-fisheryates
3: example-package-playingcard
4: swift
5: swift-3-api-guidelines-review
6: swift-clang
7: swift-cmark
8: swift-corelibs-foundation
9: swift-corelibs-libdispatch
10: swift-corelibs-xctest
11: swift-evolution
12: swift-integration-tests
13: swift-llbuild
14: swift-lldb
15: swift-llvm
16: swift-package-manager
?
4

上記のように log.rb を実行するとリポジトリ一覧を表示し、番号を入力することで選択したリポジトリのコミットログを表示することができます。次ページを見るには、スペースキーを押してください。カーソル上下キーでもスクロールできます。終了するには、q キーを押してください。その他のスクリプトは、Apple/Dcuments フォルダの ReadMe.rtfd を参照してください。

Mac OS X、Ubuntu、Cygwin、MinGW のターミナル上で動作するプチコン準拠 BASIC インタプリタ basic を公開。

Mac OS XUbuntuCygwinMinGW のターミナル上で動作する BASIC インタプリタ basic を下記 URL で公開します。

basic version 1.0.0
http://kyoshiaki.sakura.ne.jp/osx/index.html

BASIC の文法は、

プチコン
http://smileboom.com/special/petitcom/

に準拠します。ただし、スプライト、BGスクリーン、256色グラフィック、ファイルと通信、音楽などに関するステートメントと関数は、対応していません。

あくまでも、実験的に作成したものです。メモリの解放なども省いています。flex、bison、C 言語で作成され、ソースも含まれています。

実用性に乏しいですが、良かったらダウンロードしてください。

BASIC インタプリタだけだと寂しいので、Land of Lisp から

Land of LISP: Learn to Program in Lisp, One Game at a Time!

Land of LISP: Learn to Program in Lisp, One Game at a Time!

orc-battle.lisp
robots.lisp
evolution.lisp

を移植してみました。evolution.lisp の移植には、かなり苦労しました。自分で言うのも、おこがましいのですが、力作です。
後、BASIC で再帰処理とローカル変数を実現するのには無理があるので、dice_of_doom_v1.lisp はあきらめました。

Boot Camp 上に Windows 7 はインストールしてありますが、Windows プログラミングについて、ほとんど知識がありません。

Cygwin
http://www.cygwin.com/
MinGW | Minimalist GNU for Windows
http://www.mingw.org/

CygwinMinGW で何とかビルドができるように対応してみました。ただし、MinGW については、日本語表示(半角カタカナ)とエスケープシーケンスに問題があります。Cygwin がお勧めです。本当は、CygwinMinGW のインストールも説明すべきなのですが、よくわからないので省きました。ごめんなさい。

robots.bas.txt、evolution.bas.txt を実行した動画を添付しておきます。

robots.bas.txt

evolution.bas.txt

'さくらインターネットのレンタルサーバー スタンダード' と ssh

以前、漫画家のすがやみつるさんが

プログラミングができなくても作れるTwitter botの作り方
http://pha22.net/twitterbot/

を利用して Twitter bot (EasyBotter) を作成したと発言されていました。

COOL ONLINE
http://www.cool.ne.jp/
PHP version 4.3.2

私は COOL ONLINE 正規会員登録しています。COOL ONLINE の PHP は version 4.3.2 のようです。Twitter bot (EasyBotter) では PHP 5 以上が必要です。

低額の料金で VPS が利用できる ‘さくらの VPS’ に興味を持っていたので

さくらインターネット|価値あるサービスと満足を提供するデータセンター
http://www.sakura.ad.jp/

で資料を読んでいました。 たまたま ‘さくらの VPS’ ではなく ‘さくらのレンタルサーバー’ も試しに調べてみると ssh、cron が使え、PHP 5.2.14 と記載されていました。アクセス解析も付いています。

プログラミングができなくても作れるTwitter botの作り方
http://pha22.net/twitterbot/

Twitter bot (EasyBotter) を試すために ‘さくらインターネットレンタルサーバー スタンダード’ に移転することにしました。 ssh を利用してみたかったことも動機の一つです。

Yoshiaki's HomePage
http://koyama-.cool.ne.jp/

上記ページを下記ページに移転します。上の COOL ONLINE ホームページは、来年の 2月頃に終了予定です。もう少し早まるかもしれません。

Yoshiaki's HomePage
http://kyoshiaki.sakura.ne.jp/osx/index.html

Twitter bot (EasyBotter) は何の問題なくインストールすることができました。新規に Twitter bot (EasyBotter) 用の Twitter アカウント KYoshiakiBot を作成し、

Create cool applications! | dev.twitter.com
http://dev.twitter.com/

アプリケーション名を YKEasyBotter で登録しました。上部の Your apps をクリックして

Twitter Applications | dev.twitter.com
http://dev.twitter.com/apps

現在登録されているアプリケーション一覧を表示し、YKEasyBotter をクリックすると Consumer key、Consumer secret を確認できます。Access Token を見つけるのに少し苦労しました。結局、Consumer key などが表示されているページの右側にある My Access Token をクリックすることで Access Token (oauth_token)、Access Token Secret (oauth_token_secret) を見つけることができました。

残念ながら、私が確認したかった OAuth 認証の仕組みではありませんでした。Twitterbot (EasyBotter) 自体は何の問題もなく動作しました。’さくらインターネットレンタルサーバー スタンダード’で は cron も使うことができます。

さくらインターネットレンタルサーバー スタンダード’ には Webalizer によるアクセス解析が付いてきます。しかし、COOL ONLINE で

COOL ONLINE
http://www.cool.ne.jp/
Yoshiaki's HomePage
http://koyama-.cool.ne.jp/
高機能アクセス解析CGI Professional版 - futomi's CGI Cafe
http://www.futomi.com/library/accp.html

利用していたシェアウェアの ‘高機能アクセス解析CGI Professional版 – futomi’s CGI Cafe’ と比べると非力です。しかし、’さくらインターネットレンタルサーバー スタンダード’ では、一日ごとのアクセスをログファイルに作成してくれます。そのログファイルをコマンドを実行すると自動的にダウンロードし、解析して表示する Python スクリプトとシェルスクリプトを作成しました。いずれ公開したいと思います。


さくらインターネットレンタルサーバー スタンダード’ では ssh も利用できます。

‘さくらの VPS’ のために Kindle 版の Pro Linux System Administration 本を購入したのですが、ssh の使用方法も解説されていました。良書です。まだ、半分ほどしか読んでいませんが!

Mac OS X Snow Leopard (バージョン 10.6.5 ビルド 10H574) 上の ‘ターミナル’ と Ubuntu 10.10 ‘Terminal’ 上での簡単な ssh の利用方法解説したいと思います。間違いもあるかもしれません。

SSH の仕組みを利用するコマンドは

  • ssh username@remotehost
  • scp foo.txt username@remotehost:/home/username/www/
  • sftp username@remotehost

などがあります。

ただし、アカウント: username、初期ドメイン: remotehost は

会員メニュートップ
https://secure.sakura.ad.jp/menu/top/

の ‘契約情報’/’契約サービスの確認’/’サーバ設定’ をクリックして ‘さくらインターネットサーバコントロールパネル’ 上部の ‘お客様情報’ で確認してください。

さくらインターネットサーバコントロールパネル
https://secure.sakura.ad.jp/rscontrol/rs/

以下の説明で、アカウント: username、初期ドメイン: remotehost を自分の環境に合わせて変更してください。また、ssh で使用するパスワードは、さくらのウェブ上の会員 ID でログインするパスワードではないので注意してください。

  • ssh username@remotehost
  • scp foo.txt username@remotehost:/home/username/www/
  • sftp username@remotehost

上のコマンドを何も設定せずに実行するとパスワードを尋ねられますが、RSA 公開鍵暗号による認証を利用するとパスワードやパスフレーズ (passphrase) : (秘密鍵用のパスワード) を入力せずにログインすることができます。

sshRSA 公開鍵暗号による認証を利用するには

1. コマンド ssh-keygen を使って公開鍵、秘密鍵を作成する。パスフレーズ (passphrase) : (秘密鍵用のパスワード) は、ssh-agent やキーチェーンで登録できるので安全のためにできるだけ入力してください。
2. コマンド ssh-copy-id を使って ~./ssh フォルダのファイル authorized_keys に公開鍵を追加。Mac OS X 上では、コマンド ssh-copy-id がないので手動でコピーする必要があります。
3. コマンド ssh-agent、 eval `ssh-agent`、 ssh-add を使って パスフレーズ (passphrase) : (秘密鍵用のパスワード) を登録。Mac OS X の場合、キーチェーンが パスフレーズ (passphrase)  : (秘密鍵用のパスワード) を管理してくれます。

おおまかに上の3つの手順で設定します。

1. Mac OS X Snow Leopard (バージョン 10.6.5 ビルド 10H574) 上の ‘ターミナル’ 上での ssh 設定

1-1. Mac OS X 上の ‘ターミナル’ で、コマンド ssh-keygen -t rsa -b 2048 で公開鍵、秘密鍵を作成。パスフレーズ (passphrase) : (秘密鍵用のパスワード) も安全のためできるだけ登録してください。

~ $ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xxxx/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/xxxx/.ssh/id_rsa.
Your public key has been saved in /Users/xxxx/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx xxxx@xxxxx-xxxxx-xx-xxxx-x.local
The key's randomart image is:
+--[ RSA 2048]----+
|         .F++oo..|
|          xxx+ . |
|           =+.. x|
|       . . .+. xx|
|        G .  .xx |
|              ...|
|               ..|
|               ..|
|              .. |
+-----------------+
~ $ 

1-2. ~/.ssh フォルダにファイル id_rsa (公開鍵) 、d_rsa.pub (秘密鍵) が作成されているのを確認。

~ $ cd .ssh
~/.ssh $ ls
id_rsa		id_rsa.pub	known_hosts

1-3. リモートホスト (さくら側) に ファイル id_rsa.pub をファイル authorized_keys としてコピー。パスワードを尋ねられるので入力してください。

~/ $ cd .ssh
~/.ssh $ scp id_rsa.pub username@remotehost:/home/username/.ssh/authorized_keys
username@remotehost's password:
id_rsa.pub                                    100%  422     0.4KB/s   00:00    

1-4 最初にコマンド ssh を実行するとパスフレーズを尋ねられます。パスフレーズ (passphrase) : (秘密鍵用のパスワード) を入力して ‘パスワードをキーチェーンに保存’ にチェックを入れてください。これで ssh、scp、sftp を実行しても パスフレーズ (passphrase) : (秘密鍵用のパスワード) を尋ねられることはありません。

~/.ssh $ ssh usernamei@useraname.sakura.ne.jp
Identity added: /Users/yoshiaki/.ssh/id_rsa (/Users/xxxx/.ssh/id_rsa)
Last login: Sun xxx  5 xx:43:14 2010 from xx.xx.xx.xx
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California.  All rights reserved.
FreeBSD 7.1-RELEASE-p15 (SAKURA11S) #10: Tue Nov 16 09:48:35 JST 2010
Welcome to FreeBSD!
%exit
logout
Connection to remotehost closed.


上図の赤枠部分より、秘密鍵のパスフレーズがアプリケーション ‘キーチェーンアクセス’ で 保存されているのが確認できます。

1-5 リモートホスト (さくら側) のファイル authorized_keys のパーミッションは 600 にしてください。

~ $ ssh username@remotehost
Last login: xxx xxx 00 xx:32:00 2010 from xx.xx.xx.xx
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California.  All rights reserved.
FreeBSD 7.1-RELEASE-p15 (SAKURA11S) #10: Tue xxx 16 09:48:35 JST 2010
Welcome to FreeBSD!
%cd .ssh
%ls
authorized_keys
%chmod 600 authorized_keys
%ls -alF
total 10
drwx------   x xxxx  xxxx  512 xxx 0 16:54 ./
drwx---r-x   xx xxxx  xxxx  512 xxx 00 19:53 ../
-rw-------   xx xxxx xxxx  819 xxx  0 19:50 authorized_keys
%exit
logout
Connection to remotehost closed.
~ $ 

2. Ubuntu 10.10 ‘Terminal’ 上での簡単な ssh の設定方法

2-1. Ubuntu 上の ‘Terminal’ で、コマンド ssh-keygen -t rsa -b 2048 で公開鍵、秘密鍵を作成。パスフレーズ (passphrase) : (秘密鍵用のパスワード) も安全のため登録しておく。

ubuntu:~$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/xxxx/.ssh/id_rsa):
Created directory '/home/xxxx/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/xxxx/.ssh/id_rsa.
Your public key has been saved in /home/xxxx/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx xxxxi@ubuntu
The key's randomart image is:
+--[ RSA 2048]----+
|        ...      |
|       . x       |
|      . . .      |
|       x .       |
|      x x x      |
|     x x x .     |
|    x.x . .      |
|     --x .       |
|    .x--.        |
+-----------------+

2-2. ~/.ssh フォルダにファイル id_rsa (公開鍵) 、d_rsa.pub (秘密鍵) が作成されているのを確認。

ubuntu:~$ cd .ssh
ubuntu:~/.ssh$ ls
id_rsa  id_rsa.pub  known_hosts
ubuntu:~/.ssh$ 

2-3. コマンド ssh-copy-id を使って、リモートホスト (さくら側) に ファイル id_rsa.pub をファイル authorized_keys に追加。パスワードを尋ねられるので入力してください。

ubuntu:~$ ssh-copy-id username@remotehost
The authenticity of host 'remotehost (xx.xx.xx.xx)' can't be established.
DSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'remotehost,xx.xx.xx.xx' (DSA) to the list of known hosts.
username@remotehost's password:
Now try logging into the machine, with "ssh 'username@remotehost'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
ubuntu:~$ 

2-4. 試しに ssh で、リモートホスト (さくら側) にログインしてみると、パスフレーズ (passphrase) : (秘密鍵用のパスワード) を尋ねてきます。

ubuntu:~$ ssh username@remotehost
Enter passphrase for key '/home/xxxx/.ssh/id_rsa':
Last login: xxx xxx  5 xx:33:26 2010 from xx.xx.xx.xx
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California.  All rights reserved.
FreeBSD 7.1-RELEASE-p15 (SAKURA11S) #10: Tue Nov 16 09:48:35 JST 2010
Welcome to FreeBSD!
%exit
logout
Connection to remotehost closed.
ubuntu:~$ 

2-5 コマンド ssh-agent で環境変数を確認。

ubuntu:~$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-TlhOE20539/agent.20539; export SSH_AUTH_SOCK;
SSH_AGENT_PID=20540; export SSH_AGENT_PID;
echo Agent pid 20540;

2-6 ssh-agent -k で停止。

ubuntu:~$ ssh-agent -k
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 1465 killed;

2-7 コマンド eval `ssh-agent` を実行して、環境変数を設定。文字 ` と ‘ の違いに注意してください。

ubuntu:~$ eval `ssh-agent`
Agent pid 20550
ubuntu:~$  

2-8 ssh-add を使ってパスフレーズ (passphrase) : (秘密鍵用のパスワード) を追加。

ubuntu:~$ ssh-add
Enter passphrase for /home/xxxx/.ssh/id_rsa:
Identity added: /home/xxxx/.ssh/id_rsa (/home/yoshiaki/.ssh/id_rsa)
ubuntu:~$

2.9 これで ssh、scp、sftp でログインしても パスフレーズ (passphrase) : (秘密鍵用のパスワード) を尋ねられません。

ubuntu:~$ ssh username@remotehost
Last login: Mon xxx  x xx:53:59 2010 from xx.xx.xx.xx
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California.  All rights reserved.
FreeBSD 7.1-RELEASE-p15 (SAKURA11S) #10: Tue Nov 16 09:48:35 JST 2010
Welcome to FreeBSD!
%

2-10 リモートホスト (さくら側) のファイル authorized_keys のパーミッションは 600 にしてください。

~ $ ssh username@remotehost
Last login: xxx xxx 00 xx:32:00 2010 from xx.xx.xx.xx
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California.  All rights reserved.
FreeBSD 7.1-RELEASE-p15 (SAKURA11S) #10: Tue Nov 16 09:48:35 JST 2010
Welcome to FreeBSD!
%cd
%cd .ssh
%ls
authorized_keys
%chmod 600 authorized_keys
%ls -alF
total 10
drwx------   x xxxx  xxxx  512 xxx 0 16:54 ./
drwx---r-x   xx xxxx  xxxx  512 xxx 00 19:53 ../
-rw-------   xx xxxx xxxx  819 xxx  0 19:50 authorized_keys
%exit
logout
Connection to remotehost closed.
~ $