Ubuntu16.04 – キーボードのキー割り当て(キーバインド)をxkbで変更する

ホームディレクトリに.xkbというのを作って、.xkb以下に設定ファイルを作成して、.bashrcとか、.zshrcとかでそれを読みこませることで細かいキーバインド設定が可能。

[xkb] Ubuntu 14.04 で Caps Lock を別のキーにする方法
Ubuntu 14.10でキー配置を変更してみた xkb編

上記を全部一通り読んだらできた。ちなみに下記は英語だけど色々詳しく書いてある。
An Unreliable Guide to XKB Configuration

以下はメモ。

下記で現在のキー設定を確認できる。

$ setxkbmap -print

下記でイベントリスナーが取得してる内容をみることができて、各ボタンをおしたときに、コードや反応しているアクション名などを確認することができる。

$xev

下記パス以下に、xkbの設定が入っている。

/usr/share/X11/xkb/

下記で、xkbの設定を反映することができる。mykbdは自分で命名した内容による。

$ xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY 2> /dev/null

自分が設定してみた内容は下記です。

~/.xkb/keymap/myxkb

xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+jp+us:2+inet(evdev)+myswap(swapkeys)"   };
    xkb_geometry  { include "pc(pc105)" };
};

~/.xkb/symbols/myswap

partial modifier_keys
xkb_symbols "swapkeys" {
  key <AB11> { [ underscore, backslash ] };
  key <MUHE>  { [ Escape, Escape ] };
  key <HENK>  { [ BackSpace, BackSpace] };
  key <HKTG>  { [ Return, Return] };
  key <LALT>  { [ Control_L, Control_L] };
  key <LCTL>  { [ Alt_L, Alt_L] };
};

windows10とubuntu16.04のデュアルブート

このubuntu16.04日本語版をデュアルブートさせました。このサイトを見ながらやりました。最初うまくいきませんでしたが、セキュアブート設定をオフにしていなかったためで、オフにしたらすんなりできました。ただ、パーティションの切り方が自分的によろしくないと思ったので、再設定・再インストールすることにしました。

やった手順は、完全に上記参考サイトと同じで、UbuntuのisoイメージをこのツールでUSBにコピーしました。メインPCとしてメールとかも送るのであれば、日本語版の方がいいのかなと思ってますが、フォルダ名が、「デスクトップ」とか、「ダウンロード」とか、そこは日本語じゃなくていいのにみたいのも多くて、英語版の17.04にしちゃおうかなとも思いました。まあでもとりあえず日本語版でいいか。

パーティションですが、Linuxの場合、SSDに起動プログラムやメインのプログラムを入れて、他のアプリケーションやファイルはHDに入れようと思ったものの、apt-getとかだと基本的にインストール先決まっているし、毎回インストール先を変更するというのは大変なので、/以下全てを小さい領域しかもたないSSDに作り、大きな領域を/media内にマウントさせるという方法はよろしくないのかもと思いました。起動プログラムとキャッシュみたいなやつだけSSDに入れて、あとの大部分のパスをHDにマウントさせられればよろしい感じになるのかなと思いました。

結局下記のような感じにしました。
・SSD 256MG -> /boot
・SSD 4GB -> swap
・SSD 45GB -> /
・HD 1TB -> /home

UbuntuにzshとvimとGoを設定する

zshはoh-my-zshというのを使います。vimはdeinでプラグインを入れます。Goはvim-goプラグインを入れます。

goのインストール

$ sudo -i
$ apt-get update
$ apt-get upgrade
$ apt-get install golang
$ which go
/usr/bin/go

zsh

zshのインストール

$ apt-get install zsh
$ which zsh
/usr/bin/zsh
$ chsh
Changing the login shell for hoge
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]: /usr/bin/zsh

oh-my-zshをインストール

$ sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

.zshrcの設定

$ vim .zshrc

.zshrcに下記を追加

export GOPATH=$HOME/go
export GOBIN=$HOME/go/bin
export PATH=$PATH:$HOME/go/bin
$ source .zshrc

Vimの設定

dein.vimをcloneする

$ cd
$ mkdir .vim
$ cd .vim
$ git clone https://github.com/Shougo/dein.vim.git

.vimrcを取得

$ cd
$ git clone https://github.com/endoyuta/vim_config.git
$ ln -s ~/vim_config/.vimrc

deinとプラグインのインストール

$ vim

