読者です 読者をやめる 読者になる 読者になる

初めてのシステムと日記

システムも日記も初めてです。

研修(SSHと鍵交換)

まず、SSHと鍵って何ぞや?

SSH

Secure Shell(セキュアシェル)
ネットワークを介して別のコンピューターにログインしたり、
コマンドを実行したり、ファイルを移動するためのプログラム。
その際にパスワード認証ではなく鍵認証を用いて
暗号通信をしているのでセキュリティに優れている。
理由は↓。

鍵認証

パスフレーズを暗号化/復号化して認証する方法。
パスワード認証を利用すると第三者に知られる恐れがある。
鍵認証では、秘密鍵と公開鍵の2つの鍵を暗号化などして認証、
そのためユーザー認証でなりすましなどを防げる。
鍵は秘密鍵、公開鍵の2つがある。
秘密鍵は接続元、公開鍵は接続先におく。


SSHを用いれば安全でかつパスワードいらずで他のコンピューターにアクセス、いじれることができる。リモートで作業するのによさそう。


イメージ図

実際に
■自分のPC→サーバー
■自分のサーバー→他のサーバー
の2つをSSHでノンパスワードで接続してみる。

■鍵の作成と交換と接続(PC→サーバー編)

1.鍵の作成

PuTTyに付属しているputtygen.exeを利用して鍵を作成。

やり方は以下のURLを参照。

http://nekhet.ddo.jp/item/767


今回は公開鍵をtest.pub、秘密鍵をtest.ppkとして保存。

暗号形式はRSA。パスフレーズは今回は無視。


PuTTy

 ターミナルエミュレータ

 サーバーなどに接続するためのソフトと認識。


※RSA

 桁数が大きい合成数の素因数分解問題が困難であることを安全性の根拠とした公開鍵暗号

2.公開鍵をサーバーに転送する

PuTTyを利用して一般ユーザーでサーバーにアクセス。

/home/satoに.sshフォルダを作成、自分しか編集できないようにパーミッション設定。

一般的に.sshが鍵を保管するフォルダっぽい。


コマンド

[sato@sato ~]$ mkdir .ssh
[sato@sato ~]$ chmod 700 $HOME/.ssh
[sato@sato ~]$ ll -sa
8 drwx------ 2 sato sato 4096  6月 21 00:30 .ssh


WinSCPを使って一般ユーザーでサーバーにアクセス。

自分のPCに保存した公開鍵test.pubをhome/user/.sshの直下に置く。


WinSCP
 SSHでファイルを転送できるソフト。安全にファイル転送ができる。

3.公開鍵を変換

test.pubをOpneSSH形式の鍵に変更。
公開鍵の名前はautorized_keysに必ずする。


コマンド

[sato@sato ~]$ ssh-keygen -i -f test.pub > authorized.pub
[sato@sato ~]$ ll
合計 24
-rw-rw-r-- 1 sato sato  209  6月 21 00:35 authorized.pub
-rw-rw-r-- 1 sato sato  294  5月 29  2009 test.pub
drwxrwxr-x 2 sato sato 4096  6月 20 07:27 work

[sato@sato ~]$ mv authorized_keys $HOME/.ssh
[sato@sato ~]$ chmod 600 $HOME/.ssh/authorized_keys
[sato@sato ~]$ ll -sa $HOME/.ssh
合計 24
8 drwx------ 2 sato sato 4096  6月 21 00:36 .
8 drwx------ 5 sato sato 4096  6月 21 00:35 ..
8 -rw------- 1 sato sato  209  6月 21 00:36 authorized_keys


ssh-keygen で公開鍵、秘密鍵を作成。

 ■オプション
  -i:OpenSSH形式の鍵に変換する
  -f:鍵を格納するファイル名を指定する


test.pub は rm で削除。


※OpenSSH
 SSHを利用するためのソフトウェア。
 SSHには他にもソフトウェアがあるらしいが、OpenSSHが様々な実装に対応している一般的。

パスフレーズを設定した場合

