学習記録#37 250723

746ページから

762ページまで

SSH(Secure Shell)は、リモートホスト間の通信において高いセキュリティを実現するプロトコル
強力な認証機能と暗号化により、ファイル転送やリモート操作を安全に行うことができる

Linuxでは、OpenBSDグループによるSSHの実装であるOpenSSHが利用されている
SSHには現時点でVer1と2があり、それぞれ認証アルゴリズムが異なる
1系ではRSA1、2系ではDSAやRSAが使われている

OpenSSHをインストールすると、ホストの公開鍵と秘密鍵が作成される
通常はデフォルトでインストールされている

ssh接続コマンド
ssh [[ログインユーザー名@]ホスト] [実行したいコマンド]
実行したいコマンドを入力すると、そのコマンドだけ実行してSSH接続を終了する

SSHでは、ユーザー名とパスワードによるユーザー認証の前に、クライアントがサーバーの正当性を確認するホスト認証が行われる

SSH接続するたびに、サーバー固有のホスト認証(=公開鍵)がサーバーからクライアントに送信され、クライアント側で持つ公開鍵と一致するか確認する
[サーバー]→公開鍵→[クライアント[公開鍵(これと照らし合わせる)]]

初回接続時はクライアントがまだサーバーの公開鍵を持ってないので、サーバーの公開鍵を登録するかどうか聞かれる。
Yesを選ぶと~/.ssh/known_hostsファイルに登録される
2回目以降は確認されないようになる

ユーザー認証では、パスワード以外に公開鍵認証を使うことができる
これは、あらかじめクライアント側のユーザーの公開鍵をサーバーに登録しておくとできる

やり方
- ssh-keygenコマンドで公開鍵と秘密鍵のペアを作る
- パスフレーズを入力する。パスフレーズは、秘密鍵を利用する際の認証用文字列
- 作成した鍵のうち、公開鍵を接続先ホストに登録するため、scpコマンドで安全に転送する
- 接続先ホストにログインする。まだ公開鍵認証の設定が完了していないので、パスワードでログインする
- ~/.ssh/authorized_keysファイルに、3でコピーした公開鍵を追加する
- authorized_keysファイルは所有者のみが読み書きできるように変更しておく

scpコマンドは、SSHの仕組みを使ってホスト間で安全にファイルをコピーできるコマンド
(SSH COPY?)
scp コピー元ファイル名 [ユーザー名@]コピー先ホスト:[コピー先ファイル名]
例)
$ scp /etc/hosts sv3.example.com:/tmp
$ scp /etc/hosts linuxuser@sv3.example.com:/var

ただし、最近ではscpコマンドの利用は推奨されなくなっている
これば、scpのプロトコルが古くなり柔軟性に欠けるから
最近は、sftpやrsyncの利用が推奨されている

ssh-agentコマンドを叩くと、パスフレーズの入力を省くことができる
ssh-agentはクライアント側で動くデーモンで、秘密鍵をメモリ上に保持しておき、必要となった時点でそれを利用するため、その都度パスフレーズを入力する必要がないというもの

利用するためには、ssh-agentの子プロセスとしてbashシェルを起動する
$ ssh-agent bash

次にssh-addコマンドを使って秘密鍵を登録する。このとき、パスフレーズを入力する
これ以降、このbashシェルならびにその子プロセスでは、パスフレーズの入力が不要になる

SSHポート転送を利用すると、あるポートに送られてきたTCPパケットを、SSHを使った安全な通信路を経由して、リモートホストの任意のポートに転送できる
これを使うと、POP3やFTPなど、暗号化されていないプロトコルを使った通信の安全性を高めることができる

書式
ssh -L [ローカルポート]:[リモートホスト]:[リモートポート] [リモートホストのユーザ名]@[リモートホスト]
例)
$ ssh -f -N -L 10110:pop.example.com:110 linucuser@pop.example.com