2012/08/18

Mac から Ubuntu へ ssh するのに手こずりました

毎回、パスワードを打つのが面倒くさかったので、公開鍵暗号方式で認証しようとしたところ なかなかに時間を食われたのでまとめておこうと思います。
opensshはubuntuですのでインストールの時に突っ込んでおきます。
ないならapt-getあたりでhogehoge

sshはVersion 2で暗号方式はrsaを使います。
以下がサーバのsshデーモンの設定
一応、初期ファイルをバックアップしておいたほうがいいかもしれません。

# /etc/ssh/sshd_config
# ssh2を使用

# 使用するポート
Port 74

# 使用するsshバージョン
Protocol 2

# HostKeys for protocol version 2(秘密鍵ファイル)
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

# 特権分離の使用可否
# yesだとプロセスは非rootユーザ(デフォルトは sshd ユーザ)権限で動作する
UsePrivilegeSeparation yes

# Loggingする時のファシリティコード
SyslogFacility AUTH

LogLevel INFO

# ログインする制限時間
LoginGraceTime 120

# rootログインの可否
PermitRootLogin no

# パーミッションなども確認する
StrictModes yes

# 公開鍵暗号方式を使って認証する
PubkeyAuthentication yes

# 公開鍵ファイルを設定
AuthorizedKeysFile %h/.ssh/authorized_keys

# ~/.rhosts and ~/.shosts ファイルを読み込まない
IgnoreRhosts yes

# similar for protocol version 2
HostbasedAuthentication no

# ~/.ssh/known_hosts ファイル(ユーザごとのホスト鍵リスト)を無視するか否か
IgnoreUserKnownHosts no

# パスワード認証可否
PasswordAuthentication no

# 空のパスワードを許可するか否か
PermitEmptyPasswords no

# チャレンジレスポンス認証可否
ChallengeResponseAuthentication no

Subsystem sftp /usr/lib/openssh/sftp-server

UsePAM no


次に秘密鍵と公開鍵の生成と設定です。
これが一番手間取りました。
ぐぐると結構出てくるんですが、やり方がだいたい2通りくらいあるようで、ちょっと混乱しがちです。

基本的にクライアント(Mac)が主体の操作です。
バージョン2なので以下のように鍵を生成します。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/hoge/.ssh/id_rsa):  #ここで何も入力しないこと! 
Enter passphrase (empty for no passphrase):  #適当なパスフレーズ
Enter same passphrase again: 
Your identification has been saved in /Users/hoge/.ssh/id_rsa.
Your public key has been saved in /Users/hoge/.ssh/id_rsa.pub.
The key fingerprint is:
e3:29:2d:gb:4d:f2:12:c2:23:57:a4:6a:1b:4f:20:75 hoge@hoge.local
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                .|
|              .oE|
|             ....|
|        S   ... .|
|       + +  ..+..|
|      . = ...+ +.|
|       . . =o =. |
|          . o+ ..|
+-----------------+


