diadia

興味があることをやってみる。独学で勉強しています。初心者から始めたので困ったことを書いて同じ境遇の方のヒントになればと思います。

django-allauthを使ってメールを送信を絡めてユーザ登録したい

前提

sendgridを使ったユーザー登録を実行

emailを送信するためにはsettings.pyをいじると送れることは知っておくこと。
ここの設定によってemailの送信を例えばgmailから送ったり、sendgridのようなメール配信サービスのAPIを利用して送ったり、またはメールをターミナルに送信して確認することができる。

情報収集

まず本家のドキュメントを見ると,

ACCOUNT_EMAIL_REQUIRED (=False) The user is required to hand over an e-mail address when signing up. ACCOUNT_EMAIL_VERIFICATION (=”optional”) Determines the e-mail verification method during signup – choose one of "mandatory", "optional", or "none". When set to “mandatory” the user is blocked from logging in until the email address is verified. Choose “optional” or “none” to allow logins with an unverified e-mail address. In case of “optional”, the e-mail verification mail is still sent, whereas in case of “none” no e-mail verification mails are sent.

ACCOUNT_EMAIL_REQUIREDをTrueにする事が必要そうだ。
次にACCOUNT_EMAIL_VERIFICATIONには、値としてoptional,mandatory,noneがある。メール受信できたかどうか知りたいのでmandatoryにすれば良いと思われる。

気になること

sendgridを使ってメールを送信するのでユーザー登録時(sign up時)のviews.pyにsend_mail関数を付け加える必要があるのか無いのか?django-allauthのviewsの仕組みを理解する必要がある。

結論

django-allauthにメール送信機能も備え付けてあるため、自分でsend_mail関数を使って送信する必要がない。単純にsettings.pyにmail受信の確認設定さえすれば良い。

sendgridに関わるメモ

メモ

https://simpleit.rocks/python/django/adding-email-to-django-the-easiest-way/

上記リンクについて補足 
djangoのメール送信はsend_mailで送信できるが、sendgridを使う場合当該ライブラリをインストールしてsettings.pyを指定の通りに変更するだけでsendgridからメールを送信する状態に切り替えることができる。

どうやってメモ本文をhtml形式にして表示させることができるのか

 

ホワイトリストとは

https://salt.iajapan.org/wpmu/anti_spam/universal/measure/whitelist-blacklist/
メール受信の選別基準のようだ。受信するか否かの判断をブラックリスト,ホワイトリストで定めるようだ。ホワイトリストは指定した人からのみメールを受信する構造でブラックリストは指定された人からのメールは受信しないようにする構造らしい。

 

メールの見出し字大きさ指定とかしたい場合

まずdjangoにはメール送信に関わるスクリプトが準備してある。メールを送信するならsend_mail()関数を利用すれば良い。djangoのsend_mail()関数の引数の本文は文字列なので、いろいろ細工したいときには不都合だと感じた。
そこでいかなる方法を取れば単なる文字列から細工した状態に、もっと欲を言えば、htmlを反映したメール本文を表示できるか調べてみる。

考えられる方法として引数にhtmlファイルを渡すという方法が考えられる。方法としてsendgridにテンプレートを作り、それを送信する。引数にjsonのデータを使うことでテンプレート内容も編集可能のようだ。下記参照。

https://qiita.com/kikutaro/items/6513acd7420ee88839e9

その他の方法としてrender_to_string関数を用いるとテンプレートにカスタマイズできるようだ。下記参照
https://narito.ninja/blog/detail/64/
https://docs.djangoproject.com/ja/2.2/topics/templates/#django.template.loader.render_to_string

from django.template.loader import render_to_string
from django.core.mail import send_mail

subject = "件名"
context = dict()
context["client_name"] = client.name
context["orderId"] = orderId
template = "orders/mails/order_cofirm.txt"
message  = render_to_string(template,context)
recipient_list = []
recipient_list.append(client.email)
send_mail(subject, message, from_email, recipient_list)

