クラスタ(?)のssh鍵交換

動機

ラズパイクラスタ作成時の鍵交換で個人的に効率良さげな方法を思いついたのでメモ

必要なもの

手順

tmuxの設定(キーコンフィグ)

# プレフィックスをtにする
set -g prefix C-t

# C-t + '|' で縦分割
bind | split-window -h

# C-t + 'S' で横分割
bind S split-window -v

# C-t + '+' でペインのシンクロをオン
bind + set-window-option synchronize-pane on

# C-t + '-' でペインのシンクロをオフ
bind - set-window-option synchronize-pane off

鍵交換等々

IPアドレスの固定は終わらせ,2×2分割でtmuxを起動しておく。(なんでも良いがこれが見やすそう)

ここでは各マシンのIPを192.168.1.{101,102,103,104}とし,パスワードは全て同じものを使う。

# C-t + '+' でペインをシンクロさせ,.sshを作成
$ mkdir ~/.ssh

# .sshに移動
$ cd .ssh

# 鍵の作成
$ ssh-keygen -t rsa

# ホームディレクトリに戻る
$ cd ~

# 101のマシンから公開鍵を持ってくる
$ scp pi@192.168.1.101:~/.ssh/id_rsa.pub .

# ホームディレクトリでauthorized_keysを作る
$ mv id_rsa.pub authorized_keys

# 102から公開鍵を持ってくる
$ scp pi@192.168.1.102:~/.ssh/id_rsa.pub .

# 持ってきた鍵をauthorized_keysに追記
$ cat id_rsa.pub >> authorized_keys

# 103から公開鍵を持ってくる
$ scp pi@192.168.1.103:~/.ssh/id_rsa.pub .

# 持ってきた鍵を追記
$ cat id_rsa.pub >> authorized_keys

# 104から公開鍵を持ってくる
$ scp pi@192.168.1.104:~/.ssh/id_rsa.pub .

# 持ってきた鍵を追記
$ cat id_rsa.pub >> authorized_keys

# ホームディレクトリに作ったauthorized_keysを.ssh内のauthorized_keysに追記
$ cat authorized_keys >> .ssh/authorized_keys

たぶんこれで全マシンにpasswordなしでsshできる(はず)

Raspberry Pi のIPアドレス固定設定

/etc/hdcpcd.conf で設定する

sudo vi /etc/dhcpcd.conf

ファイルの下の方の

# Example static IP configuration:

あたりを変更する

wlan0 を 192.168.1.100/24, ルーターのアドレス 192.168.1.1, DNSサーバのアドレス 192.168.1.1 のときは以下の設定

interface wlan0
static ip_address=192.168.1.100/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

再起動して設定が反映されているか確認 (ネットワークサービスの再起動でもいいのかもしれないが、やりかたが分からないので誰か教えてください)

ホスト名・ネットワークの設定

概要

CentOS7 で ホスト名、ネットワークのアドレス等の設定方法のメモ

ホスト名の設定

hostnamectl コマンドを用いて任意のホスト名に変更

$ sudo hostnamectl set-hostname xxxxx

IPアドレスの設定

設定するインタフェースのデバイス名を決める

$ ifconfig

or

$ ip a

で表示される eth0 や enp○○がデバイス

変更するデバイス名の設定ファイルで以下を変更・記述する

#BOOTPROTO=dhcp
BOOTPROTO=none
IPADDR=xxx.xxx.xxx.xxx
PREFIX=yy
GATEWAY=www.www.www.www
DNS1=zzz.zzz.zzz.zzz

xxx.xxx.xxx.xxx : 設定したいIPv4アドレス

yy : 設定するアドレスのプレフィックス

www.www.www.www : デフォルトゲートウェイのアドレス

zzz.zzz.zzz.zzz : 参照するDNSサーバーのアドレス

network の再起動

$ sudo service network restart

確認

設定が反映されているか、以下のようなコマンドを用いて確認

$ ifconfig

or

$ ip a

SSH鍵交換(公開鍵認証)の方法,config の書き方

