【自宅サーバー構築】PCセットアップ:SSH接続編
今回はUbuntu側のSSH等の設定です。さらにSSHポートを外部に公開して「自宅サーバー化」します。
自宅サーバは、gitレポジトリおいたり、コンテナ立ち上げたりして外から楽しくいじるのが目標です。
今回やることは
- IP address固定化
- Dynamic DNS(DDNS)設定
- ssh通常パスワードでのアクセス(mac/windowsから)
- ssh公開鍵認証でのアクセス(mac/windowsから)
- Ubuntu上でのgitレポジトリ作成
- git remote の originとしてUbuntu gitレポジトリ利用
- Ansibleでgitレポジトリを作成する方法が意外とややこしい件
あたりを書いていきます。
前回の「デュアルブート編」で、ここまでセットアップしました。
今回は、こんな感じに接続できるまでやります。
何この図?暗号?
基本構成
基本構成はよくある、インターネットにwifi-router + PCです。
外部からも、家からもこのUbuntuPCにアクセスできるようにします。
Ubuntu IPアドレス固定
いつも使ってるRedHatとはかなり使い勝手が違うので戸惑いましたが、Desktop環境なのでコマンドウィンドウから
nmtui
設定内容は
/etc/NetworkManager/system-connections/connection1
その他のコマンド
nmcli connection down connection1 #リンクダウン
nmcli connection up connection1 #リンクアップ
ip address show #IP address確認
Dynamic DNS(DDNS)設定 (wifi-router, DDNSプロバイダ)
うちのルータがサポートしてたので「Free Dynamic DNS - No-IP」を利用しました。
無料プランを選んで、ドメイン名を選ぶだけですぐできます。
うちのルータはこのnoip設定の内容を登録するだけで自動的にIPアドレス通知をnoipにしてくれるようになりました。
あとは、これもルータの機能ですが「ポートフォワード」を設定します。
僕はとりあえずSSHのポートだけ空けて、それをUbuntuにフォワードするようにしました。
SSH設定(パスワードアクセス)
Ubuntu側
openssh-serverをインストールするだけです(パスワードアクセスの場合)
sudo apt install openssh-server
Mac側
別にやることありません。
ssh hoge@hoge.noip.org
Windows側
僕はPuttyを使っていますが、普通にSSHの設定をすれば繋がります。
SSH設定(公開鍵認証でのアクセス)
パスワード認証だと不安なので、公開鍵を登録したPCだけがアクセスできるようにします。
Ubuntu設定
cd ~
mkdir .ssh
touch .ssh/authorized_keys
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
Mac設定
ssh-keygen -t ecdsa -b 521
pass phrase #指定しない
(sshパスワードアクセスがある場合は簡単にコピーできるけど、パスワードアクセスは後で止めてしまうので、今後はアクセスする端末が増えると面倒)
Windows設定
WindowsではPuttyを使っているのでPuttyでのやり方を。。
- puttygenでecdsa 521のキー(private, pub)作製
- ubuntu上でopenssh形式にpubキーを変換してauthorized_keysにコピー
ssh-keygen -i -f xxxx.pub >> ./ssh/authorized_keys
Ubuntu SSHパスワード接続を停止
/etc/ssh/sshd_configの以下の部分
#PasswordAuthentication yes
PasswordAuthentication no
sudo service sshd restart
Ubuntu上でgitレポジトリ作成
初期設定
ssh公開鍵でしかログインできないユーザ"git"を作成
sudo adduser --disabled_password git
sudo su git
mkdir .ssh
touch .ssh/authorized_keys
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
レポジトリ作成
sudo mkdir /my_repo/project1.git
cd /my_repo/project1.git
sudo git init --bare
cd ..
sudo chown -R git.git project1.git/
MacからUbuntu gitレポジトリに接続
初期準備
~/.ssh/id_ecdsa.pubの中身をUbuntuの/home/git/.ssh/authorized_keysにコピー。
remote originとして追加
mkdir project1
cd project1
git init
git add .
git commit -m "initial commit"
git remote add origin git@hoge.noip.org:/my_repo/project1.git
git push origin master
cloneして始める場合
git clone git@hoge.noip.org:/my_repo/project1.git . #最後のドット忘れないように
WindowsからUbuntu gitレポジトリに接続(Putty利用)
実はwindowsのgitコマンドはputtyのセッションを使えます。
これを利用するとputtyで作成した鍵を利用して簡単に接続できます。
-
puttygenで鍵作成(先程作成済み)
-
.pubの中身をコンバートして/home/git/.ssh/authorized_keysにコピー
ssh-keygen -i -f xxxx.pub >> /home/git/ssh/authorized_keys
-
git向けにputtyセッションを作成(userをgitにして、hoge.noip.org向けに)
ここでは作ったセッション名を"git_con"として説明します。 -
Windowsの環境変数GIT_SSHにC:\Program Files\PuTTY/plink.exeを登録
ここまでくればもう接続できます。
git remote add origin git_con:/my_repo/project1.git
git push origin master
念の為確認
git remote -v show
おまけ: Ansibleで.gitレポジトリづくり(やや面倒)
初期設定
python3のvenvの閉じた環境でansibleを動かす
sudo apt install python3-venv
python3 -m venv ansible_work
source ./ansible_work/bin/activate
deactivate #参考deactivateする時
Ansible install by pip
cd ansible_work
pip install ansible
touch .ansible.cfg
vim .ansible.cfg
gitレポジトリ作成playbook
/ansible_work/inventory/home_servers.ini
[ubuntu_main]
localhost
---
- hosts: ubuntu_main
become: yes
become_user: root
vars_prompt:
- name: repo_name
prompt: "please enter repo name"
tasks:
- name: create git directory
file:
path: /data/{{ repo_name }}.git
state: directory
owner: git
group: git
mode: 0755
- name: init git repo
shell: >-
cd /data/{{ repo_name }}.git;
git init --bare;
cd /data/;
chown -R git.git {{ repo_name }}.git
実行方法:
ansible-playbook -i inventory/home_servers.ini ./playbook_make_git_dir.yml --ask-become-pass
はまりどころ
- becomeモジュールで接続後にrootにならないといけない
理由: rootでsshできないようにしたから
理由2: gitユーザで/my_repo/配下にディレクトリ作成不可→gitでログインしても作れない - –ask-become-passを毎回付けなければいけないのが面倒
- 自分の公開鍵を自分のauthorized_keysに入れておかないとlocalhost向けタスク失敗する
全体を通して
長い割にわかりにくい!