hiyoko-programingの日記

プログラミングを勉強したてのひよっ子。   エンジニア目指して勉強中。

SSHについて

SSHとは

SSHは、離れた場所にあるサーバの中で作業を行いたい場合に利用する。暗号や認証の技術を利用して、安全にリモートサーバと通信することができる。

離れた場所にあるサーバのことを「リモートサーバ」や「リモート環境」、省略して「リモート」と呼ぶ。自身のコンピュータを「ローカルサーバ」や「ローカル環境」、省略して「ローカル」と言う。SSHを使ってリモートサーバと通信することによって、自身のローカルのターミナルでリモートサーバのターミナルを操作することができるようになる。

SSHのメリット

SSHが利用可能なリモートサーバーであれば下記のメリットがある。

  • 通信を盗聴される危険性を回避して、安全に操作ができる
  • サーバ上でのファイル操作、設定ファイルの編集ができる
  • データのバックアップをしたいとき、サーバ上で圧縮(ZIP)して、ファイルの一括ダウンロードできるので、アップロード・ダウンロードの大量ファイルの時間短縮ができる

SSHでログインする

SSHでリモートサーバにログインする方法は2つ。パスワード認証公開鍵認証、この2つのログイン方法がある。

SSHサーバとSSHクライアント

SSHを利用するためには、リモートにSSHサーバ、ローカルにSSHクライアントというソフトウェアをインストールする必要がある。しかし、LinuxサーバやMac OSには標準でインストールされているのでインストールする必要はない。

下記のようにIPアドレスを指定してSSHコマンドを実行すればリモートサーバにログインできる。

1
$ ssh [ ログインユーザー名 ]@[ IPアドレス ]

このSSHコマンドを使用し、はじめてアクセスする場合には、本当にこの接続を開始するかという確認があるのでyesと入力。次にパスワードの入力が求められるので、パスワードを入力すればログインすることができる。

◼︎Linuxマシン(192.168.2.67)にはじめてsshログインする場合

1
2
3
4
5
6
7
8
 macmini: ~ user1 $ ssh hinako@192.168.2.67
The authenticity of host '192.168.2.67(192.168.2.67)' can't be established.
RSA key fingerprint is c3 : e3 : 8d :5e ea :58 : 0e :a9 :  e5 : 03 : 34 : 56 : b3 : ca : a3 : 60.
Are you sure you want to continue connecting (yes, no)? yes ←yesを入力
Warning : Permanently added '192.168.2.67'(RSA) to the list of known hosts.
hinako@192.168.2.67's passward:  ←パスワード入力
Last login: Sat Aug 23 18:34:30 2014 from 192.168.2.67 
[hinako@localhost ~]$

秘密鍵と公開鍵

不特定多数の人がサーバに入れるのはセキュリティ上問題である。そこで、サーバに入れる人を制限する必要がある。サーバに入れる人を制限するためには「秘密鍵」と「公開鍵」という2つのファイルを使う。

ssh-keygen -t rsaというコマンドを入力することで、SSH通信で必要になる、公開鍵と秘密鍵の両方が生成される。公開鍵は、サーバへのSSHを始めるときに一緒に送る。秘密鍵は、ローカル環境内に保存しておく。通信を行う際は、サーバへのSSHを始めるときに一緒に送った公開鍵を元に暗号が生成され、ローカル環境ではサーバから送られてきた暗号を秘密鍵を基に解読する。このようにして、サーバーとローカル環境間の情報のやりとりが安全に行われる。

https://tech-master.s3.amazonaws.com/uploads/curriculums//57c1dac7407e5c7bf911be073022afae.jpeg

公開鍵でログインする

公開鍵でのログインの手順

公開鍵認証でのログイン方法で行うこと次のは3つ。

  • ①公開鍵と秘密鍵を生成(ローカル環境側)
  • ②公開鍵をサーバ側に設置(ローカル環境側→サーバ側)
  • ③ 公開鍵認証でログインできるか確認

①公開鍵と秘密鍵を生成

はじめに、公開鍵と秘密鍵を作成する。

ターミナル(ローカル)
1
2
~ $ cd .ssh # .sshディレクトリへ移動
.ssh $ ssh-keygen -t rsa  # 公開鍵と秘密鍵を作成

上記のコマンドを入力後、以下のように表示され、秘密鍵の保存場所と秘密鍵に設定するパスワードを入力する。

ターミナル(ローカル)
1
2
3
4
5
6
7
# 秘密鍵を保存するときの名前は、デフォルト(id_rsa)のままで良いので何もせずにenterキーを押します。
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/hogehoge/.ssh/id_rsa): [秘密鍵の置き場所] 

