徒然なるままに

個人の備忘録を中心としたブログです

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
linuxでssh接続の設定をするためには、
クライアント側に秘密鍵(id_rsa)、サーバ側に公開鍵(authorized_keys)を用意しておかなければならない。

クライアント側に秘密鍵、サーバ側に公開鍵を持たせる理由としてssh接続の流れを簡単に説明すると、

0. クライアントの接続要求。
1. サーバ側で乱数を作成し、その乱数をクライアントの公開鍵で暗号化したものをクライアント側に送信。
2. クライアント側は暗号化された乱数を、自身の秘密鍵で復号し、復号された乱数をもとにハッシュ値を計算して、ハッシュ値をサーバ側に送信。
3. サーバ側でも自身の生成した乱数からハッシュ値を計算し、クライアントから送られてきたハッシュ値と比較して一致すれば以降暗号化通信を行う。

という流れがあるから。

0. SSHサーバー(open-ssh)のインストール
Ubuntu13.04では
sugo apt-get install ssh


1. 公開鍵、秘密鍵の作成
ssh-keygenコマンドを使用する。-tオプションで暗号方法を設定できる。
ssh-keygen -t rsa

で進めていくと、ファイルの保管場所や、パスフレーズを求められるのでこれを入力。
ファイルの保管場所はエンターでデフォルト設定、パスフレーズはエンターで空にすることもできるがセキュリティ上設定したほうがよい。
以上でデフォルトなら、~/.ssh/id_rsa、~/.ssh/id_rsa.pubが作成される。

入力したパスフレーズは直接ssh通信に利用されるものではない。
秘密鍵をファイルに保存するときに暗号化に使われるものであり、
秘密鍵を使うときにはパスフレーズで復号した秘密鍵を使って通信する。

2. 生成した公開鍵をサーバ側に追加する。
id_rsa.pubが公開鍵で、これをサーバ側の~/.ssh/authorized_keysに追加する。
サーバー側で"authorized_keys"がまだ作成されていないようだったら、
scp ~/.ssh/id_rsa.pub [uname]@[server]:~/.ssh/authorized_keys

として丸ごとコピーしてよい。

既にauthorized_keysがあるようなら、他のクライアントの公開鍵が保存されているのを壊してはいけないので、
一度公開鍵ファイルをサーバ側に物理的、あるいは以下のscpなどの手段を使って移してから
scp ~/.ssh/id_rsa.pub [uname]@[server]:~/.ssh/id_rsa.pub

[uname]と[server]は適切なものに変更

サーバ側で
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

を実行してauthorized_keysに公開鍵を追記する。

クライアント側で
ssh [server]

とすると、パスフレーズを求められる。
この際に、ssh-keygenで入力したパスフレーズを入力する。
その後の通信が成功すれば、SSH接続が開始される。

なお、パスフレーズが一致せず、秘密鍵の復号に失敗しSSH接続ができなかった場合、
ログインパスワードを利用した接続を求められる。
これは公開鍵/秘密鍵を利用した通信の方法ではないので、次のプロセスでSSHサーバの設定を変えておくことをおすすめする。

3. sshd_configの設定
/etc/ssh/sshd_configの該当する記述をコメントアウト、および編集。

・PasswordAuthentication no #パスワード方式のログインを禁止(鍵方式でのみログイン許可) 
・PermitRootLogin no #ルートのSSHログインを禁止(ルートでログインされると危険が大きい)
・PermitEmptyPasswords no # 空のパスワード(パスフレーズ)による接続を禁止(セキュリティ上の問題)

設定が終わったら、
sudo service ssh restart

を使って、設定を反映させておきましょう。
複数のversionのrubyやrailsを管理する、ruby version managerこと「rvm」を使った環境構築方法です。
OSはUbuntu13.04です。

・rvmのインストール
\curl -L https://get.rvm.io | bash -s stable

一応、https://rvm.io/で最新のインストール方法をチェックしてください。

curlというのはc-urlと読んで
URLを入力すれば、HTTPやFTPなどプロトコルによってそれぞれの動作をします。
curl http://www.example.com

とすればhttp://www.example.comのインデックスページをGETして標準出力に出力します。
wgetと使い方は似ていますが、ちょっと調べてみるとPOSTなどもできるようでいろいろ使い途がありそうです。

-Lオプションは指定したURLがリダイレクトされる場合、リダイレクト先をダウンロードしてきます。
コマンド名の前のバックスラッシュはコマンドにかけられている可能性のあるaliasを無効にします。
例えば、ubuntuではデフォルトで「alias ls='ls --color=auto'」となっていますが、\lsと打ち込むことで
単純な'ls'が実行されるということです。

bashコマンドに-sオプションをつけることで標準入力からシェルスクリプトを読み込みます。
stableはrvmインストーラのスクリプトに渡すパラメータで、rvmの安定バージョンのインストール指定。

rvmは$HOME/.rvm/以下にインストールされ、
.bashrcに自動でPATHを追加し、.bash_profileが追記あるいは新規作成されます。
.bash_profileを読み込む場合、.bashrcに以下を追記して再度ターミナルを起動するとよいでしょう。
if [ -f ~/.bash_profile ]; then
. ~/.bash_profile
fi



・rvmを使ったrubyインタプリタのインストール

rvm install 1.9.3

でruby 1.9.3のインストール。