変数templateはdjangoでテンプレートを指定するやり方で指定する。これはrender_to_strung関数の動きがテンプレート探索の方法をとっているからだ。つまり上記の変数templateを定めるならばorder_confirm.txtのパスは以下になる。project/orders/templates/orders/mails/order_confirm.txt

 

sendgridで改行コード"¥n"を使いたい

https://stackoverflow.com/questions/38158192/unable-to-get-a-single-linebreak-while-sending-email-through-sendgrid/38159026

上記によるとsendgridの仕様による影響で改行コードが反映されていないようだ。これについては以下を見るともっと分かりやすい。

https://qiita.com/Sekky0905/items/955a73e51ceb1671d4af

sendgridの仕様では、string型の文字列からhtmlに変換したものをメールとして配信するようだ。
”””Turn on if you don't want to convert your plain text email to HTML”””settings/mail settings/ plain content参照。 自分の設定もoffになっていたのでonにして試してみる。試した結果無事に改行が反映された文面でメールを送ることができました。

windowsでpython のgoogletransをインストールする方法

googletransはエラーが出る

よく考えられるpip installでgoogletransをインストールするとエラーが出て使えない状況に陥る。この状況にはパッチされた新たなgoogletransをインストールすることで解決できる。

環境

  • windows10
  • anaconda

やり方

https://stackoverflow.com/questions/52455774/googletrans-stopped-working-with-error-nonetype-object-has-no-attribute-group
上記のanswer通りgit cloneすればよい。しかしながらwindowsではmacとは違いgitはインストールされていない。したがってgitコマンドが存在しない。

そのためgit for windowsを使う方法も考えられるが、以下のようにして対処した。以下の方法はgitが全く分からなくても何しているか想像できる。

パッチされた新たなgoogletransのソースコードgithubから取得する。https://github.com/BoseCorp/py-googletrans

上記urlからclone or downloadボタンからソースコードをダウンロードする。

次にコマンドプロンプトを開き、googletransがあるディレクトリに移動する。

# 例えばデスクトップにグーグルトランスをダウンロードしたなら
C:\Users\USER\Desktop>cd py-googletrans

そして以下のコマンドを入力する。

pip install setup.py

これでグーグルトランスを使えるようになりました。

セキュリティ

不正アクセスの種類

ほとんどの不正アクセスSSH,FTP,HTTP/HTTPSであるらしい。セキュリティを上げるためにはこれらの設定を整えれば良いらしい。

httpに関しては海外IPアドレスからのアクセスを遮断する方法が有効であるらしい。

参考:https://www.cyberbrain.co.jp/news/security/01/
参考:https://www.seohacks.net/basic/terms/htaccess/
上の参考資料によると、http,httpsのアクセスは.htaccessで制限できるようだ。ただしこれはapacheでの使用を前提にしている記事を読んだので、nginxで.htaccessを使用できるかは不明である。

apache.htaccessをnginx用に変換するサービスが有るようだ。下記参照
https://teratail.com/questions/7098

nginxでは一般的にどのようにしてIP制限をするのだろうか

こちらを参考すると/etc/nginx/conf.d/project.confの設定ファイルを編集するだけでIP の制限ができるようだ。
https://qiita.com/ShinyaOkazawa/items/50b6ba4dcc8cb116ca91

allowにアクセスを許可するIPアドレスを記入する。deny allで全てを拒否する設定になる。

注意点

ipにはグローバルIPとプライベートIPが存在している。nginxの設定ファイルで必要としているIPはグローバルIPだ。プライベートIPはローカルのマシンから調べることができるが、この値を使ってはならない。グローバルIPは以下にアクセスすると自分のIPを把握することができる。
http://www.axisnetworks.biz/tools/gip/

gunicornをインストールしてサービス公開

collectstaticを実行

サーバーに/usr/share/nginx/html/media,/usr/share/nginx/html/staticディレクトリがあることを確認してcollectstaticを実行する。

# ディレクトリがない場合以下を実行
$ mkdir /usr/share/nginx/html/media
$ mkdir /usr/share/nginx/html/static
python3.6 manage.py collectstatic