やりたいこと

SSHでリモートログインする際にパスワードを入れずに入れるようにしたい

鍵交換した後に.ssh内が散らかるので整理したい

記事を書く動機

SSH する時に,毎回ユーザ名やパスワードを打つのが面倒なので鍵交換しておきたい.

が,一度鍵交換するとしばらくやらないので,毎回調べているので,備忘録的なものを作ろうということになった

config の設定もついでに

ここでの想定ホスト名・ユーザ名

  • ローカル

UserName : local

HostName : localhost

  • リモート

UserName : remote

HostName : remotehost

鍵の生成

$ssh-keygen -t rsa

を実行すると、以下のような出力がされる

(本来は passphrase を設定したほうが良いのかもしれない、、、 ) 特に何も入力せずにすべて Enter で鍵を生成する

最後の SHA256 は毎回異なる(はず)

同じ passphrase を設定しても変わる

local@localhost:~/.ssh$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/local/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in ./.ssh.
Your public key has been saved in ./.ssh.pub.
The key fingerprint is:
SHA256:pGQzkYvs5/bs7gryoIMnGLbNkp3q3JM8xFo/Hz0PkRo ryouhei@tina
The key's randomart image is:
+---[RSA 2048]----+
|      ..         |
|      ..         |
|   . .=..        |
|    oo.=  .      |
|  ..  .ESo       |
|.. +. . + .      |
|+.& =o o +       |
|**o& +o.. +      |
|oBo.+.+B*  .     |
+----[SHA256]-----+

id_rsa, id_rsa.pubの2つがあれば鍵の生成は完了

鍵の転送

ssh 先に上で生成した鍵の id_rsa.pub (公開鍵) を接続先に転送する 転送する方法は何でも良い (scp, ftp, etc...)

転送後は以下で公開鍵を登録する

.sshディレクトリがなければ mkdir .ssh で作る

remote@remotehost:~$ls
id_rsa.pub etc...

remote@remotehost:~$mv id_rsa.pub .ssh/.

remote@remotehost:~$cd .ssh

# authorized_keys に生成した鍵を追記
remote@remotehost:~/.ssh$cat id_rsa.pub >> authorized_keys

追記後は id_rsa.pub は消して良い (消したほうがよい???.ssh 内がぐちゃぐちゃになるので消している)

ここまでで鍵交換が終わっているので,パスワードなしでログインできる、、、はず

鍵交換後もパスワードを要求されるとき

鍵交換後も初めの一回はパスワードでのログインが必要みたいな記事をどこかで見た気がする、、、どこかは忘れたが

以下でもうまくいかない場合は、、、他サイトを参考に、、、

パーミッション

.ssh や authorized_keys のパーミッションが原因の可能性があるので 以下でパーミッションの変更を行う

SSH先
remote@remotehost:~$chmod 700 ~/.ssh
remote@remotehost:~$chmod 600 ~/.ssh/authorized_keys

SSH元
local@localhost:~$chmod 600 ~/.ssh/id_rsa

サーバ側の問題

sshd を再起動してみる