rvm list known

とすることで、インストール可能なrubyインタプリタのバージョンが確認できます。

複数のバージョンがインストールされている場合、
rubyコマンドを使用する前に
rvm use 1.9.3

のように入力すれば、自動でバージョンが切り替わります。
defaultで使用するバージョンを指定したい場合は
rvm --default 1.9.3

と入力してください。

現在のバージョンやインストールされているバージョンなどの情報は
rvm list

で表示されます。


・railsのインストール
gem install rails

でrailsがインストールされます。railsのバージョン管理はgemで行います。
こちらも複数バージョンのrailsをインストールして使い分けることができるようになっています。
このコマンドで最新版のrails4がインストールされたので、
gem install rails --version 3.2.14

で3.2系をインストールします。

railsのバージョンはデフォルトで最新のものが使われます。
新規作成するプロジェクトに使用するバージョンを指定したい場合は
rails _3.2.14_ new hoge

のようにrailsの後にバージョンをアンダーバーで挟んでnewしてください。
rails -- version
rails _3.2.14_ --version

とすれば違いが分かります。
>rails g model example 
で作成したモデルのマイグレーションが
>rake db:migrate
SQLite3::SQLException: table "examples" already exists




のようにエラーで通らなくなった。

原因は
>rails g model example
>rake db:migrate
した後に、db:migrate:rollback あるいは db:migrate:down VERSION=xxxxxxxxx をせずに
>rails d model example
して再度 generate して作り直したから。

要するに db:migrate:down してから rails d model example しておけば、
xxxxxxxxxx_create_examples.rb 内のchangeメソッド中のcreate(down時にはdropになる)が実行され、
テーブルが削除されるのに、それをしなかったということです。


ということで再度 db:migrate を通すために、examplesテーブルを削除してやる必要があります。


解決方法1、sqlite3で直接テーブルを削除する(推奨)
>sqlite3 db/development.sqlite3
sqlite> .tables # テーブル一覧
examples members schema_migrations
sqlite> drop table examples;
sqlite> .tables
members schema_migrations


解決方法2、xxxxxxxxxxx_create_examples.rb内で create table する前に、 drop table する
class CreateExamples < ActiveRecord::Migration
def change
drop_table :examples
create_table :examples do |t|
  ・
  ・
  ・


その後、
>db:migrate
をやれば通りました。

参考元
http://stackoverflow.com/questions/8589874/rake-dbmigrate-an-error-has-occurred-this-and-all-later-migrations-canceled
bundle install で、installing libv8 に異常に時間がかかる(五分くらい?)


libv8は、gemパッケージである'therubyracer'が依存するライブラリであり、
therubyracerを使えばRuby上でJavascriptを動かすエンジンが簡単に実装されるとのこと
Ubuntu(13.04)ではlibv8のインストールに時間がかかるからか
デフォルトでコメントアウト
# gem 'therubyracer'
されているのだが、

rails server を使うときに必要となるので、コメントアウトを外してインストールしなければならない。
だが、とにかくlibv8のインストールに時間がかかる。

この問題の原因、解決方法について以下のブログに丁寧にまとめてあった。

therubyracer 0.11.0 問題まとめ - 自称すーじー。

ここの解決方法としてlibv8の古いバージョンは使用できなくなっているようなので、
therubyracerのバージョンを前のものにしてインストールするという方法をとることにする。

gem 'therubyracer', '0.10.2'

しかし現在のtherubyracerの最新版は0.12.0なので、結構古いものになってしまう。。
気になるようじゃ五分程度なら待ってもいいかな
そもそも0.12.0になってるのに、0.11.0の問題が解決していないってのはどういうことやら・・・
(※追記 2013/09/15)
この記事は最低限の覚え書きとあるように、
現時点ではrvmを使ってrubyからインストールする↓の方法を推奨。
また後でrbenvの方がいいとか言いだしそうですが、今はrvm使ってます。
http://kamiyasu2.blog.fc2.com/blog-entry-41.html

Ruby on Railsの環境を構築する際に最低限インストールするのは
ruby本体、Rails、sqlite3の三つ。
このうちrubyは既にインストールされているものとする。

sqlite3本体のインストールが必要となるほか
rails,sqlite3のgem(RubyGems)パッケージをインストールする。
ちなみに、RubyGemsは、Ruby言語用のパッケージ管理システムであり
Debian用のパッケージ管理システムであるaptのようなものと言えば分かりやすいだろうか。

railsのインストール
sudo apt-get install ruby-dev
sudo gem install rails -v 3.2.1 # -v はversionの指定 vオプションを指定しない場合は最新版(現在は4.0)がインストールされる


sqlite3のインストール
sudo apt-get install sqlite3 libsqlite3-dev
sudo gem install sqlite3


なお、gemではrailsの複数のversionを使用できるようだ。
その場合は、railsプロジェクトの作成に使うrails newコマンドに
以下のようにversionの指定を加えてやる必要がある。
rails _3.2.1_ new hoge


さらに、rvmやrbenvというRubyのバージョン管理システムを使えば
Railsのバージョンだけでなく、Rubyのバージョンも複数インストールことができるらしい。
今は取りあえずrails使えればいいやということで、そこまでは触れず最低限の環境構築の覚書きでした。

kamiyasu

Author:kamiyasu

QR

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。