gunicornをインストール

 

$ pip3.6 install gunicorn

manage.pyがあるディレクトリに移動する。そして以下のコマンドを入力するとサービス公開できる。

$ gunicorn --bind 127.0.0.1:8000 config.wsgi:application

 

デーモンモードで公開する。

$ gunicorn --daemon --bind 127.0.0.1:8000 config.wsgi:application

postgresqlのパッケージについて

参考:https://lets.postgresql.jp/documents/tutorial/yum/yum

 

パッケージ名 主に格納しているもの
postgresql-libs libpqなどのPostgreSQLのライブラリ群。
PostgreSQL以外のパッケージが必要とすることもあります。
postgresql psqlpg_dumpなどのPostgreSQLのクライアントユーティリティ
postgresql-server initdbやpg_ctlなどのPostgreSQLのサーバユーティリティ。
DBMSサーバとして必要な機能はこれに含まれています。
postgresql-contrib pgbenchやpg_statstatementなどのPostgreSQLのcontribモジュール。
postgresql-devel PostgreSQLのヘッダやpg_configなどの開発用モジュール。
postgresql-doc PostgreSQLのドキュメント。
postgresql-test PostgreSQLリグレッションテスト用モジュール。

エラー: django.db.utils.ProgrammingError: syntax error at or near "WITH ORDINALITY" LINE 6: FROM unnest(c.conkey) WITH ORDINALITY co...

エラー

django.db.utils.ProgrammingError: syntax error at or near "WITH ORDINALITY"
LINE 6:                     FROM unnest(c.conkey) WITH ORDINALITY co...

以上のエラーが発生した。
これはdjangoのmigrateコマンドを実行したときのエラーである。

環境

環境
---------------centos7----------------
$ cat /etc/redhat-release

CentOS Linux release 7.6.1810 (Core)
--------------------------------------
---------------python-----------------
$ python3.6 -V

Python 3.6.6
--------------------------------------
---------------django-----------------
$ pip show django

Name: Django
Version: 2.1
Summary: A high-level Python Web framework that encourages rapid development and clean, pragmatic design.
Home-page: https://www.djangoproject.com/
Author: Django Software Foundation
Author-email: foundation@djangoproject.com
License: BSD
Location: /home/*****/.local/lib/python3.6/site-packages
Requires: pytz
Required-by: django-allauth
-------------------------------------
--------------postgrsql--------------
$ postgres --version

postgres (PostgreSQL) 9.2.24
-------------------------------------

 

今までデプロイできていたのに何らかの理由でできなくなってしまった。

参考:https://stackoverflow.com/questions/55740085/django-db-utils-programmingerror-syntax-error-at-or-near-with-ordinality-line

上記によるとdjangoのバージョン2.1では、postgresqlは9.4以上を必要とするらしい。エラーの原因はこのバージョンが問題であった。

https://docs.djangoproject.com/ja/2.1/releases/2.1/#dropped-support-for-postgresql-9-3

エラー対処方法

postgeSQL公式のリポジトリを利用する。
https://yum.postgresql.org/

上記からpostgresqlリポジトリをインストールする。具体的には以下の流れで実行する。
postgresql公式url(上記)にアクセスする。
使いたいpostgresqlのバージョンを選択しクリック。例えばpostgreql11を利用するとする。
自分が使っているのosはcentos7なのでCentOS 7 - x86_64がリポジトリである。このリンクに対し、右クリックでリンクのアドレスをコピーを選択する。
次にサーバーのコマンドラインにリンクのアドレスを貼り付ける。

sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

これでpostgeSQL公式のリポジトリを利用できる状態にできた。

sudo yum install postgresql11-server

これでバージョンを上げたpostgresqlを利用することでdjangoのmigrateコマンドをエラーなく実行することができた。

centos7 psycopg2のインストールエラー

sudo pip3.6 install psycopg2のエラー

Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-70sqru_l/psycopg2/

以上のようなエラーが出た。この問題には以下のように解決する。

