SSHについて
SSHとは
SSHは、離れた場所にあるサーバの中で作業を行いたい場合に利用する。暗号や認証の技術を利用して、安全にリモートサーバと通信することができる。
離れた場所にあるサーバのことを「リモートサーバ」や「リモート環境」、省略して「リモート」と呼ぶ。自身のコンピュータを「ローカルサーバ」や「ローカル環境」、省略して「ローカル」と言う。SSHを使ってリモートサーバと通信することによって、自身のローカルのターミナルでリモートサーバのターミナルを操作することができるようになる。
SSHのメリット
SSHが利用可能なリモートサーバーであれば下記のメリットがある。
- 通信を盗聴される危険性を回避して、安全に操作ができる
- サーバ上でのファイル操作、設定ファイルの編集ができる
- データのバックアップをしたいとき、サーバ上で圧縮(ZIP)して、ファイルの一括ダウンロードできるので、アップロード・ダウンロードの大量ファイルの時間短縮ができる
SSHでログインする
SSHでリモートサーバにログインする方法は2つ。パスワード認証
と公開鍵認証
、この2つのログイン方法がある。
SSHサーバとSSHクライアント
SSHを利用するためには、リモートにSSHサーバ、ローカルにSSHクライアントというソフトウェアをインストールする必要がある。しかし、LinuxサーバやMac OSには標準でインストールされているのでインストールする必要はない。
下記のようにIPアドレスを指定してSSHコマンドを実行すればリモートサーバにログインできる。
例
この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を始めるときに一緒に送った公開鍵を元に暗号が生成され、ローカル環境ではサーバから送られてきた暗号を秘密鍵を基に解読する。このようにして、サーバーとローカル環境間の情報のやりとりが安全に行われる。
公開鍵でログインする
公開鍵でのログインの手順
公開鍵認証でのログイン方法で行うこと次のは3つ。
- ①公開鍵と秘密鍵を生成(ローカル環境側)
- ②公開鍵をサーバ側に設置(ローカル環境側→サーバ側)
- ③ 公開鍵認証でログインできるか確認
①公開鍵と秘密鍵を生成
はじめに、公開鍵と秘密鍵を作成する。
上記のコマンドを入力後、以下のように表示され、秘密鍵の保存場所と秘密鍵に設定するパスワードを入力する。
1 2 3 4 5 6 7 |
ローカル環境の公開鍵と秘密鍵の保存場所はデフォルトで決まっている。公開鍵は ~/.ssh/id_rsa.pub
、秘密鍵は~/.ssh/id_rsa
に保存されている。
以下のコマンドを入力して、出力結果に以下の2つが含まれていれば作成成功。
公開鍵と秘密鍵を作成できたか、catコマンドを使って公開鍵の中身を確認する。
コマンドを実行すると、複雑な文字列がターミナル上に表示される。これが、先ほど作成した公開鍵と秘密鍵の中身になる。
catコマンド
catコマンドは、cat
と入力した後に記述するファイルの中身を確認するコマンド。
②公開鍵をサーバ側に設置
公開鍵をサーバ側に設置するため以下の2つの処理を行う。
- リモートサーバにローカル環境の公開鍵のファイル(id_rsa.pub)をコピー
- ローカル環境の公開鍵のファイル(id_rsa.pub)の中身をリモートサーバの公開鍵のファイル(~/.ssh/authorized_keys)に追記
リモートサーバにローカル環境の公開鍵のファイル(id_rsa.pub)をコピーする
公開鍵をサーバ側に設置するために、先ほど生成した公開鍵をリモートサーバにコピーする。
公開鍵をリモートサーバにコピーするには、scpコマンド
を使う。
scpコマンド
scpコマンドとは、送信先のディレクトを指定してファイルを送ることができるコマンド。
AWSの場合は、あらかじめ秘密鍵(pem)でsshができるようになっているので以下のようにするのが一般的。
ローカル環境の公開鍵のファイル(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ディレクトリとauthorized_keysファイルの権限を設定しする。 .sshディレクトリには読み・書き・実行のすべての権限、authorized_keysファイルには読み・書きの権限を設定する。
③公開鍵認証でログインできるか確認
公開鍵をコピー・サーバ側に設置できたので、公開鍵認証でログインできるか確認する。作成した秘密鍵が~/.ssh/id_rsaに保存されていれば、リモートサーバにログインするときに自動的に鍵を使用した接続を行うようになっている。
コマンドを打った後、下記のような表示がされる。①公開鍵と秘密鍵を生成の# 秘密鍵に設定するパスワードを入力
のところで記述したパスワードを入力する。その後[ユーザー名]@ [IPアドレス]% と表示されていればログイン成功。