クラスタ(?)のssh鍵交換
動機
ラズパイクラスタ作成時の鍵交換で個人的に効率良さげな方法を思いついたのでメモ
必要なもの
- ホストマシン (tmux使えれば何でも良い。ここでは Ubuntu 18.04)
- Raspberry Pi × 4 (クラスタ用マシン)
- tmux
手順
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サーバにする)
今回使用したもの
- Ubuntu 18.04 LTS (vaio) PC
- Raspberry Pi zero wh
- SD-microSD変換アダプタ
- MicroSD 32GB
- HDMI-miniHDMIケーブル
- キーボード
- モニター (USB経由で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を上のコマンドで起動すると下のような画面になる
2 Network Options > N2 Wi-fi を選択し、SSIDとパスワードを入力する
ipやifconfigでipが割り振られているか確認する
SSHサーバにする
上と同様にraspi-configを起動
5 Interfacing Options > P2 SSH を選択し、YesでEnterを押すとsshサーバになる
最後に
方法の誤りや誤字・脱字がありましたら指摘をお願いします
SSHサーバの冗長設計的なことを帰ったらやろうと思います