WEBアプリ開発に関する技術を綴るブログ

php,js,apache,mysql,laravel,fuelphpあたりの技術

sshに関して

sshとは

SSHはSecure Shellの略称。リモートコンピュータと通信するためのプロトコルSSH公開鍵暗号を利用し、共通鍵を暗号化して鍵交換を行う。 認証の仕組みもパスワード、公開鍵、ワンタイムパスワードなど多様化していて、適切な認証方法が選択出来る。

公開鍵と秘密鍵とは

f:id:tanaka19880312:20180828131634p:plainf:id:tanaka19880312:20180828131634p:plain

1.公開鍵の公開

まず錠前(公開鍵)をAさんに渡す。この錠前はAさん以外の誰にでも渡すことが出来る。このAさんはサーバなどが該当します。 また、この錠前を開けることが出来る鍵(秘密鍵)は、自分だけが持っている。

2.公開鍵による暗号化

f:id:tanaka19880312:20180828132132p:plainf:id:tanaka19880312:20180828132132p:plain

Aさんから宝物をもらえることになりました。宝物は認証のためのデータが該当する。 宝物は宝箱に入れて、先ほどの錠前を使って箱に鍵をかけてもらいます。 これが公開鍵による暗号化に該当。 宝箱を受け取るまでの間、誰もこの宝箱を開けることはできません。 自分以外にこの錠前に合う鍵を持っていないから。

3.秘密鍵による復号化

f:id:tanaka19880312:20180828132351p:plainf:id:tanaka19880312:20180828132351p:plain

宝箱を受け取って、自分だけが持っている秘密鍵を使って錠前を開ければ、中にある宝物(認証用データ)を手に入れる事が出来る。 これが「秘密鍵による復号化」に該当する。

4.公開鍵と秘密鍵を使った認証

公開鍵と秘密鍵を使った認証の場合、3項までの動作の後にサーバとの認証動作があります。

公開鍵と秘密鍵を使った認証方法について流れを記す。

・クライアントは秘密鍵と公開鍵を作る ・クライアントはサーバに公開鍵を渡す ・サーバは公開鍵とユーザーを結びつけておく ・サーバはユーザーがログインしてきたら、乱数を生成し、公開鍵で暗号化して渡す ・クライアントは秘密鍵で乱数を復号し、ハッシュ値をサーバに渡す ・サーバはクライアントから来たハッシュ値と自前のハッシュ値を比較して一致したら認証する

TelnetFTPとの違い

telnet:ネットワークを経由して他のコンピュータ(主にサーバ)に接続し、遠隔操作するための仕組み。

SSH:ネットワークを経由して他のコンピュータ(主にサーバ)に接続し、遠隔操作するための仕組み。 通信途中の情報は全部暗号化されますよ。telnetさんは暗号化されないのでこっちの方が安全。

どちらもネットワーク経由で他のコンピュータを遠隔操作するための仕組み。 現在はSSHを使用するのが主流で、telnetはほとんど使われていない。

.ssh/configとは

ssh経由でのリモートサーバーの接続する際に利用される設定ファイル

* .ssh/configを書くと何が嬉しいか

sshコマンドでリモート接続する際の一般的な記述は以下

一般的な接続方法

ssh ■■■■.examle.com

ユーザー名を指定する場合は以下

ssh ユーザ名@■■■■.example.com

シンプルな接続の場合は上記のような簡易な記述で済みますが、 ポート番号がデフォルト(22)では無い場合、公開鍵認証で、鍵がデフォルトの名前ではなかったりした場合、 コマンドが複雑になる。

ポート名を指定する場合

ssh ユーザー名@ホスト名 -p ポート番号

公開鍵認証の場合

ssh ユーザー名@ホスト名 -i ~/.ssh/鍵の名前

ポート名と公開鍵認証の場合

ssh ユーザー名@ホスト名 -i ~/.ssh/鍵の名前 -p -p ポート番号

こんな時に.ssh/configは役に立ちます。

