Macターミナルからsshでリモートマシンにログイン
Macターミナルからsshで操作したい
以前Vagrant(ベイグラント)を構築してsshで入っていましたがすっかり忘れたのでまったく新しい方法で試しました。色々な方のBlogを参考にし備忘録として残したいと思います。クライアント側は Mac terminal(macOS High Sierra)virtualBox6.1 LinuxはRed Hat Enterprise Linux(64-bit) で検証しました。
OpenSSHを活用する
OpenSSH とは、SSHプロトコルを利用するためのソフトウェアで、SSHサーバおよびSSHクライアントを含む。OpenSSHは、OpenBSDプロジェクトにより開発が行われ、BSDライセンスで公開されている。
Wikipediaより
OpenSSHを利用するにはデフォルトの設定で問題ないとの事です。しかし、セキュリティの観点などから設定を変更する場合には編集が必要になります。
公開鍵認証の利用
OpenSSHを利用してシステムにログインするためには、公開鍵認証が必須です。通常のログイン方法ではパスワードを入力することになり、ネットワークをパスワードが流れることになり、暗号化されていますがリスクがあります。公開鍵認証を利用すると、パスワードがネットワークに流れることがなくなるため、侵入されるリスクが下がります。
鍵のペアを作成する(Mac側)
$ cd ~/.ssh
/.ssh: No such file or directory と怒られたら.sshディレクトリがないのでフォルダを作成
$ mkdir ~/.ssh
$ cd ~/.ssh
$ ls
authorized_keys config id_rsa id_rsa.pub known_hosts
公開鍵と、ペアになる秘密鍵を作成します。鍵のペアを作るためには、ssh-keygenというコマンドを使用します。
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/satodatetooru/.ssh/id_rsa):key01 ←任意のファイル名を入力(key01としました)
Enter passphrase (empty for no passphrase):xxxxxxx ←任意のパスフレーズを入力(非表示)
Enter same passphrase again:xxxxxxx←任意のパスフレーズを再入力(非表示)
Your identification has been saved in /Users/your name/.ssh/id_rsa.
Your public key has been saved in /Users/your name/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:A6sAoBRy1eDfXLhVukZyTXreHVk2isSXxxxxxxxx you@your name.local
The key’s randomart image is:
+—[RSA 2048]—-+
|ooo+=o ..o ..o |
|=. ..o. ..O.o..+|
|o o = o @.=. o |
| + B O B o .. |
| . o S + o . .|
| . . + |
| . . |
| E |
| |
+—-[SHA256]——+
秘密鍵がssh-keygenで指定した名前となり、公開鍵はその名前の後ろに「.pub」(publicの頭3文字)を付けたファイル名になります。カレントディレクトリに以下の2つのファイルが作成されていることを確認してください。
秘密鍵:key01
公開鍵:key01.pub
公開鍵はサーバに登録する鍵、秘密鍵は接続時にクライアント側で利用する鍵になります。
$ cd ~/.ssh
$ ls
authorized_keys config id_rsa id_rsa.pub known_hosts
サーバ側で公開鍵認証を許可設定
/etc/ssh/sshd_configに、公開鍵認証を許可する設定を行います。多くのディストリビューションではデフォルトで設定されているので、その場合には確認のみ行い、サービスの再起動は不要です。
PubkeyAuthentication yes
設定を変更したら、サービスを再起動。
# systemctl restart sshd
サーバ側に公開鍵を登録
サーバ側でログインしたいアカウントでログインし、公開鍵を登録します。まず、ホームディレクトリに「.ssh」ディレクトリを作成し、パーミッションを設定します(既にある場合はこの手順は不要)。
$ cd
$ mkdir .ssh
$ chmod 700 .ssh
パーミッションの設定が適切になされていない場合、公開鍵認証は適切に進行しないので注意が必要。次に、.sshディレクトリ配下にauthorized_keysファイルを作成し、そこに公開鍵を登録します。既にファイルがある場合には公開鍵の追加をします。公開鍵のファイル名を「key01.pub」とした場合、たとえば次のコマンドを実行します。
$ cat key01.pub >> .ssh/authorized_keys
authorized_keysファイルは公開鍵を登録しておくファイルです。クライアントごとに鍵ペアを作成することになるので、クライアントが複数あれば公開鍵を複数登録することになります。このファイルも、初回にパーミッションを設定しておきます。
$ chmod 600 .ssh/authorized_keys
クライアント側からログインを試みる
クライアント側から、sshコマンドでログインを試みます。「-i 」(IDファイル接続に使用する公開鍵ファイルを指定)オプションに続けて、秘密鍵ファイルを指定。
$ ssh -i key01 user@サーバの名前かIPアドレス
Enter passphrase for key ‘key01’ : ←パスフレーズを入力(非表示)
ここでサーバー側のipアドレスがわからないときは ip a コマンドで調べる事ができます。
「enp0s3」,「 enp0s8」と書かれているものが、IPアドレスを設定するためのデバイスですが設定されていないようです。
VirtualBoxの設定から「ネットワーク」→「NAT」から「ブリッジアダプター」を選択すると表示される事があります。
NATはNetwork Address Translation(ネットワークアドレス変換)クライアントOSとホストOS間は繋がリません。VrtualBoxのゲストos間では通信したい場合に選択します。
ブリッジアダプターはクライアントOSとホストOSの間は繋がり同じネットワーク上の他のPCからも見えます。
設定したら再度「ip a」コマンドで確認します。
ここで、パスフレーズを入力し、パスワードを聞かれることなくログインできれば、公開鍵認証でのログイン成功です。初回ログイン時はサーバのfinger printをクライアントに登録するか否かを聞かれるので、yesと入力する必要があります。
$ ssh -i key01 user@サーバの名前かIPアドレス
Enter passphrase for key ‘key01’ : ←パスフレーズを入力(非表示)
$ ssh -i key01 ●●●@192.168.x.x
The authenticity of host ‘192.168.x.x(192.168.x.x)’ can’t be established.
ECDSA key fingerprint is SHA256:63iCAgVcO5x2xBBPBGGk6ij63D9xxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.x.x’ (ECDSA) to the list of known hosts.
●●●@192.168.x.x’s password:→入力
Activate the web console with: systemctl enable –now cockpit.socket
※ディストリビューションによっては通信出来ない(centos7で検証)事があるので後日検証したいと思います。
パスワード認証の禁止
ディストリビューションによっては、デフォルトの設定では公開鍵認証に失敗してもパスワード認証でログインできるようになっています。この状態では公開鍵認証を利用する意味が薄いので、公開鍵認証が成功したら、sshdの設定でパスワードによる認証を禁止にしておきます。
ディストリビューションによっては、デフォルトの設定では公開鍵認証に失敗してもパスワード認証でログインできるようになっています。公開鍵認証が成功したら、sshdの設定でパスワードによる認証を禁止にしておきます。
/etc/ssh/sshd_configの設定を以下のように変更します。
PasswordAuthentication no
変更を適用するため、サービスを再起動。
# systemctl restart sshd
公開鍵認証によるsshアクセスをするためには、以下が必要です。
・アクセス先にユーザ名が設定されていること
・アクセス先のsshdでPubkeyAuthenticationがnoになっていないこと
・公開鍵がsshd_configで指定されたパスに置いてあること
・公開鍵を配置するディレクトリの権限が700になっていること