参考:俺的備忘録 〜なんかいろいろ〜(https://orebibou.com/2014/10/ssh%E3%82%B5%E3%83%BC%E3%83%90sshd%E5%86%8D%E8%B5%B7%E5%8B%95%E3%81%AE%E6%96%B9%E6%B3%95%EF%BC%88os%E5%88%A5%EF%BC%89/)

#CentOS6 以前の場合
remote@remotehost:~$sudo /etc/init.d/sshd restart

#CentOS7 以降の場合
remote@remotehost:~$sudo systemctl start sshd.service

#Ubuntu の場合
remote@remotehost:~$sudo /etc/rc.d/init.d/sshd restart

.ssh/config の設定

鍵交換はできたが、このままでは接続先を増やした時に鍵が多くなって何が何かわからなくなってしまうので整理する

config の説明ではないので鍵以外は特に説明は書かない

わかりやすいように <, > を以下に書いているが実際は書かない(むしろ、わかりにくくなっている?)

Host remote
  HostName <remoteのドメイン名 or IPアドレス>
  User <remoteのユーザ名>
  Port <remoteのSSHポート番号>
  IdentityFile <id_rsa の場所>

上でわかりやすくなる(?) 鍵の名前は任意に変えて良いっぽい

鍵用のディレクトリを作り、そこに鍵を全て入れるほうがすっきりするかも ~/.ssh/keys/remote_rsa (id_rsa) みたいに

最後に

  • パスワードでのログイン
  • root でのログイン を /etc/ssh/ssh_config で禁止する設定を行うと良いっぽいが、とりあえずはこれでパスワードなしでログインできるし理解が進んだら考えよう

こんな風にしたほうが良いとか、これはやらないほうが良いなどあったらコメントお願いします

何か書き忘れている気がする

Raspberry Pi (zero wh) にRaspbienを入れるまで

動機

自宅のラズパイ(SSHサーバ)がフリーズしてしまい外からアクセスできなくなってしまったので、冗長設計のためもう一台SSHサーバが欲しくなったのと、単純にzeroモデルを1つ欲しかったタイミングが一致したため

今後、新しくラズパイ新調したときようの備忘録

目標

Raspberry Pi zero wh に Raspbien を入れて Wi-Fi につなげるところまで (おまけでSSHサーバにする)

今回使用したもの

Raspbienイメージのダウンロード

公式サイト(https://www.raspberrypi.org/downloads/raspbian/ )からRaspbian Stretch Liteの.zipファイルをダウンロードし、

$unzip ダウンロードしたzipファイル名

で解凍すると、.imgファイルができる

microSDのフォーマット、イメージファイルの書き込み

バイスの確認

microSDをPCに差込み、認識しているかを確認 (下のは書き込んだ後のものなので /boot が見えている)

$lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0     179:0    0   30G  0 disk 
├─mmcblk0p1 179:1    0 43.9M  0 part /boot
└─mmcblk0p2 179:2    0   30G  0 part /

mmcblk0が今回書き込むmicroSDになる (たぶんmmcblk0になると思うが、よくわからなければ差込前後でデバイスの有無で確認すると良いかも?)

以降、デバイスの名前はmmcblk0とする

フォーマット

先程見つけた mmcblk0 をアンマウントしてから下のサイトを参考にフォーマットする

HDD format(http://yang.amp.i.kyoto-u.ac.jp/~yyama/Ubuntu/strage/hdd-format.html) (注意:フォーマットするものを間違えないように)

イメージの書き込み

$sudo dd if=生成されたimgファイル of=/dev/mmcblk0 bs=1M

書き込み終了まで数分待機。書き込みが終了すると以下のような結果がでる

1780+0 レコード入力
1780+0 レコード出力
1866465280 bytes (1.9 GB, 1.7 GiB) copied, 282.136 s, 6.6 MB/s

出力結果が異なるかもしれないが、だいたいこんな感じなら大丈夫そう

Raspbienの起動

  • Raspbienを書き込んだmicroSD
  • miniHDMI を挿し込んで最後に電源のmicroUSBを挿して起動する(電源部の隣の緑LEDが光る)

※起動しない場合は、Raspbienの書き込みが上手くいっていない可能性があるので、フォーマットからもう一度やってみると良いかも

起動すると、ユーザ名・パスワードを聞かれるので ユーザ名:pi、パスワード:raspberry でログインする

Wi-Fiの設定

$sudo raspi-config

raspi-configを上のコマンドで起動すると下のような画面になる raspi-config.png

2 Network Options > N2 Wi-fi を選択し、SSIDとパスワードを入力する

ipやifconfigでipが割り振られているか確認する

SSHサーバにする

上と同様にraspi-configを起動

5 Interfacing Options > P2 SSH を選択し、YesでEnterを押すとsshサーバになる

最後に

方法の誤りや誤字・脱字がありましたら指摘をお願いします

SSHサーバの冗長設計的なことを帰ったらやろうと思います