tkm_71のブログ

自分のための備考録みたいなものです。

ConoHaでVPSを借りて、SSH接続などの初期設定

先日ConohaでVPSを借りて、公開鍵認証でログインできるようになどしようとしたのですが、なかなかうまく行かず地味に時間がかかってしまった…
とりあえずやったことだけまとめておく。

今回やったこと

以下をやりました。

  • root以外のユーザを作る
  • SSH接続(公開鍵認証で接続)
  • パスワード認証をできなくする
  • rootからログインできないようにする
  • SSH接続するportを22から変更

以上は、以下の記事を参考にさせて頂きました。ありがとうございました!
[1] ConohaにVPSを設置して、SSHログイン、ポート番号変更、rootログイン禁止までを30分で! - Qiita
[2] ヾ(o゚ω゚o)ノ゙ConoHaちゃんに作業用ユーザ追加してssh接続するやで! - Qiita


まず下準備
  • Conohaコントロールパネルで、IPアドレスを調べておく
  • Conohaコントロールパネルからコンソールを起動しておく

(コンソールでやる必要は別にないと思いますよ)



一旦パスワード認証でSSH接続してみる

以下を打ち込んで、接続確認。

$ ssh root@aaa.bbb.ccc.ddd -p 22
//パスワード聞かれるので、サーバ構築時に設定した9桁以上(だったはず)のパスワードを入れる

とりあえずログインできた。


root以外のユーザを作る

galileo」というガリレオさんのユーザを作ることにします。

$ adduser galileo
$ passwd galileo
$ gpasswd -a galileo wheel

ユーザ作れた!

$ su galileo

これで作ったユーザでログイン。

[galileo@aaa-bbb-ccc-ddd ~]$

のようになっていれば、ログインできてるので、とりあえず以下でsudoできるかなどを確認

$ sudo echo "galileo now!!"

//rootになるか確認
$su
//rootになれるの確認したら戻ってきてね
$su galileo

これでとりあえずユーザできたのでよいよい。


SSH接続(公開鍵認証で接続)

次は公開鍵認証でSSHできるようにします。

$ sudo vi /etc/ssh/sshd_config 

sshd_configを編集します。

そこそこ文字数多いので、viでうまいこと検索かけて以下のようにする。

//#←コメントついてたら消して、noならyesに
RSAAuthentication yes

//#←コメントついてたら消して、noならyesに
PubkeyAuthentication yes

//元々これになってたのでOK
AuthorizedKeysFile      .ssh/authorized_keys

終わったらこれで再起動

$ sudo service sshd restart

以上で公開鍵認証は使える設定になった気がするので、あとは秘密鍵と公開鍵を用意する。
このへんあまり知らないけど、基本的にはローカルPCで作って、公開鍵をVPS上に置くのが普通らしい?

ということで、一旦ローカルPCに戻ります。自分の場合はMacなので、Terminalを開く。

そして以下にディレクトリを作る。あるなら大丈夫だと思う。

cd ~/
mkdir .ssh

こんな感じにできた「/Users/galileo/.ssh」作った。
そしたら、.sshに移動して、公開鍵と秘密鍵を作る。

$ cd ~/.ssh
$ ssh-keygen -t rsa -b 2048

ファイル名や、パスフレーズを聞かれるのでそのへんは適当に。

すると以下のようなのができる。

$ ls 
id_rsa		id_rsa.pub

.pubが公開鍵で、付いてないほうが秘密鍵
公開鍵はVPS上においてくる。

以下で、公開鍵をVPS上においてきます。
と、その前にまたコンソールに戻り、以下で新しく作ったユーザのホームディレクトリに.sshディレクトリを作成。

//以下は新しく作ったroot以外の自分用のユーザで行った
$ cd ~/           //  これで/home/galileoに移動
$ mkdir .ssh
$ chmod 700 .ssh
$ cd .ssh
$ pwd            //  /home/galileo/.sshになってればOK

あとは「/home/galileo/.ssh」にローカル(Mac)から公開鍵を設置するだけ。

ローカル(Mac)に戻ります。
そして以下を実行。

$ sudo scp id_rsa.pub galileo@aaa.bbb.ccc.ddd:/home/galileo/.ssh

これで、VPS上に公開鍵を置けたので、再度VPSで作業します。(コンソールに戻る)

ここで、少し前に以下のコマンドで「AuthorizedKeysFile」を「.ssh/authorized_keys」としているので、
ファイル名を変更します。

============再掲=============

$ sudo vi /etc/ssh/sshd_config 
//元々これになってたのでOK
AuthorizedKeysFile      .ssh/authorized_keys

=============================