vim-goプラグインの設定

vim内で、:GoInstallBinariesを実行。

:GoInstallBinaries

GCPのUbuntuのハードディスクを増やす

Bitcoinのブロックがでかくて容量がなくなりました。さっきメモリ増やして容量もちょっと増やしたけど、もう容量が100%になりましたので、さらに増やしたいと思います。100%になったらBitcoindが動かなくなりました。今SSD永続ディスクというのを使っていますが、これをどんどん増やすとお金がかかりそうなので、調べたいと思います。

SSD Persistant Diskの50GBだと、1月$11くらい。普通のPersistant Diskの50GBだと、1月$2.6くらい。4倍位違う。普通のやつ50GBにしようと思ったら、200GB未満だと性能悪くなるかもといわれた。200GBにしといた。ここに永続ディスクを追加した後にUbuntuに反映させる方法がのってる。ディスクをつくって、インスタンスに紐づけた後で、フォーマットしてマウントすればいいらしい。

diskを見つける

インスタンスと紐づけたディスクは下記にあるらしい。

$ ll /dev/disk/by-id
scsi-0Google_PersistentDisk_disk-1

フォーマットする

$ mkfs.ext4 -F -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/disk/by-id/scsi-0Google_PersistentDisk_disk-1

マウントする

$ mkdir /mnt/mydisk
$ mount -o discard,defaults /dev/disk/by-id/scsi-0Google_PersistentDisk_disk-1 /mnt/mydisk

再起動時の自動マウント設定

/etc/fstabに下記を追加する

/dev/disk/by-id/scsi-0Google_PersistentDisk_disk-1 /mnt/mydisk ext4 defaults 1 1

権限設定

デバイスの書き込みアクセスをすべてのユーザーに与えます。

chmod a+w /mnt/mydisk

これで出来たのかな?

認識されてるかチェック

$ df -h
/dev/sdb        196G   61M  186G   1% /mnt/mydisk

ちゃんといる。

再起動しても認識されるかチェック

いる。

Ubuntuの時間ずれの解消

Ubuntuの時間がずれてます。7時なのに前日の22時になります。9時間遅れています。

参考:Ubuntu インストールしたらやること:時刻を同期するNTPサーバーを変更する

systemd-timesyncdの状態確認

$ systemctl status systemd-timesyncd
$ systemctl status ntp

ntpが有効になっていました。

systemd-timesyncdを有効化

$ systemctl stop ntp
$ systemctl start systemd-timesyncd

timesyncd.confの設定

$ vim /etc/systemd/timesyncd.conf

timesyncd.confの中身

[Time]
NTP=ntp.ring.gr.jp

systemd-timesyncdを再起動

$ systemctl restart systemd-timesyncd

これで直った。

GCPのCompute EngineのUbuntuでvsftpdを使う

Ubuntu17.04にvsftpdを入れてみる。vsftpdはFTPサーバ。

インストール

$ apt-get install vsftpd

GCPのポートあける

参考:Google Compute Engineのファイヤーウォールを理解する #gcpja

vsftpd.confの設定

参考:
vsftpサーバ 設定ガイド
Ubuntu 12.04 サーバー再構築(10) FTPの導入

$ vim /etc/vsftpd.conf

設定ファイルの内容

listen=YES
#listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
write_enable=YES

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
allow_writeable_chroot=YES
#chown_uploads=YES

userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/vsftpd.user_list

secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd

FTP接続してみる

$ ftp localhost
$ ftp 123.123.123.123

GCPでUbuntu16・Nginx・PHP7・cakePHP3環境をつくる

Google Cloud Platform(GCP)はAWSのgoogle版です。ここにサービスの説明があります。

Compute Engine

まずプロジェクトを作成する。次に、Compute Engineのコンソールで、VMインスタンスを作成する。ゾーンを日本、マシンタイプをf1-micro、OSをUbuntu16.10で作成してみた。数十秒程度でインスタンスが作成完了し、ブラウザ上でssh接続、ターミナル操作がすぐ可能になった。

マシンタイプの変更方法

参考:vm instanceのMachine type変更方法
IPをスタティックにして、ディスクを削除しないようにしながら、VMインスタンスを削除して、新しくインスタンスをつくるらしい。この間サーバは止まってしまう。でもいずれにしても結構簡単に切替は可能。

ローカル環境でssh接続できるようにする