# 秘密鍵に設定するパスワードを入力(忘れないよう覚えておきましょう)
Enter passphrase (empty for no passphrase): [パスワード]
Enter same passphrase again: [パスワード]

ローカル環境の公開鍵と秘密鍵の保存場所はデフォルトで決まっている。公開鍵は ~/.ssh/id_rsa.pub秘密鍵~/.ssh/id_rsaに保存されている。

以下のコマンドを入力して、出力結果に以下の2つが含まれていれば作成成功。

ターミナル(ローカル)
1
2
$ ls
=> [鍵の名前]_key_rsa [鍵の名前]_key_rsa.pub

公開鍵と秘密鍵を作成できたか、catコマンドを使って公開鍵の中身を確認する。

ターミナル(ローカル)
1
2
3
4
5
# 公開鍵の中身を確認
$ cat [公開鍵]_key_rsa.pub

#秘密鍵の中身を確認
$ cat [秘密鍵]_key_rsa

コマンドを実行すると、複雑な文字列がターミナル上に表示される。これが、先ほど作成した公開鍵と秘密鍵の中身になる。

 catコマンド

catコマンドは、catと入力した後に記述するファイルの中身を確認するコマンド。

②公開鍵をサーバ側に設置

公開鍵をサーバ側に設置するため以下の2つの処理を行う。

  • リモートサーバにローカル環境の公開鍵のファイル(id_rsa.pub)をコピー
  • ローカル環境の公開鍵のファイル(id_rsa.pub)の中身をリモートサーバの公開鍵のファイル(~/.ssh/authorized_keys)に追記

リモートサーバにローカル環境の公開鍵のファイル(id_rsa.pub)をコピーする

公開鍵をサーバ側に設置するために、先ほど生成した公開鍵をリモートサーバにコピーする。
公開鍵をリモートサーバにコピーするには、scpコマンドを使う。

 

scpコマンド
scpコマンドとは、送信先ディレクトを指定してファイルを送ることができるコマンド。

1
2
# .sshディレクトリにローカル環境の公開鍵のファイル(id_rsa.pub)をコピー
$ scp ~/.ssh/id_rsa.pub [ユーザー名]@ [IPアドレス]:~/.ssh

AWSの場合は、あらかじめ秘密鍵(pem)でsshができるようになっているので以下のようにするのが一般的。

1
$ ssh -i [ダウンロードした鍵の名前].pem ec2-user@[作成したEC2インスタンスと紐付けたElastic IP]

ローカル環境の公開鍵のファイル(id_rsa.pub)の中身をリモートサーバの公開鍵のファイル(~/.ssh/authorized_keys)に追記

リモートサーバの公開鍵のファイル(~/.ssh/authorized_keys)を作成し、その中にローカル環境の公開鍵のファイル(id_rsa.pub)の中身を追記する。

今までローカル環境では、公開鍵はid_rsa.pubに保存したが、リモートサーバでは公開鍵は ~/.ssh/authorized_keysに保存する。

ターミナル
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# リモートサーバにログイン
$ ssh [ユーザー名]@ [IPアドレス]

# .sshディレクトリへ移動
$ cd ~/.ssh  

# リモートサーバの公開鍵のファイル(~/.ssh/authorized_keys)を作成
touch .ssh/authorized_keys

# 公開鍵の中身を追記
$ cat ~/id_rsa.pub >> authorized_keys

最後に.sshディレクトリとauthorized_keysファイルの権限を設定しする。 .sshディレクトリには読み・書き・実行のすべての権限、authorized_keysファイルには読み・書きの権限を設定する。

1
2
3
# .sshディレクトリとauthorized_keysファイルの権限を設定
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

③公開鍵認証でログインできるか確認

公開鍵をコピー・サーバ側に設置できたので、公開鍵認証でログインできるか確認する。作成した秘密鍵が~/.ssh/id_rsaに保存されていれば、リモートサーバにログインするときに自動的に鍵を使用した接続を行うようになっている。

1
2
# リモートサーバにログイン
$ ssh [ユーザー名]@ [IPアドレス]

コマンドを打った後、下記のような表示がされる。①公開鍵と秘密鍵を生成の# 秘密鍵に設定するパスワードを入力のところで記述したパスワードを入力する。その後[ユーザー名]@ [IPアドレス]% と表示されていればログイン成功。

1
2
Enter passphrase for key '~/.ssh/id_rsa':  ←パスワードを入力 
[ユーザー名]@ [IPアドレス]%  ←SSHサーバにログイン成功