https://ja.stackoverflow.com/questions/46978/pip-%E3%81%A7%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%A8%E3%83%A9%E3%83%BC-command-python-setup-py-egg-info-failed

 

pip install --upgrade pip setuptools

上記コマンドを実行し、Successfully installed setuptools-41.0.0にアップグレード。再びpsycopg2のインストールを試みると次のエラーが出た。

Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-kegfrwd6/psycopg2/

エラーが若干変わったと思いきや、同じ場所で引っかかっている気もする。

ググり方をエラー内容ではなく"centos psycopg2 error"で調べたら以下が出てきた。
https://stackoverflow.com/questions/12908807/cant-install-psycopg2-on-centos

これによると以下2コマンドを実行してみることと書いてあった。

yum install python-devel
yum install postgresql-devel

これらを実行してもpsycopg2はインストールできなかった。

./psycopg/psycopg.h:34:20: fatal error: Python.h: No such file or directory
     #include <Python.h>

このようなエラーが出てきたので次のように検索をかけて、解決案を探した。検索内容:./psycopg/psycopg.h:34:20: fatal error: Python.h: No such file or directory centos7

解決案:https://stackoverflow.com/questions/21530577/fatal-error-python-h-no-such-file-or-directory

For yum (CentOS, RHEL...):

sudo yum install python-devel   # for python2.x installs
sudo yum install python34-devel   # for python3.4 installs

そこで# yum install python36-develとした。その次にpsycopg2をインストールする事ができた。

少し振り返る

何が何だか分からなかったけれども、最初のエラーでは

Error: pg_config executable not found.
    
    pg_config is required to build psycopg2 from source.  Please add the directory
    containing pg_config to the $PATH or specify the full executable path with the
    option:

これが原因だった。これについてはこれが参考になると思われる。http://kumagonjp2.blog.fc2.com/blog-entry-204.html

次のエラーで./psycopg/psycopg.h:34:20: fatal error: Python.h: No such file or directory #include Python.hと出たのに対してはpython-develがないことが原因らしい。自分の場合はpython3.6だったので,yum install python36-develとしたらクリアできた。

centos7にdjangoをインストール

djangoのインストール

pipを予めインストールしておくこと。

sudo pip3.6 install django==2.1

その他djangoに必要と思われるもののリスト

# djangoで画像を表示させるアプリを作る時
pip3.6 install -y Pillow

# django-allauthを使う時
pip3.6 install -y django-allauth

centos7にnginxをインストール

nginxをインストールする

まずnginxをインストールするためのレポジトリを準備する。以下のコマンドを実行しないとnginxのソースがないのでnginxのインストールできない。

yum install -y epel-release

nginxのインストール

sudo yum install -y nginx

nginxのサービス開始

sudo systemctl start nginx
sudo systemctl enable nginx

 

http(80番ポート)を開放

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload

 

nginxの設定ファイルを編集

 