google cloud SDKをインストールする。インストール完了したら初期設定が動き出すので、ログインしたりゾーン選択したりする。
Compute EngineのVMインスタンスの画面にある、ssh接続用のgcloudコマンドを実行する。これでssh接続できた。

PHPとかNginxとかをインストールする

$ sudo apt-get update
$ sudo apt-get install php
$ php -v
PHP 7.0.15-0ubuntu0.16.10.4 (cli) ( NTS )
$ sudo apt-get install nginx
$ nginx -v
nginx version: nginx/1.10.1 (Ubuntu)
$ sudo apt-get install git vim composer

デフォルトでapache2が入っていて起動されているようだ。
$ sudo systemctl stop apache2
$ sudo systemctl start nginx

Cloud DNS

https://cloud.google.com/dns/quickstart
上記に従って、DNS APIを有効にして、DNSコンソールからドメインを追加する。記載されているネームサーバに合わせて、ドメインのネームサーバを変更して、必要な設定をすると反映される。

Cloud SQL

Google Cloud SQL ドキュメント
Cloud DNSと同様にAPIを有効にしてインスタンスを作成する。Compute Engineから接続するには、ネットワークの承認が必要。下記にやり方が書いてあった。
MySQL クライアントを Compute Engine から接続する

Compute Engineを設定してCakephp3を動かす

$ sudo vim /etc/nginx/sites-available/default

