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 で禁止する設定を行うと良いっぽいが、とりあえずはこれでパスワードなしでログインできるし理解が進んだら考えよう
こんな風にしたほうが良いとか、これはやらないほうが良いなどあったらコメントお願いします
何か書き忘れている気がする