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 で禁止する設定を行うと良いっぽいが、とりあえずはこれでパスワードなしでログインできるし理解が進んだら考えよう

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

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