Raspberry Pi 2でサーバ作ってみる(2)

SSHのセキュリティをデフォルトからちょっとだけ上げます。

  • Rootやpiユーザでログイン禁止、特定ユーザのみログイン可能にする
  • 公開鍵暗号方式を使う

※sudoを付けるのがメンドウなのでrootで実行しています。

sudo su -

特に断りがなければ基本はrootで実行してるはずです。

まずはユーザを作ります。

#ユーザhogeを作成
adduser hoge

ユーザができたらSSHの設定ファイルを編集。
エディタはnano使ってますが、好きなのに変えてください。

nano /etc/ssh/sshd_config

まずは以下の内容を編集します。

#rootログインを禁止
PermitRootLogin no

#RSA鍵認証の設定
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

#パスワードなしログインを禁止
PermitEmptyPasswords no

#特定ユーザーのみ利用可能(hogeのみ利用可能)
AllowUsers hoge

次に、公開鍵と秘密鍵を準備します。
※以下は母艦の一般ユーザ(SSHでログインするユーザ)で実行します。

#RSA鍵を初めて生成する場合
ssh-keygen -t rsa

これで、~/.sshにファイルが生成されています。

ls ~/.ssh
#id_rsa  id_rsa.pub 

id_rsa秘密鍵で、id_rsa.pubが公開鍵です、pubはpublishの略ですねきっと。
既存の鍵があってそれを使う場合は、鍵をここにコピーしておきます。

鍵ができたらRasPiに送り込みます。
FTPとか使う予定ないので、scpでさくっと送り込みます。SSH使えれば使えるはずです。
後、ファイルは公開鍵の方です。秘密鍵じゃない方。

#母艦にあるid_rsa.pubをRasPi(IP192.168.1.2とする)のhogeユーザを使って送信
scp ~/.ssh/id_rsa.pub hoge@192.168.1.2:

ここまでやったらRasPiでの作業に戻ります。
ユーザhogeのhomeディレクトリにid_rsa.pubが送り込まれてるので、これを使います。
リネームするやり方もありますが、もし既存の鍵登録情報があるとマズいので、上書きするようにします。

#hogeユーザになって、一応ホームディレクトリに移動
su - hoge
cd
#.sshディレクトリを作って権限を付与
mkdir .ssh; chmod 700 .ssh/
#さっき送り込んだ公開鍵の内容をauthorized_keysに上書き(なければ作成する)
cat id_rsa.pub >> .ssh/authorized_keys 
#authorized_keysに権限付与
chmod 600 .ssh/authorized_keys

終わったらまたrootになってSSHを再起動します。

etc/init.d/ssh restart

これで、再起動後にもう一度接続をテストします。

  • rootでログインできない
  • 母艦から秘密鍵を使ってログインできる
#秘密鍵を使って、RasPi(IP192.168.1.2とする)のhogeユーザにログイン
sh -i ~/.ssh/id_rsa hoge@192.168.1.2

問題なければ、パスワードログインを禁止すべく、sshd_configを編集します。

#パスワードログインを禁止(鍵方式のログインのみにする)
PasswordAuthentication no

もう一度SSHを再起動して終了です。

;(function(document){ var pres = document.getElementsByTagName("pre") for(var i=pres.length; i--; ){  var el = makeOl(pres[i]) pres[i].appendChild(el) } function makeOl(pre){ if (pre.className.indexOf("gist") !== -1) { return } var ol = document.createElement("ol") , li = document.createElement("li") , df = document.createDocumentFragment() , br = pre.innerHTML.match(/\n/g) || 0 ol.className = "preLine" ol.setAttribute("role", "presentation") // no lang, no line-number if( pre.className && ! /lang-./.test(pre.className) ){ br.length += 1 } for(var i=br.length; i--; ){ var li2 = li.cloneNode(true) df.appendChild(li2) } ol.appendChild(df) return ol } })(document)