Redmineに通知メールの設定をした時のメモ
Redmineで、通知メールが送信できるように設定したのでメモ
環境はArchLinux
メールの設定
今回は、Redmineと同サーバにPostfixをインストールし使用する
まず、Postfixのインストール
$ sudo pacman -S postfix
mailの設定はmail.mdの設定を確認
config/configuration.ymlのサンプルをコピーする
$ sudo -uhttp cp config/configuration.yml.example config/configuration.yml
config/configuration.yml に以下の行をアンコメントして編集
$ sudo vim config/configuration.yml
default: email_delivery: delivery_method: :smtp smtp_settings: address: "localhost" port: 25 domain : redmine.hnron.net
既に default: と email_delivery: はアンコメントしてあるはずなので、その後に残りの行を追加するか、=== Simple SMTP server at localhost
という項目がコメントアウトしてあるので、その部分をアンコメントする。
この時、email_delivery
が2箇所存在すると、エラーになるので注意
設定したらhttpdを再起動する
$ sudo systemctl restart httpd.service
特にポートとかは開放しなくておk
参考
RedmineにSSLを設定した時のメモ
忘れそうだったのでメモ
環境とか
- ArchLinux
- apache2.4
証明書を作成する
証明書の作成
オレオレ証明書をopensslで作る(詳細版)Add Star
こことか、
無料のSSL証明書StartSSLを活用する
こことかで証明書を作成する。
Apache側での設定
Moduleのアンコメント
LoadModule ssl_module modules/mod_ssl.so LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
をアンコメント
httpd.conf
Include conf/extra/httpd-ssl.conf
をアンコメント
extra/httpd-ssl.conf
DocumentRoot "/srv/http" ServerName www.example.com:443 ServerAdmin you@example.com
を
DocumentRoot "/srv/redmine-3.0.3/public" ServerName redmine.my.domain:443 ServerAdmin postmaster@my.domain
こんな感じで変更
証明書ファイルの指定
上で取得した証明書を extra/httpd-ssl.conf で指定する
# vim /etc/httpd/conf/extra/httpd-ssl.conf SSLCertificateFile "/etc/httpd/conf/ssl/server.crt" SSLCertificateKeyFile "/etc/httpd/conf/ssl/server.key"
FREAKとかPOODLE対策
- FREAK (Factoring attack on RSA-EXPORT Keys) 対策で Web サーバに行った SSLCipherSuite の設定例
- httpd における POODLE SSLv3.0 脆弱性問題の解決方法 (CVE-2014-3566)
ここを参考に
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA SSLHonorCipherOrder on SSLProtocol All -SSLv2 -SSLv3
このパラメータを設定しました。
Redmine側の設定
管理 > 設定 > 全般 > プロトコル でHTTPSを選択。
強制的にhttpsじゃないと通信できなくする
この設定をすると強制的にhttpsを使用させることができる
もし、ページによって通常のHTTP通信をさせたい場合は、公式Guideに載っているのでそっちを参照
/srv/redmine-3.0.3/config/environments/production.rb
を編集し、ファイル内のend
よりも前の行に、
config.force_ssl = true
を追加する。
参考
Redmineの設定メモ
日本語の最適化
既定の言語 と 名前の書式 の設定
日付時刻や通知メールの言語に影響がある。
左上の管理から
管理 > 設定 > 表示
デフォルトの言語を "Japanese(日本語)" に設定
ユーザ名の表示形式を "Admin Redmine" に設定
後はお好みで
設定が終わったら保存ボタンで保存
リポジトリブラウザで文字コードの自動判別
管理 > 設定 > 全般 > 添付ファイルとリポジトリのエンコーディング
以下を追加する。
utf-8,cp932,euc-jp
ホスト名、プロトコル、テキストの書式
管理 > 設定 > 全般
ホスト名とパス : ホスト名を入力 ここはメールで使用する
プロトコル : SSL/TLSを使用している場合HTTPSに
テキストの書式 : お好みに
Redmineの情報を外部から見られないように設定
管理 > 設定 > 認証
から、認証が必要にチェック
勝手にユーザ登録されないように設定
管理 > 設定 > 認証
ユーザーによるアカウント登録
無効か、手動でアカウントを有効化にしておく
バックアップ
バックアップが必要な場所は2箇所
MySQL内のRedmineのデータベース
Redmineのfilesディレクトリ
以下Redmine Guideに書いてあったスクリプト例
Database
/usr/bin/mysqldump -u <username> -p <password> <redmine_database> | gzip > /path/to/backup/db/redmine_`date +%y_%m_%d`.gz
Attachments
rsync -a /path/to/redmine/files /path/to/backup/files
[参考サイト]
ArchLinuxにVirtualboxをインストールする手順
2016/09/13 【追記】内容古いです。普通にArchWiki見たほうがいいです。
自分用のメモ
手順のみ
インストールだけしたい時用
詳しい説明はWikiを見て
必要なパッケージをインストール
# pacman -S virtualbox qt4 virtualbox-guest-iso
あとAURから
virtualbox-ext-oracle
をインストール
モジュールのロード
# depmod -a
# modprobe vboxdrv
# vim /etc/modules-load.d/virtualbox.conf
以下を記入
vboxdrv vboxnetadp vboxnetflt vboxpci
vboxusersに追加
# gpasswd -a $USER vboxusers
再ログインする
virtualboxコマンドで起動。sudoとかしなくてもおk
ArchLinuxにRedmineを導入する手順・本番環境構築編
前回のでRedmineを構築出来たので、外部に公開するための本番環境を構築したいと思います。
Apacheで本番環境を構築するために必要なもの
- passengerというApacheのモジュールを導入する必要がある。
- httpd.confに設定を追加。
Passengerの導入
Phusion Passengerは、Railsアプリケーションを実行するためのApacheモジュール。
Passengerのインストール
gemでインストールします。
$ sudo gem install --no-user-install passenger
Apacheモジュールのビルドとインストール
$ sudo passenger-install-apache2-module
対話形式のスクリプトになっています。
ビルドが終了した後、こんな感じのメッセージが表示されるはず。
Almost there!(背景青に黄色文字) LoadModule passenger_module /usr/lib/ruby/gems/2.2.0/gems/passenger-5.0.10/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/lib/ruby/gems/2.2.0/gems/passenger-5.0.10 PassengerDefaultRuby /usr/bin/ruby </IfModule>
Enterを押すと次のメッセージ
Deploying a web application: an example <VirtualHost *:80> ServerName www.yourhost.com # !!! Be sure to point DocumentRoot to 'public'! DocumentRoot /somewhere/public <Directory /somewhere/public> # This relaxes Apache security settings. AllowOverride all # MultiViews must be turned off. Options -MultiViews # Uncomment this if you're on Apache >= 2.4: #Require all granted </Directory> </VirtualHost>
- Almost there!の方はそのまま。
- Deploying a web applicationの方は、
/somewhere/public
の部分を今回Redmineを展開した場所に変更www.yourhost.com
を自分のURLに変更。Require all granted
をアンコメント- Apacheのバージョンが2.4以上ならアンコメントしないとダメ。ちなみにArchの公式リポジトリからインストールできるApacheはバージョンが2.4以上なのでアンコメントしないと動かないので注意
変更するとこんな感じ
LoadModule passenger_module /usr/lib/ruby/gems/2.2.0/gems/passenger-5.0.10/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/lib/ruby/gems/2.2.0/gems/passenger-5.0.10 PassengerDefaultRuby /usr/bin/ruby </IfModule> <VirtualHost *:80> ServerName [自分のURL] DocumentRoot /srv/redmine-3.0.3/public <Directory /srv/redmine-3.0.3/public> AllowOverride None Options -MultiViews Require all granted </Directory> </VirtualHost>
変更したら、/etc/httpd/conf/httpd.conf
に書き込む
書き込む場所はどこでも大丈夫だけど、LoadModuleがずらずら書いてあるところの最後辺りに追加してあげるといいかも。
文法チェック
Apacheを起動する前に文法チェックをしておく
apachectl configtest
もし問題がなければ Syntax OK
と表示される。
問題があれば行数と理由が表示される。
ApacheとMySQLの起動
$ sudo systemctl start httpd
$ sudo systemctl start mysqld
既に立ち上がっていた場合はrestartで
うまく起動出来たらenableしておく
$ sudo systemctl enable httpd
$ sudo systemctl enable mysqld
実際にアクセスしてみる
ブラウザでアクセスしてみる ユーザ名とパスワードは初期設定でadmin、adminとなっている。
エラーが出た場合
We're sorry, but something went wrong.
- httpd.confに
RailsEnv development
を追加する。 - 詳しくはここ
- httpd.confに
Internal error
- 多分MySQLの起動し忘れ
Access forbidden!
- httpd.confの設定がミスっている可能性がある。
- 文法チェックがokな場合、ディレクトリ名を間違ったりしていないかチェック
- もしくは、Apacheのバージョンが2.4以上の場合、
Require all granted
のアンコメントし忘れ
その他知っておくと便利な情報
再起動の仕方
Apacheを再起動すると自動的にRailsアプリケーションも再起動されるけど、バーチャルホストを使用している場合とか、特定のRailsアプリケーションだけを再起動させたい場合、
$RAILS_ROOT/tmp/restart.txt
というファイルを作成することで再起動できる。
中身は空でおk。
例えばRailsアプリケーションが/var/lib/rails/redmineにインストールされている場合、/var/lib/rails/redmine/tmp/restart.txtというファイルを作成してください。中身は空でかまいません。restart.txtを作成した後の最初のリクエストの際に、PassengerがRailsアプリケーションを再起動します。再起動が完了するとrestart.txtは削除されます。
Passengerのチューニング
httpd.confに設定する方法。バーチャルホストごとの設定は不可。
Apacheで生成するRailsインスタンス数を設定
RailsMaxPoolSize
デフォは20。
メモリが少ない場合に大きすぎるとメモリ不足でレスポンスが悪くなる。
Passenger Users Guide では、メモリ256MBのVPS環境では2、2GBのメモリを搭載したサーバでは30が推奨されています。
設定値以上リクエストがなかったらインスタンスを終了させる
RailsPoolIdleTime
デフォは120(秒)。
値が小さすぎると、インスタンスの生成・終了が頻繁になるのでレスポンスが悪くなる。
逆に大きすぎると必要以上に長時間メモリを専有される。
Passenger Users Guideでは、ユーザーのwebサイト上の平均滞在時間の2倍を推奨しています。例えば1回のRedmine上での平均的な作業時間が5分の場合、推奨設定値は600(秒)です。
参考サイト
Ruby, Rails
Redmine
ArchLinuxにRedmineを導入する手順・構築編
ArchLinuxにRedmineを構築したのでメモ
とりあえずRedmine自体の構築のみ
本番環境とSSL/TLSを利用する場合の設定は別に書きます
必要なもの
- データベース
- mysql(mariadb)とかsqliteとかperaconaとかお好みで選べるらしい
- 今回はmariadbを使用する。
$ sudo pacman -S mariadb
- webサーバ(Apache)
- 今回はApacheを使用します。
$ sudo pacman -S apache
- ImageMagick
- 画像を表示させたりするやつ
$ sudo pacman -S imagemagick
- git
- Redmineと連携
リリースパッケージのダウンロードと展開
Redmineのサイトからダウンロード。
$ wget http://www.redmine.org/releases/redmine-3.0.3.tar.gz
$ wget http://www.redmine.org/releases/redmine-3.0.3.tar.gz.md5
md5でハッシュを確認しておく
$ md5sum redmine-3.0.3.tar.gz > 493463.... $ cat redmine-3.0.3.tar.gz.md5 > 493463....
tarをお好みの場所に展開する。
自分は/srvに展開しました。
$ sudo tar fvxz redmine-3.0.3.tar.gz -C /srv/
データベースの用意
コマンドがmysqlとなっているが、あくまでmariadbはmysqlの実装なのでmysqlのコマンドが使える。
データベースの初期設定
デフォルトのテーブルのインストール
自分の環境だとこれをやらないと後でmysqld.serviceが起動できなくなってしまった。
ArchWikiのトラブルシューティングの項目に載っていた
# cd /usr # mysql_install_db --user=mysql --ldata=/var/lib/mysql/
を実行
mysqlの起動
systemdでmysqlを起動してみる。
$ sudo systemctl start mysqld
うまく起動できたら起動時に実行されるようにしておく
$ sudo systemctl enable mysqld
データベースの初期化
セットアップスクリプトの実行
$ sudo mysql_secure_installation
rootのpassを聞かれるが、まだパスワードを設定していないのでそのままEnter
> Enter current password for root (enter for none) :
新しいrootのパスワードを設定するか聞かれるので"y"
> Set root password? [Y/n] : y
> New password:
設定したいパスワードを入力
> Re-enter new password:
設定したいパスワードを再入力
匿名ユーザーを削除する
> Remove anonymous users? [Y/n] :
Enter
リモートからのrootログインを拒否
> Disallow root login remotely? [Y/n] :
Enter
testテーブルを削除する。
testテーブルは誰でもアクセスできてしまう。セキュリティ的に消したほうがいいらしいので消す
> Remove test database and access to it? [Y/n] :
Enter
権限テーブルをリロードする
> Reload privilege tables now? [Y/n] :
Enter
設定は以上で終わり
データベースの文字コード
文字コードをUTF-8に変更します。
ArchWikiに載っていた方法だとうまく変更できなかったので他のサイトで見つけてきた方法で変更します。
ちなみに、RedmineはUTF-8に設定しておけば文字化けはしないそうです。
とりあえず先に現在の文字コードを確認
$ mysql -uroot -p
mysql> show variables like "chara%";
Variable_name | Value |
---|---|
character_set_client | latin1 |
character_set_connection | latin1 |
character_set_database | utf8 |
character_set_filesystem | binary |
character_set_results | latin1 |
character_set_server | utf8 |
character_set_system | utf8 |
character_sets_dir | /usr/share/mysql/charsets/ |
mysqlの設定ファイルを編集し、[client]と[mysqld]に次の行を追加
$ sudo vim /etc/mysql/my.cnf
[client] default-character-set=utf8 [mysqld] character-set-server=utf8
他の設定項目を見ると、アンダーバーとハイフンの2通りの設定項目がありますが、mysqlの設定ファイルの場合、どちらでも問題は無いようです。
ちなみに、default-character-set=utf8
とcharacter-set-server=utf8
は同じ意味だそうです。
詳しくはここ
もう一度確認してみます。
mysql> show variables like "chara%";
Variable_name | Value |
---|---|
character_set_client | utf8 |
character_set_connection | utf8 |
character_set_database | utf8 |
character_set_filesystem | binary |
character_set_results | utf8 |
character_set_server | utf8 |
character_set_system | utf8 |
character_sets_dir | /usr/share/mysql/charsets/ |
データベースユーザの作成
Redmineが使用するMySQLのユーザを作成します。
MySQLにログインし、次の3行を入力
CREATE DATABASE redmine CHARACTER SET utf8; CREATE USER 'redmine'@'localhost' IDENTIFIED BY '[パスワード]'; GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
データベースの設定
"production"環境用のデータベース設定をする。
Railsではproduction、development、testなどの本番環境や開発環境で環境をわけれるらしい?
productionが本番環境用で、developmentは開発環境
違いはdevelopmentはある程度のエラーは許容するみたい
ここでは、一旦Redmineのデータベースの設定を行います。
実際のテーブルとかは後で作成します。
config/database.ymlの作成
Redmineの展開ディレクトリに移動して
$ sudo cp config/database.yml.example config/database.yml
設定ファイルの編集
# vim config/database.yml production: adapter: mysql2 database: redmine host: localhost username: redmine password: "[パスワード]" encoding: utf8
bundlerのインストール
インストール
$ sudo gem install --no-user-install bundler
ArchLinuxでは、デフォルトではgemはシステム全体ではなく、個別にインストールされるようになっている。
--no-user-install
オプションを追加することで、システム全体(/usr/lib/ruby/gems/)にインストールされる
gemのインストール
Redmineの展開したディレクトリの中で
$ bundle install --without development test postgresql sqlite
$ sudo -uhttp bundle install --without development test postgresql sqlite
今回はMySQLを使用するので、postgresqlとsqliteのgemを省略します。
ImageMagickをインストールしていない場合は--withoutオプションにrmagickを追加します。
インストールしている場合、エラーが出ることがあるそうです。
その場合はこことかが参考になりそうです
bundleコマンドは基本的にはsudoを使用しなくて問題ないみたいです。
sudoでbundleを使用したら怒られました
root権限が必要なときはその時にパスワードを求めてくるそうです。
セッションストア秘密鍵の生成
Redmineの展開ディレクトリで下記コマンドを実行
$ sudo rake generate_secret_token
データベース上にテーブルを作成
Redmineの展開ディレクトリに移動
データベースにテーブルを作成
テーブルとRedmineの管理者アカウントが作成される
$ RAILS_ENV=production rake db:migrate
デフォルトデータをデータベースに登録
デフォルトのロール、トラッカー、ステータス、ワークフロー、列挙項目がロードされる
使用言語を聞かれるのでja
と解答
$ RAILS_ENV=production rake redmine:load_default_data
パーミッションの設定
Redmineの展開ディレクトリ内で、
$ sudo mkdir tmp public/plugin_assets
$ sudo chown -R http:http [Redmine全体]
$ sudo chmod -R 755 files log tmp public/plugin_assets
ちなみにRedmine Guideによると、
Railsアプリケーションのディレクトリ($RAILS_ROOT)および$RAILS_ROOT以下のファイル・ディレクトリのオーナーは、root以外としてください。 Passengerでは、root権限でRailsアプリケーションを動かすことはできません。Railsアプリケーションが動作するユーザーは$RAILS_ROOT/config/environment.rbのオーナーとなりますが、environment.rbがrootの場合はnobodyユーザーで動作します。このとき、オーナーがrootである$RAILS_ROOT/logディレクトリや$RAILS_ROOT/tmpディレクトリに書き込みができず、アプリケーションが動作しないことがあります。
rootだとダメみたいです。
構築できたか確認
うまく構築できたか一度確認します。
$ sudo ruby script/rails server webrick -e production
script/railsは無いとか怒られたんでbin/railsを使用します。
$ sudo ruby bin/rails server webrick -e production
外部のVPSなどで起動する場合、そのVPSのIPをオプションで設定してあげる必要があります。
$ sudo ruby bin/rails server webrick -e production -b 157.7.53.36
WEBrickを起動して、http://[ホスト名]:3000/ にアクセスするとRedmineが開けるはずです。
(ポートの開け忘れに注意!)
WEBrickはRedmine Guideによると、
注意: Webrickは通常は開発時に使用すものであり、通常の運用には適していません。動作確認以外には使用しないでください。本番運用においてはPassenger (mod_rails)、FCGI、またはRackサーバ(Unicorn, Thin, Puma, hellipなど)の利用を検討してください。
とのことなので、本番環境を何で動かしゃいいのかググった結果、 ArchWikiに本番環境はApacheにPassengerを導入したものでいいみたいなことが書いてあったので、そうしたいと思います。
本番環境の構築と、設定などは次の記事で書きたいと思います。
ちなみにWEBrickでも login: admin password: admin でログインして設定変更とかは出来ます。
[参考サイト]
MySQL
SSHのインストールと設定
VPSにArchを入れ直した際に行ったSSHの設定とか、
localに保存しておいたメモとかのまとめ
眠い時にうつらうつら書いたので誤字脱字があるかも。
環境
- サーバ - ArchLinux
- クライアント - ArchLinux
SSHのインストール
鯖$ sudo pacman -S openssh
local$ sudo pacman -S openssh
サーバ側の設定
設定
鯖$ sudo vim /etc/ssh/sshd_config
Port
デフォルトポートのままだと攻撃される確率が高いため変更する。
Port 22222
Port番号を変更した場合は、sshコマンドに'-p[ポート番号]'を追加する。
ex) $ ssh -p22222 foo@XXX.XXX.XXX.XXX
Protocol
バージョン1だと脆弱性があるのでバージョン2を使用する。
デフォルトで2だけを使用するように設定されているみたいだけど、明示的に2を使用するように設定する。(特に意味はない)
Protocol 2
PermitRootLogin
rootでログインできるかどうか
もちろん無効にする。
suはsudoはできる。
PermitRootLogin no
PermitEmptyPasswords
空パスワードを使用できるかどうか
無効にする。
PermitEmptyPasswords no
PasswordAuthentication
パスワード認証を使用するかどうか
これを無効にすると公開鍵認証でしか認証できなくなる。
公開鍵の設定をしていない状態でこれを有効にしてしまうとSSHでパスワード認証が出来ずログインできなくなるので注意!!!
PasswordAuthentication no
※ この後にする公開鍵認証の設定を行ってからnoにする。
AllowAgentForwarding
踏み台にできるやつ
詳しくはここ
使用しない場合は無効にする
AllowAgentForwarding no
AllowTcpForwarding
ポートフォワーディングの設定
使用しない場合は無効にする
AllowTcpForwarding no
X11Forwarding
リモートでGUIを使うかどうか
使用しないので無効にしておく
X11Forwarding no
MaxAuthTries
パスワード認証時のログイン試行回数
デフォルトでは6回になっている。
公開鍵認証では関係無い
MaxAuthTries 6
AllowUsers
SSHを使用できるユーザを制限する。
ここでユーザ名が指定されたユーザのみSSHを使用できるようになる。
特定ユーザのみ拒否したい場合はDenyUsers
を使用する。
基本的にはAllowUsers
を使用すべき
AllowUsers foo bar baz
ちなみに、AllowUsers foo@10.1.1.1
とかAllowUsers *@10.1.1.1
とかもできる
(10.1.1.1からのfooでのログインのみ許可や、10.1.1.1からだけログインを許可するといったことができる。)
もしつながらない場合、*@127.0.0.1/8
のようにプレフィックス長も入力するとうまく行くかもしれません
サービスの起動
systemdの場合
鯖$ sudo systemctl start sshd.service
鯖$ sudo systemctl enable sshd.service
Firewall設定
iptablesを使用している場合。
鯖$ sudo vim /etc/iptables/iptables.rules
以下を追加
-A INPUT -p tcp -m state --state NEW -m tcp --dport [ポート番号] -j ACCEPT
FORWARDの後に書くとポートが開かなかったりするので書く場所には注意
試しにログインしてみる
local$ ssh [ユーザ名]@[接続先名]
PasswordAuthenticationをnoにしている場合はまだログイン出来ない。
この後する公開鍵認証の設定が出来てからnoにする。
Port番号を変更している場合は
local$ ssh -p[ポート番号] [ユーザ名]@[接続先名]
公開鍵認証の設定
このままではブルートフォースアタックが出来てしまうので、公開鍵認証を使用したログイン方式に変更する。
まず、クライアント側で秘密鍵と公開鍵のペアを作成する。
鍵の種類について
DSAよりRSAの方が暗号強度が高い
DSAはユーザ認証しかカバーしていないが、RSAは、ユーザ認証と暗号化の2つをカバーしている。
ただ、SSHの場合は認証だけ公開鍵認証で行って、実際の通信は共通鍵暗号で暗号化しているみたいです。
今回はRSAで鍵ペアを作成したいと思います。
鍵ペアの作成
local$ ssh-keygen -t rsa
ちなみに作成できる鍵のタイプは、
dsa : DSA(SSHv2)
ecdsa :
ed25519 :
rsa : RSAバージョン2(SSHv2)
rsa1 : RSAバージョン1(SSHv1)
こんな感じ
※ rsa1がバージョン1で、rsaがバージョン2だそうです
鍵ペアの名前を設定する。何も入力せずにEnterで~/.ssh/id_rsa
が作成される。
Enter file in which to save the key (/home/hnron/.ssh/id_rsa): [鍵ペア名]
ちなみに相対指定はできるけど~(チルダ)は使えなかった
鍵名はデフォルトの場合問題ないが、自分で指定する場合、'-i'オプションで秘密鍵を指定する必要がある。それを回避する方法は下の方に書いておきます。
パスフレーズの入力。
Enter passphrase (empty for no passphrase): [パスフレーズ]
Enter same passphrase again: [パスフレーズ]
パスフレーズは無くても問題は無い。ちなみんパスフレーズはネットワーク上に流れず、ローカルで処理される。
秘密鍵が流出しちゃった時に、パスフレーズが設定されていると、パスフレーズが解析されるまで時間が稼げる。
詳しくはここ
鍵ペアの作成が成功するとフィンガープリントが表示される。
これで公開鍵と秘密鍵のペアが'~/ssh/'内に作成される。
鍵は、'[鍵ペア名]'で指定したものと同じ名前のほうが秘密鍵、.pubの拡張子が付いている方が公開鍵。
アクセス権と鍵の場所
鍵ペアは特に理由が無い限り ~/.ssh/ 内に保存しておく
パーミッション
local側
~/.ssh 700
秘密鍵 600
公開鍵 644
~/.ssh/known_hosts 644
サーバ側
~/.ssh 700
~/.ssh/authorized_keys 644
~/.ssh/known_hosts 644
パーミッションがおかしいとSSH使用時に怒られる。
公開鍵をサーバに登録する
公開鍵をサーバに登録する方法は2通りある
scpでコピーする方法とssh-copy-idを使用する方法
scpでコピーする方法
~/.ssh/[鍵].pub をscpコマンドを使用してサーバに登録する。
local$ scp -P[ポート番号] ~/.ssh/[公開鍵].pub foo@XXX.XXX.XXX.XXX:
コピーするユーザはSSHで普段ログインするユーザ
一度サーバ側にログインし、公開鍵がコピーできているか確認
local$ ssh -p22222 foo@XXX.XXX.XXX.XXX
鯖$ ls [公開鍵].pub
このファイルを '~/.ssh/authorized_keys' に追記する
鯖$ mkdir ~/.ssh 鯖$ touch ~/.ssh/authorized_keys 鯖$ cat [公開鍵].pub >> ~/.ssh/authorized_keys 鯖$ chmod 700 ~/.ssh 鍵$ chmod 644 ~/.ssh/authorized_keys
一度ログアウトして再度SSHログインをすると公開鍵認証になるはず
-i
オプションでサーバに登録した鍵ペアの秘密鍵を指定する
local# ssh -i [秘密鍵] -p[ポート番号] foo@XXX.XXX.XXX.XXX
ssh-copy-idを使用する方法
local$ ssh-copy-id -i [秘密鍵] -p[ポート番号] foo@XXX.XXX.XXX.XXX
これで自動的に秘密鍵に対応する公開鍵がサーバの~/.ssh/authorized_keysに登録される
公開鍵認証を有効にする
この後、サーバ側の/etc/ssh/sshd_configの設定で
PasswordAuthentication no
の設定にしておきます
これでパスワード認証が無効になって公開鍵認証しか使えなくなりました
オプションで秘密鍵を指定するのが面倒な場合
ssh-keygenで鍵ペアを作成する場合、デフォルトの鍵名の場合は-iオプションが必要無いが、自分で鍵名を指定した場合は-iオプションで秘密鍵を指定する必要がある。
~/.ssh/configにチョメチョメすると回避できる
ちなみに、Port番号も指定できる
local$ vim ~/.ssh/config
# アクセスする際の名前(ただのalias) Host XXX.XXX.XXX.XXX # ユーザ名 User foo # 実際のIPアドレスやホストネーム Hostname XXX.XXX.XXX.XXX # 秘密鍵の場所 IdentityFile ~/.ssh/[秘密鍵] # ポート番号 Port 22222 # パスワード認証の有無 PasswordAuthentication no # 公開鍵認証の有無 RSAAuthentication yes Host bar.com User foo Hostname bar.com IdentityFile ~/.ssh/[秘密鍵] passwordAuthentication no RSAAuthentication yes
パスフレーズを入力するのが面倒な場合
ssh-agentを使います
ssh-agentの子プロセスとしていつも使ってるシェルを起動
local$ ssh-agent zsh
local$ ssh-add [秘密鍵]
Enter passphrase for /home/hoge/.ssh/key: [パスフレーズ]
これでSSHでログインしようとするとパスフレーズを入力せずにログインできるようになっているはずです