サーバーにログインする場合、パスフレーズは手入力になってしまう。
これを自動的に行うことが可能。


コマンド

[sato@sato ~]$ ssh-agent bash
[sato@sato ~]$ ssh-add $HOME/.ssh/authorized_keys
パスフレーズ入力

ssh-agent で認証エージェントなるものを起動。引数は起動するシェル

ssh-add [key_PATH] で鍵を登録。


これでパスフレーズを入力しなくてもログインできた。

■鍵の作成と交換と接続(自サーバー→他サーバー)

1.鍵を作成

サーバー上で鍵を作成することも可能。


コマンド

[sato@sato ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/sato/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):           ←パスフレーズ入力
Enter same passphrase again:                  ←パスフレーズもう一度確認
Your identification has been saved in /home/sato/.ssh/id_rsa.
Your public key has been saved in /home/sato/.ssh/id_rsa.pub.
The key fingerprint is:
fa:47:2e:f3:e6:6c:1e:48:de:94:04:39:c2:7a:37:a9 sato@sato.fact
[sato@sato ~]$ ll -sa $HOME/.ssh
合計 40
8 drwx------ 2 sato sato 4096  6月 21 01:48 .
8 drwx------ 5 sato sato 4096  6月 21 01:21 ..
8 -rw------- 1 sato sato  209  6月 21 01:19 authorized_keys
8 -rw------- 1 sato sato 1675  6月 21 01:48 id_rsa        ←秘密鍵
8 -rw-r--r-- 1 sato sato  396  6月 21 01:48 id_rsa.pub      ←公開鍵

ssh-keygen -t rsa でRSA形式の鍵を作成。

秘密鍵がid_rsa、公開鍵がid_rsa.pub。


続けてid_rsa.pubをauthorized_keyにリネームする。

今回はすでにauthorized_keyが存在するため、id_rsa.pubの内容をauthorized_keyに追加。


コマンド

[sato@sato .ssh]$ cat id_rsa.pub >> authorized_keys

cat [file name] でファイルの内容を表示。

■オプション

cat flie1 > file2  flie1の内容をflie2にコピー

cat flie1 >> file2 flie1の内容をflie2に追加

cat flie1 file2 > file3 flie1とflie2をまとめてfile3にする


id_rsa.pub は rm で削除。

2.公開鍵を他サーバーに転送する

自サーバーから他サーバーへauthoriezd_keysを転送。


コマンド

[sato@sato .ssh]$ scp authorized_keys sato@〜〜〜:/home/sato/.ssh
sato@〜〜〜's password:        ←接続先のユーザーのパスワード入力
Permission denied, please try again.
sato@〜〜〜's password:        ←接続先のユーザーのパスワード入力
authorized_keys                               100%  605     0.6KB/s   00:00

scp [file name] [接続先user]@[接続先IPアドレス]:[接続先のコピーする場所] でファイルを転送。

3.自サーバーから他サーバーへアクセスする

自サーバーから他サーバーへノンパスワードでアクセス。


コマンド

[sato@sato ~]$ ssh sato@〜〜〜
Last login: Fri May 29 15:43:52 2009 from factreal34.frontier.local
[sato@fetp ~]$ 

ssh name@[接続先IPアドレス] で接続先へごー。

これでノンパスワードでサーバー接続ができた。

引っかかったところ

scpコマンド

 ホスト名をIP以外で接続しようとしても認証されなかった。

 なので接続先のIPを調べる方法でなんとかクリア。


 nsloolup [host] でIPを調べることができた。


ファイル管理

 今まではWindows上でファイルの状態を確認しながら作業ができた。

 今回はLinux上のみでの作業のため、視覚的に管理することができなかった。

 そのせいで、必要なファイルがどこか分からなくなったり、誤って消してしまったりなど。

 ll で今いるディレクトリのファイルやフォルダが見れるため、

 何か作業したらllで確認する癖をつけたほうがよいのかな?



 感想としては、↑のこともあって思ったより時間がかかった。

 ただ今までのコマンドを駆使してクリアできることが結構あったので、

 学んできたことが徐々に生かされている。