HostName ホスト名

User ユーザー名

Port ポート番号

IdentityFile 鍵へのPATH(例えば~/.ssh/■■■■.key)

このような設定を書いていると

ssh ■■■■

簡単な記述で接続が可能になる。

対象のサーバにssh接続

SSHに接続するには、次の情報が必要です。

・サーバアドレス(通常はIPアドレス)

・ユーザ名

・ポート

・鍵の名前

公開鍵にあった秘密鍵を指定してログイン

秘密鍵を指定して、リモートマシンにsshでログイン $ ssh -i /tmp/■■■■.txt ■■■■@■■■■.com

tanaka:~ tanakaakio$ ssh nara-production@153.126.164.52

The authenticity of host 'nara-production (153.126.164.52)' can't be established. ホスト '153.126.164.52(153.126.164.52)'の真正性は確立できません。 ECDSA key fingerprint is SHA256:Hq0sLh8OAurUF9slYVvFtzXJa9d5BczZ+ybacBoWLVY. Are you sure you want to continue connecting (yes/no)? このサーバを信頼するかの判断

ここで信頼する(yes) と答えると、 そのサーバの fingerprint が ~/.ssh/known_hosts に追加されます。

Host key verification failed. ホストキーの確認に失敗しました。

試したこと (1).ssh/known_hostsから特定のホストを削除する/しないで対処 ssh-keygen -R ホスト名

known_hosts とは 接続したことのある各ホストの公開鍵を保存しているファイルで、 ユーザレベルのファイルである ~/.ssh/known_hosts サーバレベルのファイルとして、/etc/ssh/known_hosts がある。

/Users/tanakaakio/.ssh/にknown_hostsがある!!! 開くと、

104.192.143.3 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw== のような記述がある

tanaka:~ tanakaakio$ ssh-keygen -F 104.192.143.3

Host 104.192.143.3 found: line 6

104.192.143.3 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==

tanaka:~ tanakaakio$ ssh-keygen -R 104.192.143.3

Host 104.192.143.3 found: line 6

/Users/tanakaakio/.ssh/known_hosts updated. Original contents retained as /Users/tanakaakio/.ssh/known_hosts.old

ファイルを確認するとHost 104.192.143.3は消えている。

SSHのコマンド

既に「OpenSSHキー」が登録済みかどうかを確認 tanaka:~ tanakaakio$ ssh-add -l The agent has no identities.

tanaka:~ tanakaakio$ eval ssh-agent Agent pid 29979

改めてコマンドを実行し、以下のように「The agent has no identities.」が表示されたら、 「OpenSSHキー」はまだ登録されていないということになる。

tanaka:~ tanakaakio$ ssh-add -l The agent has no identities.

~/.ssh/configの設定 Host ■■■■-production HostName 153.126.164.52 User tanaka-a Port 22 IdentityFile /Users/tanakaakio/.ssh/id_rsa

$ ssh ■■■■-production 又は、 $ tanaka-a@153.126.164.52 -i /Users/tanakaakio/.ssh/id_rsa で接続。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

が表示されたので、アクセス権を不可に設定。

再度、tanaka-a@153.126.164.52's password: Permission denied, please try again. となるので、

新しいパスフレーズを設定するために、 $ ssh-keygen -p Enter file in which the key is (/Users/tanakaakio/.ssh/id_rsa): Enter old passphrase: Enter new passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved with the new passphrase.

tanaka:~ tanakaakio$ ssh ■■■■-production Enter passphrase for key '/Users/tanakaakio/.ssh/id_rsa': Last failed login: Thu Aug 30 16:53:08 JST 2018 from p5434111-ipngnfx01marunouchi.tokyo.ocn.ne.jp on ssh:notty There were 10 failed login attempts since the last successful login.

SAKURA Internet [Virtual Private Server SERVICE]

[tanaka-a@■■■■-production ~]$

となりました。

Linuxコマンド【 ssh 】リモートマシンにSSHでログイン - Linux入門 - Webkaru