sudo vi /etc/nginx/conf.d/project.conf
server {
    listen  80;
    server_name 153.126.216.172;

    location /static {
        alias /usr/share/nginx/html/static;
    }

    location /media {
        alias /usr/share/nginx/html/media;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

設定ファイルの適正性を確認

sudo nginx -t
#以下のように表示されれば設定ファイルは問題ない。
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
sudo systemctl restart nginx

初期化したサーバにssh接続できない件

エラー原因のコマンド

ssh root@***.***.***.***

エラーメッセージの一部

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:X5+91O42RA7+w6+TnMkNccoQIW30PeGYs9SeYwOAlkg.
Please contact your system administrator.

エラーになった背景

サーバーの環境構築に失敗したため、centos7をサーバーに再び入れ直しssh接続した。

エラー対処方法

クライアント側の.sshにknown_hostsがある。このファイルから当該サーバー分の記録をviを使って消去する。サーバーの記録はIPで記録されているのでそこを起点に探すと良い。
そして再びエラーが出てしまったsshコマンドを入力して接続する。

メモ

どうやら初めてサーバにssh接続するとクライアント側の.ssh/known_hostsに接続に関連した記録が残るようだ。初期化したサーバーには、その記録が残っているとエラーが出て接続できない結果になる。しかし意図がわからない。

さくらVPSを使ってdjangoを公開する まとめ

さくらVPSにcentos7を入れる

http://torajirousan.hatenadiary.jp/entry/2019/03/31/011303

centos7の初期設定

サーバーへ安全にssh接続できるような設定を行う。
http://torajirousan.hatenadiary.jp/entry/2019/04/22/172101
条件は以下の通り。

  • root以外のユーザからの接続
  • 公開鍵秘密鍵を使った認証
  • ssh接続用のport番号の変更

centos7にnginxをインストール

 http://torajirousan.hatenadiary.jp/entry/2019/04/22/224755

 

postgresqlをインストール、設定

http://torajirousan.hatenadiary.jp/entry/2018/09/10/054545

centos7にpython,djangoをインストール

python,pipのインストール
http://torajirousan.hatenadiary.jp/entry/2019/01/13/234422

centos7にdjangoをインストール

http://torajirousan.hatenadiary.jp/entry/2019/04/22/230911

gunicornをインストールしてサービス公開

http://torajirousan.hatenadiary.jp/entry/2019/04/27/185130

サーバー構築 ssh関係

前提の説明

centos7を入れたばかりのサーバーには、ssh root@***.***.***.***で接続することができる。もちろんrootユーザーのパスワードが必要ではあるが、パスワードさえ分かれば接続できてしまう。
言い換えればデフォルトのsshの設定では不特定多数の第三者でも接続できる状態 を意味する。
この記事はsshでサーバーに接続する方法論ではない。不特定多数の第三者でも接続できる状況から如何にセキュリティを上げ、自分だけが接続できる状態にするか、これが本記事の主題なのである。この記事では様々な設定を行っていくのだが、それらはすべてセキュリティ向上の手段の1つとして認識すると一体的な理解につながる。

想定環境

  • centos7

概要

ssh接続するには以下のコマンドをクライアント側(ローカル)で入力する。このコマンドを成立させるための準備を行えば、セキュリティを担保したssh接続ができる。

ssh -p [22以外のポート番号] -i [秘密鍵] rootでは無いユーザ名@サーバのipまたはドメイン

このコマンドを入力するためには

  • rootではないユーザでしか認証できないようにすること
  • 22以外のポート番号を準備すること
  • 公開鍵周りを準備すること(=パスワード認証の拒否を設定すること)

この3つが必要となる。これを設定することで、特定のユーザー名と特定のポート番号と特定の鍵情報をもっていないとサーバーに接続できなくなる。これは最初のsshの接続条件とは大きく変えることができる。

 

特定のユーザでしか認証できないようにすること

 まず特定のユーザーを作成すること。そしてrootによる接続を拒否する設定をする。これで"rootではないユーザでしか認証できないようにすること"が可能になる。

特定のユーザーを作成する

サーバーにて以下のコマンドを実行する。

# userを作成
useradd hoge
# 作成したuserのpasswordを設定 hogeはuser名
passwd hoge

 

rootによる接続を拒否する

rootによる接続を拒否するには、サーバー側のsshに関する設定ファイル(sshd_config)を変更すれば良い。

# 設定ファイルの編集
vi /etc/ssh/sshd_config
#PermitRootLogin yesをnoに変更する
PermitRootLogin no

 

サーバにssh用のポートを準備すること

ざっくり言えば、

  1. ポートの番号設定
  2. firewallの当該ポート番号を許容する設定

をすることになる。

ポートの番号設定

ssh用のポート番号設定は、ssh関係の設定ファイルのポート番号を変更するだけで良い。イメージとしては、設定(config)ファイルをvi(m)で変更して上書きする。 設定ファイルは/etc/ssh/sshd_config である。

vi /etc/ssh/sshd_config

例えばポート番号を15156と適当に決めたとすると、#Port 22と書いてある場所を見つけ Port 15156と書く。ポート番号をデフォルトの22から変更するのは、他の人にサーバを乗っ取られにくくするためである。

#Port 22
上記を下記に書き換え
Port 15156

これでポート番号の設定は完了しました。sshd_configを変更したら更新するために以下を行う。

# centos7の場合はsshdをrestartするためにfirewallの設定を一時無効化するsetenforce 0を必要があります
# setenforce 0
# systemctl restart sshd.service

firewallの当該ポート番号を許容する設定

ポート番号を変更したらとfirewallも設定変更するはルールになります。したがって今からfirewallの設定を変更すること、変更したことを反映させる作業をします。
留意点は、firewallの設定(定義)ファイルが/usr/lib/firewalld/services/ssh.xmlというパスで存在しています。これを直接編集せず、このファイルをコピーし、/etc/firewalld/services以下に置く。コピーした定義ファイルをsshd_configで設定したポート番号を許容するために記述するということです。

一般的に/etcにはサービス(デーモン)の設定ファイルを配置するようです。したがって設定の雛形と言えるべき/usr/lib/firewalld/services/ssh.xmlをコピーし、/etc以下に配置します。
参考:https://oshiete.goo.ne.jp/qa/8029047.html

 

# ファイアウォールの定義ファイルをコピー
# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services

 

# コピーした設定ファイルにポート番号22から変更ポート番号に記述変更
    # vi /etc/firewalld/services/ssh.xml
<port protocol="tcp" port="15156">

上記のコマンドで設定ファイルを変更することができた。
次に設定変更を反映させるコマンドを入力します。

# 設定変更をfirewallに反映させる
# firewall-cmd --reload

公開鍵周りの準備

サーバに接続する方法としてセキュリティを上げるため公開鍵認証を用いる。やり方は対となる公開鍵と秘密鍵を作る。公開鍵をサーバ(authorized_keysファイル)に登録する。ローカルには秘密鍵を保持しとく。そして上記のsshコマンドのように秘密鍵を使いssh接続する。これを実現するには、

  1. 公開鍵秘密鍵を作成する
  2. 公開鍵をサーバに送る
  3. 送られた公開鍵をauthorized_keysファイルに登録する。

なおsshがわけがわからなくなるのは、クライアント側で行う処理とサーバー側で行う処理を分けて整理できていないことが原因だった。クライアント、サーバーを明示する。

公開鍵秘密鍵の作成(クライアント側)

作成方法はmacwindowsで異なる。
windowsの場合は、teratermを使ってssh鍵を作成する。
macの場合はすでにopen-sshがインストールされているので以下のコマンド入力で鍵を作成できる。

$ ssh-keygen -t [鍵タイプ]

鍵タイプはrsaを選択する。だから以下のコマンドになる。

$ ssh-keygen -t rsa

また鍵は-fを追加するとファイル名を定めることができる。

$ ssh-keygen -t rsa -f [ファイル名]

特に-fオプションを使う理由が現状では見当たらない。

公開鍵をサーバに送る(クライアント側)

macの場合は以下のようにした。このときsshのポートを利用したけど、事前にポート開放とうしておかないといけないかも?

scp -P [ポート番号] -i [公開鍵] [送信したいファイルパス] [ユーザー名]@[サーバーのドメインorIP] : [ファイルのおきさき(ディレクトリ)]

具体例:

scp -P 22 -i id_rsa.pub /Users/takashi/.ssh/id_rsa.pub chiaki@156.345.134.431.:/tmp 

サーバーのファイルの置く場所を指定すること。しないとファイルがいっこうに送信されない。ファイルが送れる場合、パスワードが要求された後、そのファイルが送信されたことが表示される。

クライアント側から受け取った公開鍵をauthorized_keysファイルに登録する(サーバー側)

sshの設定ファイル/etc/ssh/sshd_configに以下の内容がある。

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile      .ssh/authorized_keys

 

デフォルトで公開鍵のチェックは.ssh/authorized_keysを参照することになる。だから.ssh/authorized_keysを準備する必要がある。

mkdir .ssh
chmod 700 .ssh
cat id_rsa.pub >> .ssh/authorized_keys
chmod 600 .ssh/authorized_keys