##SSH鍵使ってサーバーと接続してるってイマイチイメージできない。。。
githubのリポジトリとローカルを紐づけるときにSSH鍵公開鍵をgithub側に設定してみたいなことありますよね。
これまでは教材とかやってても書いてある通り進めたらいいやっ、ってことで誘導されるがままにコピペしてたきおくしかないので、流れだけでも整理できたらと思います。
- 秘密鍵と公開鍵を生成
- 接続相手のサーバーに公開鍵を登録
- sshコマンドを使用してログイン
3.の時には、
ローカルからサーバーに対してユーザーとIPを指定してログインを申請する。
サーバー側は乱数を生成して、設定された公開鍵を利用して暗号化してローカルに生成した暗号を送る。
ローカルは帰ってきた暗号を秘密鍵を利用して解読。解読した乱数を送り返す。
サーバー側は送り返された暗号が正しければログインを許可。
ってなことが裏で行われているみたいです。
コマンドとしては
$ssh-keygen
で公開鍵と秘密鍵を取得。
秘密鍵は
~/.ssh/id_rsa
公開鍵は
~/.ssh/id_rsa.pub
のような~/.ssh/配下のファイルに保存されている。
~ .ssh: $ssh -i(./ssh配下の秘密鍵のファイルを指定するオプション) name.pem ec2-user@12.345.678.910
公開鍵をログインしたい相手サーバーの~/.ssh/authorized_keysへ登録する。
2パターン
-
サーバー側で
ssh-copy-id ~/.ssh/id_rsa.pub
-
ローカル側から
cat ~/.ssh/id_rsa.pub | ssh ec2-user@12.345.678.910 'cat >> .ssh/authorized_keys'
cat ~/.ssh/id_rsa.pub でファイル内の情報を得ている。
|ssh ec2-user@12.345.678.910で情報をもってSSH認証でログインを行なっている。
かつ、cat >> .ssh/authorized_keysが実行され、指定したファイルの最終行にcatで得たファイル内の情報を書き込んでいる。(>>で上書き (>)でなく追加している)
これでパスワードなしで
$ssh ec2-user@12.345.678.910
コマンド補足: ssh user@server-hostname [command]←ログイン後に実行したいコマンドを指定できる
調べて何となくこんな感じかなと。
ファイルにchmodコマンドで権限与えたり、scpコマンドでSSHつかってファイルを転送したりするところはまた別の機会ってことで。
自分でも確認してみてね!
参考文献
https://qiita.com/naoki_mochizuki/items/aea14a65a4a513e4816f
https://qiita.com/nnahito/items/dbe6fbfe347cd66ae7e6