【AWS】新規追加したユーザーでEC2にSSH接続するための準備

この方法って色んなところにリソースが転がっていているんだけど、いつもどっかで躓くのと、一旦自分で整理すべきだと思ったので書いておく。

1. EC2インスタンス作成時に発行された秘密鍵を使用してEC2へ接続

接続したい新規ユーザを追加。sudoが使えるようにする。

// rootへ切替
$ sudo su -

// ユーザ追加とパスワード設定
# adduser user_name
# passwd user_name

# visudo
// 以下の一行を追加
user_name ALL=(ALL)    ALL

2. ローカルマシン(接続したいマシン)で鍵を作成

鍵を新しく作る。この鍵でSSH接続できるようにしていく。

$ cd ~/.ssh
$ ssh-keygen -t rsa -C comment -f rsa_file_name

3. EC2へ公開鍵を転送

EC2にSSH接続が可能なマシンへ公開鍵を送り、そこからscpコマンドでEC2へ転送する。

$ scp -i ec2.pem rsa_file_name.pub ec2-user@xx.xxx.xxx.xxx:/home/ec2-user/

4. EC2上で公開鍵の設定

公開鍵を.sshに設置したり、所有者、グループ、権限を変えたり。

$ ls ~
// rsa_file_name.pubの存在を確認
$ sudo su - user_name
$ mkdir ~/.ssh
$ sudo mv /home/ec2-user/rsa_file_name.pub /home/user_name/.ssh/authorized_keys
$ ls ~/.ssh
// authorized_keysを確認
// 所有者とグループを変更
$ sudo chown user_name /home/user_name/.ssh/authorized_keys
// chgrpはchownでもできるけどね
$ sudo chgrp user_name /home/user_name/.ssh/authorized_keys
// パーミッションも
$ sudo chmod 600 /home/user_name/.ssh/authorized_keys
$ sudo chmod 700 /home/user_name/.ssh/

5. 接続してみる

接続できたらおしまい。

$ ssh user_name@xx.xxx.xxx.xxx

新年度に入って1ヶ月半たった今、プログラマな新人さんや初めて後輩ができた先輩方にお薦めしたい一冊

久しぶりの投稿。かなり間が空いてしまった。

5月も半ばを過ぎ、今年プログラマになった新人さんも少しずつコードを書く量が増えてきたんじゃないだろうか?

日々、わからないところはググったり聞いたりしながら、夜遅くまで必死にコードを書いて退社。
そして翌朝、出社してエディタを開き再びコードを書こうとすると、ふと手が止まる。

「あれ、ここの変数、何の値が入ってるんだ?」
「この関数って、どういう処理のために作ったんだっけ?」
「この辺りループとか条件分岐がごちゃごちゃでネスト深くて読みづらい。。。」

そう、自分が昨日書いたコードのはずなのに読みづらい。
それどころか、全くわからない。

...とまぁそこまではなくても、きっと数日前に書いた箇所がすぐにパッと理解できなかったり、コードレビューで指摘されまくって凹んだりしている方は、少なからずいるのではないかと思う。

逆に新しく後輩が入ってきてコードレビューをしているのだけれど、なんとなくダメな匂いの漂うコードに対して的確にアドバイスできないとか、そもそもまだキレイなコードが書けている自信がない(僕だ)とか、そんな方もいるかもしれない。

もし、そういった方の中でまだ読んだことがないなら是非とも薦めたい一冊がある。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

そう、「リーダブルコード」だ。
まぁ、今更感は否めない、おそらくそのくらいには有名な書籍。
それでもこの先ずっとお薦めしたい、そんな本なのだ。超良書。

例えば、

  • 良い変数名や関数名が思い浮かばず、結局適当につけてしまう(そして後でわからなくなる)
  • ループを何重にもネストしたり、バカでかいif-else節を作ってしまう(そして後でわからなくなる)
  • コードを見たままの当たり前のコメントしか書いてない(そして後でわからなくなる)
  • 一つのバカでかい関数の中でいろんな処理をしている(そして後でわからなくなる)

みたいなことが、少しでも思い当たる人はきっと手にとって損はないはず。

仮に、思い当たる節がなかったとしても、 後半のテストコードの話や、実例を挙げて設計・実装していく辺りの話なんかは、 きっとタメになるのではないかと思う。

最後に、リーダブルコードの解説にはこんなことが書いてある。

本書の内容を身につけて、自然に読みやすいコードを書けるようになるための3つのステップを紹介しよう。
・実際にやる
・当たり前にする
・コードで伝える

どんなに優れた名著を読んでも、"実際にやらなければ"身につかない。
というわけで僕も読みっぱなしはやめて、明日から実践することにしよう、と思う。

ちなみに、リーダブルコード以外の本だとこれもお薦め。

CODE COMPLETE 第2版 上

CODE COMPLETE 第2版 上

CODE COMPLETE 第2版 下

CODE COMPLETE 第2版 下

あちこちでお薦めされている名著。
上下巻で高いけどめっちゃ良い。すごくイイ。高いけど。
この記事書いた時点では、Kindle版だと上巻が結構安くなってる。

attr()とprop()とchecked属性とcheckedプロパティと...

うろ覚えでいつもググってしまう悪い癖なんだけど、チェックボックスのチェックをつけたり外したりとか、ラジオボタンの選択をソースコードからしたいとかいう場合。

<input type="checkbox" id="foo">

ここで、ググって良く当たるのがattr()を使う方法だったりして、うまくいかず「はぁ?」ってなってprop()を使う方法とかに行き着いたりする。

// チェックを付ける処理
$('#foo').attr('checked', true); // これうまくいかない
$('#foo').prop('checked', true); // こっちはうまくいく

そもそもなんでattr()使ってうまくいかないんだろうか、と思って色々調べてみた。
結論からいうと、jQuery1.6.0と1.9系以降はうまくいかない、ってことみたい。

[jQuery] attr(‘checked’)で取得したチェックボックスの値が変わらない | 黒川仁の文具堂ブログ三昧

attr()は属性に対する操作を行うもので、prop()はプロパティに対する操作を行うもの。
1.5系以前や1.6.1~1.8系のattr()は属性だけでなくプロパティに対する操作もカバーしようとしていたのだが、バグが発生しやすくメンテナンスが大変だったため、属性とプロパティに対する操作を行うメソッドを完全に分けたという経緯らしい。

また、チェックボックスラジオボタンにデフォルトのチェックを入れるためのchecked属性は、あくまで初期値を示すものであり、ページが表示されたあとにチェックの状態を変更しても属性値は変わらない。
このとき変わっているのがcheckedプロパティであり、prop()で操作できる値、ってこと。

JavaScript Ninjaの極意 ライブラリ開発のための知識とコーディング (Programmer's SELECTION)

JavaScript Ninjaの極意 ライブラリ開発のための知識とコーディング (Programmer's SELECTION)

Effective JavaScript

Effective JavaScript