$ mv id_rsa.pub authorized_keys
$ chmod 600 authorized_keys

これで以下のコマンド叩けば、新しく作ったユーザでパスワード認証ではなく、公開鍵認証でSSHできるはず!

$ ssh galileo@aaa.bbb.ccc.ddd -p 22
パスワード認証をできなくする

変える場所は一箇所。

$ sudo vi /etc/ssh/sshd_config 

をもう一度開いて、

//#←コメントついてたら消して、yesならnoに
PasswordAuthentication no
$ sudo service sshd restart
rootからログインできないようにする

パスワード認証できなくする、とほぼおなじ感じに。
変える場所は一箇所。

$ sudo vi /etc/ssh/sshd_config 

をもう一度開いて、

//#←コメントついてたら消して、yesならnoに
PermitRootLogin no 
$ sudo service sshd restart
SSH接続するportを22から変更
$ sudo yum install iptables-services

iptablesをインストール。

$ sudo vi /etc/sysconfig/iptables

を開いて、

//以下の22の部分を
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

//こんな感じに使いたいポート番号に変更。
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10022 -j ACCEPT
//iptablesを再起動
$ sudo service iptables restart

もう一点変更します。
何度も編集していますが、再度以下を編集!

$ sudo vi /etc/ssh/sshd_config 
//「Port」で検索して、22になっている所を変更。
// #が付いてコメントになっていたらそれを取る。
Port 10022
$ sudo service sshd restart
$ ssh galileo@aaa.bbb.ccc.ddd -p 10022

で接続できた!!

接続を簡単にしましょう

ここまででだいたいOKだけど、ローカル(Mac)から接続を楽にするために、
「~/.ssh/config」を書きます。

ローカルPCに戻ったら、

「~/.ssh/config」

#ConoHa
Host conoha
  HostName aaa.bbb.ccc.ddd
    User galileo
	Port 10022
	IdentityFile ~/.ssh/id_rsa

を書いて保存しておく。

これで、ローカルPC(Mac)から

$ ssh conoha

とやれば、galileoで(公開鍵認証で)簡単にSSH接続できました!


ふー疲れた

とりあえず、VPSを借りてみたのでこれから勉強にもなるので、色々やっていきたいですな。


上にも書きましたが、本当に参考にさせて頂いてわかりやすかったので、以下の記事を再掲。
[1] ConohaにVPSを設置して、SSHログイン、ポート番号変更、rootログイン禁止までを30分で! - Qiita
[2] ヾ(o゚ω゚o)ノ゙ConoHaちゃんに作業用ユーザ追加してssh接続するやで! - Qiita

screenでウィンドウを一気に移動したり、順番を並び替えたり

screenでいくつもウィンドウを開いて作業していると、

C-a p
C-a n

などでウィンドウを次へ、前へって移動するのではとてもだるい。

そんなときは、

C-a [ウィンドウのnumber]
ex: C-a 3

と言った具合に、一気に移動ができる。

そして今回のタイトルのように順番を並び替えるには
例えば、ウィンドウが
「0 : window_0 ,1 : window_1 , 2 : window_2 , 3 : window_3」
となっている場合に、

window_3を1番目に持ってくる際には、

C-a 3    //移動させたいウィンドウに移動
C-a    //一旦エスケープさせて
:number 1   //移動先のウィンドウ番号を入力(今回は1番目のウィンドウ)

これで並び替えができるようだ。

mongoDBで errno:48 Address already in use for socket

mongoDBが起動できなくなった

mongoDBを使っていたら、以下の様なエラーが出て、起動できなくなった。
エラーメッセージは以下。

2016-03-16T00:08:29.602+0900 E NETWORK  [initandlisten] listen(): bind() failed errno:48 Address already in use for socket: 0.0.0.0:27017
2016-03-16T00:08:29.602+0900 E NETWORK  [initandlisten]   addr already in use
2016-03-16T00:08:29.602+0900 E STORAGE  [initandlisten] Failed to set up sockets during startup.
2016-03-16T00:08:29.602+0900 I CONTROL  [initandlisten] dbexit:  rc: 48

この場合の対象は以下。

