Closed18

学習記録#37 250723

ろみぃ(konatsu)ろみぃ(konatsu)

SSH(Secure Shell)は、リモートホスト間の通信において高いセキュリティを実現するプロトコル

強力な認証機能と暗号化により、ファイル転送やリモート操作を安全に行うことができる

ろみぃ(konatsu)ろみぃ(konatsu)

Linuxでは、OpenBSDグループによるSSHの実装であるOpenSSHが利用されている

SSHには現時点でVer1と2があり、それぞれ認証アルゴリズムが異なる
1系ではRSA1、2系ではDSAやRSAが使われている

ろみぃ(konatsu)ろみぃ(konatsu)

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

ろみぃ(konatsu)ろみぃ(konatsu)

ssh接続コマンド

ssh [[ログインユーザー名@]ホスト] [実行したいコマンド]

実行したいコマンドを入力すると、そのコマンドだけ実行してSSH接続を終了する

ろみぃ(konatsu)ろみぃ(konatsu)

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

ろみぃ(konatsu)ろみぃ(konatsu)

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

[サーバー]→公開鍵→[クライアント[公開鍵(これと照らし合わせる)]]
ろみぃ(konatsu)ろみぃ(konatsu)

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

2回目以降は確認されないようになる

ろみぃ(konatsu)ろみぃ(konatsu)

ユーザー認証では、パスワード以外に公開鍵認証を使うことができる

これは、あらかじめクライアント側のユーザーの公開鍵をサーバーに登録しておくとできる

ろみぃ(konatsu)ろみぃ(konatsu)

やり方

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

scpコマンドは、SSHの仕組みを使ってホスト間で安全にファイルをコピーできるコマンド
(SSH COPY?)

scp コピー元ファイル名 [ユーザー名@]コピー先ホスト:[コピー先ファイル名]

例)

$ scp /etc/hosts sv3.example.com:/tmp
$ scp /etc/hosts linuxuser@sv3.example.com:/var
ろみぃ(konatsu)ろみぃ(konatsu)

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

最近は、sftpやrsyncの利用が推奨されている

ろみぃ(konatsu)ろみぃ(konatsu)

ssh-agentコマンドを叩くと、パスフレーズの入力を省くことができる

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

ろみぃ(konatsu)ろみぃ(konatsu)

次にssh-addコマンドを使って秘密鍵を登録する。このとき、パスフレーズを入力する

これ以降、このbashシェルならびにその子プロセスでは、パスフレーズの入力が不要になる

ろみぃ(konatsu)ろみぃ(konatsu)

SSHポート転送を利用すると、あるポートに送られてきたTCPパケットを、SSHを使った安全な通信路を経由して、リモートホストの任意のポートに転送できる

これを使うと、POP3やFTPなど、暗号化されていないプロトコルを使った通信の安全性を高めることができる

ろみぃ(konatsu)ろみぃ(konatsu)

書式

ssh -L [ローカルポート]:[リモートホスト]:[リモートポート] [リモートホストのユーザ名]@[リモートホスト]

例)

$ ssh -f -N -L 10110:pop.example.com:110 linucuser@pop.example.com
このスクラップは2ヶ月前にクローズされました