SSH

SSH(Secure Shell)とは

  • 暗号や認証の技術を利用して, 安全にリモートコンピュータと通信するためのプロトコルのこと.
  • VPSに接続するときは必須.

SSHの流れ

Reference: SSH通信って、結局何してるの?

[local]1.通信用の秘密鍵・公開鍵の作成する.
[local]2.サーバーに公開鍵を渡す.

[server]A.サーバーにユーザーを登録する(sudo権限).
[server]B.サーバーに登録されているユーザーと, 渡された公開鍵を紐づける.
※この状態で初めて作成したユーザーによるサーバーへのログインが可能となる.

[local]3.作成したユーザーでログインする.

[server]C.ログイン時に乱数を生成する.
[server]D.Cで生成した乱数から, ハッシュ値を生成する.
※このハッシュ値は認証で使うのでサーバー側で保持しておく.
[server]E.受け取った公開鍵 + Cで生成した乱数を用いて暗号を生成する.
[server]F.Dで作成した暗号をローカルに送る.

[local]4.1で作成した秘密鍵を用いて, 送られてきた暗号を解読し乱数を復元する.
[local]5.乱数からハッシュ値を計算し, そのハッシュ値をサーバーに送る.

[server]G.送られてきたハッシュ値と、Dで生成したハッシュ値を比較する.
一致していれば認証成功. 以後全ての通信は暗号化される.

scp

scpとはSSHを用いてファイルを秘匿化してコピーする技術のこと.

# sshのconfigファイルを用いて通信する方法
scp file_name.txt -F ~/.ssh/config iota3:~/github
scp <渡したいファイルの名前> -F <コンフィグファイルの名前> <渡し先のマシン名>:<渡し先のディレクトリ>

Mac -> Ubuntu を公開鍵暗号方式で接続する

UbuntuをSSH接続可にする

Ubuntu側で

sudo apt-get install openssh-server

で, Ubuntu側へSSHで接続できるようになる.

Macで秘密鍵と公開鍵のペアを作成する

まずMacで秘密鍵と公開鍵のペアを作成する.

ssh-keygen -t rsa
> Generating public/private rsa key pair.
> Enter file in which to save the key (/Users/solareenlo/.ssh/id_rsa):
# ここでエンターを押せば/User/solareenlo/.ssh/id_rsaで保存される.
> Enter passphrase (empty for no passphrase):
# パスフレーズを入力
> Enter same passphrase again:
# 再度パスフレーズを入力
> Your identification has been saved in /Users/solareenlo/.ssh/id_rsa.
> Your public key has been saved in /Users/solareenlo/.ssh/id_rsa.pub.
> The key fingerprint is:
> SHA256:a7CbAlk8ns2XVz8roZ8kkN42EFEgXcE+oftgUcFCQ38 solareenlo@solareenlo-mbp13.local
> The key's randomart image is:
> +---[RSA 2048]----+
> |      .+**=o     |
> |       .o+=      |
> |   .    .=..E    |
> |    +   ooo..    |
> |   + =. S+ o .   |
> |  o o o+*=. . o  |
> |   .  .o++=... o |
> |    .  + .o+...  |
> |     .o    .o.   |
> +----[SHA256]-----+

これで秘密鍵はid_rsaに, 公開鍵はid_rsa.pubに作成された.

Macの公開鍵をUbuntuへ渡す

scpを使って公開鍵をUbuntuへ持っていく.

cd ~/.ssh
scp id_rsa.pub solareenlo@111.222.333.444:~/.

これでユーザー名solareenlo, IPアドレスが111.222.333.444のUbuntuのホームディレクトリに先ほど作った公開鍵が渡った.

UbuntuでMacの公開鍵を設置する

mkdir .ssh
mv id_rsa.pub .ssh
cd ~/.ssh
touch authorized_keys
cat id_rsa.pub >> authorized_keys
rm id_rsa.pub
sudo chmod 700 ~/.ssh
sudo chmod 600 ~/.ssh/authorized_keys

UbuntuでSSH接続での公開鍵認証を有効にする

sudo cd /etc/ssh
sudo cp -p sshd_config sshd_config.org
sudo vi sshd_config
/* viで以下をコメントアウトかつ変更
PubkeyAuthentication yes # 公開鍵認証の許可
AuthorizedKeysFile .ssh/authorized_keys #公開鍵ファイルのパス
PasswordAuthentication no # パスワード認証禁止
*/

sudo service sshd restart # sshdを再起動

Configファイルを作成する

cd ~/.ssh
vi config
~~~ viで以下をconfigに書き込む ~~~
Host ubuntu
  HostName 111.222.333.444
  Port 22
  User solareenlo
  IdentityFile ~/.ssh/id_rsa
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

MacからUbuntuへSSH接続する

ssh ubuntu
# もしくは
ssh -i ~/.ssh/id_rsa solareenlo@111.222.333.444

References