参考: (MongodbのDB変更 - kiita's blog)

$ ./mongo 
use admin 
db.shutdownServer() 

mongoDBを一度シャットダウンしてしまう。
このあと、いつもどおり起動できるようになった。

一安心。

package-list-packagesのメモ

emacsのpackage-list-packagesについてメモ

参考

以下参考より引用。

(require 'package)
 
;; MELPAを追加
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
 
;; MELPA-stableを追加
(add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/") t)
 
;; Marmaladeを追加
(add-to-list 'package-archives  '("marmalade" . "http://marmalade-repo.org/packages/") t)
 
;; Orgを追加
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
 
;; 初期化
(package-initialize)

これをどこかに書いておき、範囲選択して「M-x eval-region」を実行。

「M-x package-list-packages」を実行して、目当てのパッケージを探す。
こちらもメモで、emacsの検索は「Ctrl + s」で入力して、検索。
検索結果が複数ある場合は再度「Ctrl + s」で次へ、「Ctrl + r」で前へ。

目当てのパッケージの行でカーソルとめて「i」を入力して選択し、
「x」を入力すると確認がでるので、「yes」と入力してインストールが始まる。

Macでscreenコマンド + emacs

screenのエスケープキーを変更

screenコマンドで、新しいウィンドウを開いたり、ウィンドウ切り替えたり、、、などなど
するときに、使うコマンドではCtrl + aでエスケープするようになっている。

これ、emacs使う時だとショートカットがバッティング?してしまい使いにくい。
行の先頭にカーソル持ってこようとして、Ctrl + aするとscreenのエスケープになってしまう。

そこで、エスケープキーを変更する。

やることは簡単で、

~/.screenrcを開く。(なかったので今回作った。)

開いたら、以下を書き込み保存。

escape ^Tt

以上を行えば、Ctrl + tでscreenのエスケープキーを設定できるので、
screen + emacsで使用するときでも、いつも通りemacsを使えそう。
今回は「Ctrl + t」としたが、ここは適宜使いやすいものを。

Unity 画面操作メモ

Unityを一度触ってから放置していたので, そろそろ再開しようかと.

しばらく触っていないだけで画面操作のショートカットも忘れているし, 歳を感じます...

まあ基本的には, マニュアルを見ればわかることですが.
Unity - マニュアル: シーンビューのナビゲーション

今回アレどうやるんだっけ?となったショートカット.

視点移動

macでは,
「二本の指でタッチして, そのまま左クリック&ドラッグ」することで, 回転が簡単にできる.

調べると, これ「Alt押しながら, 左クリック&ドラッグ」でもOKらしい.
f:id:tkm_71:20160222181957p:plain
※引用: Unity - マニュアル: シーンビューのナビゲーション

ショートカットを覚えておくだけで随分と作業が楽になるので, よく使うのは覚えておきたい.

Node.js で MongoDB を使ってみる

Node.jsでMongoDBを使ってみたので, 備考録.
セッションの保存先をMongoDBに変更もしてみます.

環境

  • node v5.0.0
  • MongoDB version v3.2.3

MongoDBを扱うためのモジュールをインストール

$ npm install mongoose
$ npm install connect-mongo

MongoDBの起動

mongodb/bin以下のmongodを起動する.

$ ./mongod --nojournal --noprealloc --dbpath PATH

※PATHはDBの保存先らしい

実装

まずはMongoDBを使ってみる.
modelの定義についてはNode.js+Express+MongoDBでSessionを利用してログイン機能を実装 - Qiitaから丸っとお借りしました.
モデルのスキーマは自分の使いたい形にちょっと変更.

model.js
var mongoose = require('mongoose');
var url = 'mongodb://localhost/session';

var db  = mongoose.createConnection(url, function(err, res){
    if(err){
        console.log('Error connected: ' + url + ' - ' + err);
    }else{
        console.log('Success connected: ' + url);
    }
});

// Modelの定義
var UserSchema = new mongoose.Schema({
  id : String,
  timestamp : Date
},{collection: 'info'});

exports.User = db.model('User', UserSchema);


あとはこのモデルを利用したいところで, 呼び出して使う.
例えば, app.jsで.

app.js
var model = require('./model.js'),
    User = model.User;

var newUser = new User({
     id : profile.id,
     timestamp : new Date().getTime()
});

newUser.save(function(err){
     if(err){
        console.log(err);
     }else{
        console.log ("Save OK!!");
     }
});

IDが12345のユーザを検索する場合は,

var query = {id:"12345"};
User.find(query, function(err, data){
    if(err){
	    console.log (err);
    }else{
    	console.log(data);
    }
}


次に, セッションストアとして利用する場合は,

app.js
var session = require('express-session');
var mongoose = require('mongoose');

//mongoDBに接続
mongoose.connect('mongodb://localhost:27017/session');
var sessionStore = new MongoStore({mongooseConnection: mongoose.connection});

app.use(session({
    secret: 'secret',
    cookie: {
        httpOnly: false,
        maxAge: new Date(Date.now() + 60 * 60 * 1000)
    },
    store: sessionStore
}));

でいいみたい.

f:id:tkm_71:20160222162205p:plain
このような感じに入ってる.

以上, 備考録.