ここで大事なのは鍵の名前を付けないでそのままというところです。
わかりやすい名前をつけていたせいで、だいぶ手こずりました_:(´ཀ`」 ∠):_

$ man sshをしてみると
-i identity_file
    Selects a file from which the identity (private key) for RSA or DSA authentication is read.
    The default is ~/.ssh/identity for protocol version 1, and ~/.ssh/id_rsa and ~/.ssh/id_dsa for protocol version 2.
と-iオプションの部分に書いてありました。
つまり、秘密鍵はバージョン2を使うなら~/.ssh/id_rsaにしろということ
default値なのでconfigで変えられるのかな?
 

次にクライアントからサーバ(Ubuntu)へ共有鍵(id_rsa.pub)を設定します。
場所は設定ファイルのAuthorizedKeysFileで指定したものなので,

%h/.ssh/authorized_keysです。
何かしらを使ってサーバに共有鍵をコピーし、authorized_keysに追記してください。
authorized_keysのパーミッションは644です。

.sshディレクトリ(700)や、ファイルのパーミッションでうまくいかない時もあるようなので注意が必要です。

これで設定は済んだはずなのでサーバのsshデーモンを再起動させます。

$ sudo service ssh restart

余談ですが、以前は
$ sudo /etc/init.d/ssh restart
としていましたが、少し前のバージョンから上記の方が推奨になっていました。
今のところはどちらも同じ動きをするようです。

あとは、普通にクライアントからsshするだけ

$ ssh USER@SERVER


以下を参考にしました。
sshd の設定(sshd_config)
http://www.nina.jp/server/slackware/openssh/sshd_config.html

2012/08/17

vimrc 3回目

もはや定期じゃなかろうか…



" ********************vimオプション********************
colorscheme desert
" 新しい行のインデントを現在行と同じにする
set autoindent
" バックアップファイルを作るディレクトリ
set backupdir=$HOME/\.vim_backup
"  スワップファイルを作成する
set swapfile
" スワップファイル用のディレクトリ
set directory=$HOME/\.vim_backup
" ファイル上書き前にバックアップ作成
set backup
" バックスペースの動作
set backspace=2
" 文字エンコーディングに使われるexpressionを定める
set charconvert=utf-8
" コマンドラインの行数
set cmdheight=2
"  カレント行ハイライトON
set cursorline
" viとの互換をオフ
set nocompatible
" vim内部で通常使用する文字エンコーディングを設定
set encoding=utf-8
" バッファのファイルエンコーディングを指定
set fileencoding=utf-8
" 既存ファイルを開く際の文字コード自動判別
set fileencodings=utf-8,euc-jp,sjis,utf-16
" Tabをスペースにしない
set noexpandtab
" 折りたたみを有効
set foldenable
" シンタックスに従い折りたたみ
set foldmethod=syntax
" カーソルが移動した時に自動で折りたたみを開く
set foldopen=block,hor,mark,percent,quickfix,search,tag,undo
" 折りたたみの具合
set foldlevel=0
" 最大折りたたみ深度$
set foldnestmax=3
" 左側に折りたたみガイド表示$
set foldcolumn=2
" 検索結果強調-:nohで解除
set hlsearch
" インクリメンタルサーチを有効
set incsearch
" ステータスライン表示
set laststatus=2
" タブ文字、行末など不可視文字を表示
set list
" 表示される特殊文字のフォーマットを指定
set listchars=eol:$,tab:>\ ,trail:\|,extends:<,precedes:<
" 行番号表示
set number
" カーソルの現在地表示
set ruler
" 自動インデントの空白の数
set shiftwidth=4
" 括弧強調
set showmatch
" 新しい行を作ったときに高度な自動インデントを行う
set smartindent
" 行頭の余白内で Tab を打ち込むと、'shiftwidth' の数だけインデントする
set smarttab
" ステータス行の表示内容を設定 PowerLineで置き換え
" set statusline=%<%F\ %m%r%h%w%y%{'['.(&fenc!=''?&fenc:&enc).']['.&fileformat.']'}%=%l/%L,%c%V%8P
" 強調表示有効
syntax on
" 文字エンコーディングに使われるexpressionを定めるタブを表示幅
set tabstop=4
" カーソルを行頭、行末で止まらないようにする
set whichwrap=b,s,h,l,<,>,[,]
" コマンドの補完候補を表示
set wildmenu
" 折り返しの設定
set wrap
" 上書き前にバックアップ作成
set writebackup
" タブバーを表示
set showtabline=2
" ウィンドウの幅を超える行の折り返し設定
set nowrap
" □や○の文字があってもカーソル位置がずれないようにする。
set ambiwidth=double
" 折りたたみ時の色設定
highlight Folded cterm=bold,underline ctermfg=4
" ヘルプ検索で日本語を優先
set helplang=ja,en



" ********************プラグイン設定********************
filetype off
filetype plugin indent off

if has('vim_starting')
 set runtimepath+=~/.vim/bundle/neobundle.vim/
endif

call neobundle#rc(expand('~/.vim/bundle/'))

NeoBundle 'cocoa.vim'
NeoBundle 'QuickBuf'
NeoBundle 'git://github.com/Shougo/neobundle.vim.git'
NeoBundle 'git://github.com/Shougo/neocomplcache.git'
NeoBundle 'git://github.com/Shougo/vimfiler.git'
NeoBundle 'git://github.com/Shougo/unite.vim.git'
NeoBundle 'git://github.com/vim-scripts/DrawIt.git'
NeoBundle 'git://github.com/vim-jp/vimdoc-ja.git'
NeoBundle 'git://github.com/h1mesuke/vim-alignta.git'
NeoBundle 'git://github.com/t9md/vim-textmanip.git'
NeoBundle 'git://github.com/vim-scripts/Source-Explorer-srcexpl.vim.git'
NeoBundle 'git://github.com/vim-scripts/taglist.vim.git'
NeoBundle 'git://github.com/scrooloose/nerdtree.git'
NeoBundle 'git://github.com/vim-scripts/trinity.vim.git'
NeoBundle 'git://github.com/scrooloose/nerdcommenter.git'
NeoBundle 'git://github.com/Lokaltog/vim-powerline.git'

filetype plugin indent on

" Neocomplcache
" 起動時に有効化
let g:neocomplcache_enable_at_startup = 1

" textmanip
" 選択したテキストの移動
xmap <c -j="-j"> <plug>(textmanip-move-down)
xmap <c -k="-k"> <plug>(textmanip-move-up)
xmap <c -h="-h"> <plug>(textmanip-move-left)
xmap <c -l="-l"> <plug>(textmanip-move-right)
" 行の複製
xmap <space>d <plug>(textmanip-duplicate-down)
xmap <space>D <plug>(textmanip-duplicate-up)

" vim-powerline
let g:Powerline_symbols = 'unicode'
let g:Powerline_stl_path_style = 'short'


" ********************キーリマッピング********************
imap {} {}<left>
imap [] []<left>
imap () ()<left>
imap “” “”<left>
imap ” ”<left>
imap <> <><left>
imap “ “<left>


だいぶ捗るようになって来ました。

neobundle で Vim の Plugin を管理しましょう。(Mac)

今までプラグインはあまり使っていなかったのですが、ふと思い立ったので噂のプラグイン管理プラグインを使って見ました。
一度入れてしまえば楽なもので非常に便利です。

gitを使うのでhomebrewなりmacportsなりでインストールしておきます。

$ mkdir -p ~/.vim/bundle
$ git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim

インストール用のディレクトリを作成して、ダウンロードします。

" 互換はOFF
set nocompatible

filetype off
filetype plugin indent off

if has('vim_starting')
 " Path追加
 set runtimepath+=~/.vim/bundle/neobundle.vim/
endif

call neobundle#rc(expand('~/.vim/bundle/'))

" ここに使いたいプラグインを書く
" Githubの場合
NeoBundle 'git_repository_uri'
" vim-scriptsの場合
NeoBundle 'script_name'

filetype plugin indent on

読み込みの関係だかなんだかで上記のようにしないといけないようです。

インストール
:NeoBundleInstall

アップデートとインストール
:NeoBundleInstall!

好きなプラグインを見つけて設定に書いたら
:NeoBundleInstallするだけです。
簡単ですね


以下を参考にしました。
Hack #238: neobundle.vim で plugin をモダンに管理する
http://vim-users.jp/2011/10/hack238/

:help neobundle