server {
    listen 80;
    server_name hoge.com;
    root /var/www/html/hoge.com/webroot;
    index index.php;
    location / {
        try_files $uri $uri?$args $uri/ /index.php?$uri&$args /index.php?$args;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}

$ sudo systemctl restart nginx
$ cd /var/www/html
$ sudo apt-get install php-fpm php-intl php-mbstring php-zip
$ sudo composer create-project –prefer-dist cakephp/app hoge.com

Compute EngineをCloud SQLにつなぐ

phpmyadminを使う

$ sudo apt-get install mysql-client
$ sudo apt-get install phpmyadmin
$ sudo vim /etc/phpmyadmin/config-db.php

config-db.php

$dbname='hoge';
$dbserver='<Cloud SQLのIPアドレス>';
$dbport='3306';
$dbtype='mysql';

$dbnameがないとエラーになるけど、内容は適当でも大丈夫だった。

$ sudo echo “hoge:$(openssl passwd -apr1 hogepassword)” > /path/to/hogepath
$ sudo chmod 604 /path/to/hogepath
$ sudo vim /etc/nginx/sites-available/default

#Phpmyadmin
server {
    listen 80;
    server_name hogehoge.com;
    auth_basic 'input';
    auth_basic_user_file /path/to/hogepath;
    root /usr/share/phpmyadmin;
    location / {
        index index.php;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}

コマンドラインでmysqlにつなぐ

$ mysql –host=[INSTANCE_IP_ADDR] –user=root -p

cakephp3でmysqlにつなぐ

$ sudo vim /var/www/html/hoge.com/config/app.php
hostをCloud SQLにする。

Let’s EncryptでSSL取得・設定

hoge.comとphpmyadminをhttps接続のみ可能にする。hoge.comにhttpアクセスした場合はhttpsにリダイレクトさせる。

$ sudo apt-get install letsencrypt
$ sudo systemctl stop nginx
$ sudo letsencrypt certonly –standalone -d hoge.com
$ sudo letsencrypt certonly –standalone -d hogehoge.com
$ sudo systemctl start nginx
$ sudo vim /etc/nginx/sites-available/default

#hoge.com cakephp3
server {
    listen 80;
    server_name hoge.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/hoge.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hoge.com/privkey.pem;
    server_name hoge.com;
    root /var/www/html/hoge.com/webroot;
    index index.php;
    location / {
        try_files $uri $uri?$args $uri/ /index.php?$uri&$args /index.php?$args;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}
#Phpmyadmin
server {
    listen 443;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/hogehoge.com/cert.pem;
    ssl_certificate_key /etc/letsencrypt/live/hogehoge.com/privkey.pem;
    server_name hogehoge.com;
    auth_basic 'input';
    auth_basic_user_file /path/to/hogepath;
    root /usr/share/phpmyadmin;
    location / {
        index index.php;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}

$ sudo systemctl restart nginx

Let’s Encryptの更新方法と更新の自動化

この投稿でLet’s Encryptで無料でSSL証明書を作りましたが有効期限が切れそうなので更新します。
環境は、サーバはさくらのVPS、OSはUbuntu16.04、webサーバはnginxです。

更新方法

参考:https://certbot.eff.org/#ubuntuxenial-nginx

Automating renewal

有効期限が切れる前に自動的に証明書を更新するようにCertbotを設定することができます。 Let’s Encrypt Encryptは90日間使用できるので、この機能を利用することをお勧めします。このコマンドを実行すると、証明書の自動更新をテストできます。

$ letsencrypt renew --dry-run --agree-tos

Ubuntu Xenial上のCertbotのバージョンに「電子メールなしで登録する!」という警告が表示されるバグがあります。以前にCertbotに電子メールを送っていたとしても。これが起こっても心配しないでください。更新には影響しません。それが正しく動作していると思われる場合は、以下を実行するcronまたはsystemdジョブを追加して自動更新を手配できます

$ letsencrypt renew

更新する

更新はNginxをとめないといけません。止めずにrenewコマンドを実行すると、エラーがでます。

The program nginx (process ID 22394) is already listening on TCP port 80. This
will prevent us from binding to that port. Please stop the nginx program
temporarily and then try again. For automated renewal, you may want to use a
script that stops and starts your webserver. You can find an example at
https://letsencrypt.org/howitworks/#writing-your-own-renewal-script.
Alternatively you can use the webroot plugin to renew without needing to stop
and start your webserver.

手動で更新する

Nginxを停止したのちに、renewコマンドを実行して、Nginxを再開するか、webrootプラグインを利用して、renewコマンドを実行する必要があります。webrootプラグインを利用する場合、80ポートにアクセスしてNot Foundとかにならないようにする必要があるようです。私の場合、httpsでしか接続できない(httpの場合強制的にhttpsにリダイレクトさせる)ようにしてあるので、webrootは使えませんでした。Nginx停止&再開をrenewコマンドの前後でやってみます。

$ sudo systemctl stop nginx.service
$ letsencrypt renew
$ sudo systemctl start nginx.service

自動更新させる

自動更新はcronを使います。

$ cd 
$ vim .crontab

.crontabの中身を下記のようにします。

0 3 15 * * systemctl stop nginx.service; letsencrypt renew; systemctl start nginx.service

あるいは、ログを残しておく場合は下記のようにします。

0 3 15 * * systemctl stop nginx.service; letsencrypt renew > /var/log/cron.log 2>&1; systemctl start nginx.service

crontabに反映させます。

$ crontab .crontab
$ crontab -l
0 3 15 * * systemctl stop nginx.service; letsencrypt renew; systemctl start nginx.service

設定がうまく反映できているかの確認をしたい場合、一旦上記cronの実行頻度を変更してすぐに実行させるようにしつつ、下記のような感じでログ出力したらいいと思います。

* * * * * systemctl stop nginx.service; letsencrypt renew >> /var/log/cron.log 2>&1; systemctl start nginx.service

Ubuntu – cron

Ubuntu16.04です。

cronを使うには、crontabコマンドを使います。
crontab -e とやるとcronの編集ができますが、cron -rとやるとcronの設定内容が消えるので、危ないので気を付けるようにとネットでよく書いてあります。紹介されているのは、crontab -eで直接編集するのではなく、別ファイルでcron内容を作成・編集してcrontabで読み込むことです。

$vim .crontab
$crontab .crontab

これで.crontabに書いた設定が反映されます。
ubuntu16.04の場合、cronの実行ログはデフォルトでは表示されないぽいです。またログの表示設定をしても、デフォルトでは、/var/log/cron.logは出力されず、/var/log/syslogに出力されるようです。実行ログのみでエラー内容や標準出力はログには残りません。/var/log/syslogにcronログを出力させるには、下記ファイルのcron関連のコメントを外してrsyslogを再起動します。

$vim /etc/rsyslog.d/50-default.conf
$systemctl restart rsyslog.service

cronで実行結果をログに出力させるには、下記のようにします。
.crontab

* * * * * echo 123 >> /var/log/cron.log 2>&1

2>&1の2は標準エラー出力、1は標準出力です。2を標準出力にリダイレクトさせることによって、エラーも出力されます。

複数コマンドを実行する場合、;か&&でつなげます。;は、前のコマンドがエラーでも次を実行します。&&はエラーだったら次を実行しません。複数コマンドを1行でつなげた場合、例えば下記のようにやっても最後のコマンドの出力以外は受け取れません。

$ echo 123 && echo 456 >> hoge.log
$ cat hoge.log
456

下記のようにすると、最初のコマンドのエラーも含めた出力がファイルに保存されます。

$ echo 123 >> hoge.log 2>&1 && echo 456 >> hoge.log 2>&1

下記なら、最初のechoに誤字があるので、その時点でエラーで終了し、エラー内容がファイルに出力されます。

$ echoo 123 >> hoge.log 2>&1 && echoo 456 >> hoge.log 2>&1

さくらVPSでcakephp3を動かす

環境

Ubuntu 16.04
PHP 7.0
Nginx 1.10

composerインストール+git clone

$ apt-get install composer
$ php -v
PHP 7.0.8-0ubuntu0.16.04.3 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.8-0ubuntu0.16.04.3, Copyright (c) 1999-2016, by Zend Technologies
$ apt-get update
$ apt-get install php7.0-intl
$ cd hoge.com
$ git clone hoge.git .
$ composer install

Nginx設定

$ vim /etc/nginx/sites-available/default

server {
        listen 443;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/hoge.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/hoge.com/privkey.pem;
        server_name ~^c(?<no>\d+?)\.hoge\.com$;
        root /var/www/c/$no/webroot;
        index index.php;
        location / {
                try_files $uri $uri?$args $uri/ /index.php?$uri&$args /index.php?$args;
        }
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }
}

Ubuntu16.04にGitLabを入れる

Ubuntu 16.04にGitlabを入れていきたいと思います。

Gitlabのインストール

Gitlabのサイトに、OS毎のインストール方法が書いてありました。

$ sudo apt-get install curl openssh-server ca-certificates postfix
$ curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
$ sudo apt-get install gitlab-ce
$ sudo gitlab-ctl reconfigure

ポート開ける

80ポートを開けます。

$ sudo ufw allow 80

ポートの衝突を回避する

ブラウザで見てもデフォルトのnginxの画面になる。既にnginx入れているのですが、これとは別にnginxを入れてるみたいでポートが衝突してるらいし。
参考:Ubuntu 14.04 に GitLabをインストールした

上記サイトのとおり、衝突してた。/etc/gitlab/gitlab.rbの下記に、変更したいポートを入れたら出来た。あとは、ufwでポートを開ける必要がある。

nginx['listen_port'] = nil

ブラウザでアクセスしたらGitlabのログイン画面が表示された。パスワード変更してrootでログインできた。

gitユーザでssh接続できるようにする

$ sudo vi /etc/ssh/sshd_config

AllowUsersにgitを追加します。

$ sudo service ssh restart

sshのポートを変えている場合は、gitlab.rbの下記を修正します。

gitlab_rails['gitlab_shell_ssh_port'] = 変更したポート

あとは、ローカルでキーを作成して、gitlabに登録して、.ssh/configを下記のような感じで修正します。

Host hoge.com
        HostName hoge.com
        User git
        IdentityFile C:\Users\hoge\.ssh\hoge_rsa
        Port 12345

メール送信設定

今回はgmailを新たに登録して、設定してみました。gmail登録後に、安全性の低いアプリに許可というのを設定する必要があります。あとは、gitlab.rbを下記のように設定します。

 21  gitlab_rails['time_zone'] = 'Asia/Tokyo'
 22  gitlab_rails['gitlab_email_enabled'] = true
 23  gitlab_rails['gitlab_email_from'] = 'hoge@gmail.com'
 24  gitlab_rails['gitlab_email_display_name'] = 'Hoge'
 25  gitlab_rails['gitlab_email_reply_to'] = 'hoge@gmail.com'

332  gitlab_rails['smtp_enable'] = true
333  gitlab_rails['smtp_address'] = "smtp.gmail.com"
334  gitlab_rails['smtp_port'] = 587
335  gitlab_rails['smtp_user_name'] = "hoge@gmail.com"
336  gitlab_rails['smtp_password'] = "GmailのPASSWORD"
337  gitlab_rails['smtp_domain'] = "smtp.gmail.com"
338  gitlab_rails['smtp_authentication'] = "login"
339  gitlab_rails['smtp_enable_starttls_auto'] = true
340  gitlab_rails['smtp_tls'] = false
341  gitlab_rails['smtp_openssl_verify_mode'] = 'peer'

reconfigure

$ sudo gitlab-ctl reconfigure

さくらVPSにUbuntu16.04を入れた後の各種設定方法(1)

さくらVPSにUbuntu16.04を入れました。設定をしていきます。

参考:Ubuntuインストール

アップデート

$ sudo apt-get update
$ sudo apt-get upgrade

SSH関連の設定

.sshディレクトリの作成

とりあえず.sshディレクトリを作成します。

$ mkdir ~/.ssh

公開鍵・秘密鍵を作成して公開鍵をサーバに転送する

次にローカルで秘密鍵を作成します。今windows10を使っていますが、gitをインストールしたらssh-kegenが入っているのでそれを使えるようです。あるいは、Tera Termでも簡単に作れます。作成した公開鍵をサーバに転送します。scpの場合下記のようになります。

$ cd .ssh
$ scp hoge.pub hoge@hogehogehoge.sakura.ne.jp:~/.ssh/.

サーバでauthorized_keysを作成する

サーバで、転送した公開鍵を./ssh/authorized_kesyに追加します。

$ cd
$ cat hoge.pub >> ~/.ssh/authorized_keys
$ rm hoge.pub

SSHログインチェック

ローカルで下記のようにやってみます。windowsの場合、TeraTermを使ったりします。下記のhoge_rsaは秘密鍵です。

$ cd .ssh
$ ssh -i hoge_rsa hoge@hogehogehoge.sakura.ne.jp

パスワード聞かれずにログインできたら成功です。

パスワードログインを禁止にする

$ sudo vi /etc/ssh/sshd_config
  • Portを1万台にする
  • ルートログインを禁止する
    PermitRootLogin no
  • パスワードログインを禁止する
    PasswordAuthentication no
  • 指定したユーザーだけログイン可能にする(最下段に追加)
    AllowUsers ユーザー名
$ sudo vi /etc/services

ファイル内のポート番号22を上記で変更した値にすべて変える

$ sudo sshd -t

何も起こらなければ成功

sshサーバの再起動

$ sudo service ssh restart

TeraTermのマクロ作成

私はwindows10を使うときに、Teratermのマクロを使っていますので、それを作成します。

username = 'hoge'
hostname = 'hogehogehoge.sakura.ne.jp'
keyfile  = 'C:\Users\hoge\.ssh\hoge_rsa'

msg = hostname
strconcat msg ':11223 /ssh /auth=publickey /user='
strconcat msg username
strconcat msg ' /keyfile=' 
strconcat msg keyfile

connect msg

ファイヤーウォールの設定

ufwというコマンドで設定します。

全部拒否にする
$ sudo ufw default deny
先程変更したSSH用ポートを開放する
$ sudo ufw allow 12233
アクセス回数制限をかける
$ sudo ufw limit 12233
$ sudo ufw limit 22
ファイヤーウォールを有効にする
$ sudo ufw enable
ファイヤーウォールの状態確認
$ sudo ufw status

VimとGitも入れておく

$ sudo apt-get -y install vim git 

fail2banを入れる

下記を参考にやってみた。まず、/etc/fail2banに移動して、jail.localというファイルをつくって、そこに設定を書くといいらしい。

参考:Fail2ban fails to run after upgrade to Ubuntu 16.04
参考:How To Protect SSH With Fail2Ban on CentOS 7
参考:How To Protect SSH with Fail2Ban on Ubuntu 14.04

$ sudo apt-get -y install fail2ban
$ cd /etc/fail2ban
$ sudo vim jail.local

jail.local

[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
destemail = hoge@hoge.com
action = %(action_mwl)s

# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport

[sshd]
enabled = true

fial2banを再起動する。enableは自動起動設定らしい。

$ sudo systemctl enable fail2ban
$ sudo systemctl restart fail2ban

下記で状態をチェックできる。statusの次にjail_nameをつけると、その詳細が表示される。

$ sudo fail2ban-client status
$ sudo fail2ban-client status sshd

間違ったrootログインをしたら、fail2ban-client status sshdが更新された。しっかり動いている。でもメールの設定とかはまだ不十分かもしれない。

ログの場所のメモ

fail2banのログ

$ tail -n 100 /var/log/fail2ban.log

認証関連のログ

$ tail -n 100 /var/log/auth.log

つかれた。残りは今度やる。セキュリティ対策は沢山やることあるなー。
参考: Ubuntu 12.04 LTSサーバーを安全にする