#はじめに
理屈をちゃんと理解していないからよく忘れて、何度も調べるパスワードなしのssh接続。
この投稿は、過去に諸先輩方がアップしてくれた分かりやすいサイトの内容を、自分が把握しやすいように再構成しただけです。
先輩の皆様ありがとうございます。
一台のマシンから複数台のマシン/さまざまなOSにssh接続するとき、パスワードを打ち込まないでアクセスしたい。
単純なログインの簡略化ではなく、リモートコマンドを実行することを念頭に、公開鍵を利用した接続手順をまとめる。
今回想定している構成は以下。
【接続元】
マシン | IPアドレス |
---|---|
Linux(CentOS) | 192.168.10.100 |
【接続先】
マシン | IPアドレス |
---|---|
Linux(CentOS) | 192.168.10.101 |
VMware ESXi | 192.168.10.200 |
Windows 10 Pro | 192.168.10.201 |
#1. 接続元で秘密鍵と公開鍵を生成
接続元のサーバで、秘密鍵と公開鍵のペアを作成し、公開鍵を接続先に渡す。基本はこれだけ。
なので、まず接続元のサーバにログインして鍵のペアを作る。
rootユーザで接続元Linuxにログインする。そして以下のコマンドで鍵を生成する。rsaで鍵を作る場合は特に指定は必要ない。
# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx root@hostname
keyの保管先ファイルとパスフレーズを設定するよう求められる。
鍵のできる場所はデフォルトの/root/.ssh/id_rsaでいいので、単純にEnterキーを押す。
のちのち自動化処理に使いたいので、パスフレーズは空で。単純にEnterキーを押す。
鍵が生成されたことを確認する。
# cd .ssh
# ls
id_rsa id_rsa.pub known_hosts
秘密鍵:id_rsa
と公開鍵:id_rsa.pub
ができている。
#2. 接続先設定:Linux編
まず、Linux(CentOS 7)の場合の手順。接続先Linuxサーバのsshdが有効になっていることが前提。
##公開鍵の配布
接続元で作った公開鍵を接続先Linuxに渡す。
鍵の受け渡しには、scpを使った。もちろんこの段階では公開鍵を使った設定をしていないのでパスワードを入力する。
# scp /root/.ssh/id_rsa.pub root@192.168.10.101:/root/
接続先のLinuxにrootでログインして、受け渡した公開鍵を.ssh/authorized_keysに追記する。
# mkdir .ssh
# chmod 700 .ssh
# cat id_rsa.pub >> .ssh/authorized_keys
# rm id_rsa.pub
sshd設定変更とサービスの再起動
接続先のsshd_configを一部修正する。
# vi /etc/ssh/sshd_config
公開鍵認証に関する一か所だけ変更する。実際には先頭に#がついてるのを外すだけ。
PubkeyAuthentication yes
書き換えたら、サービスを再起動する。
# systemctl restart sshd
これで、接続元Linuxから接続先Linuxへのsshアクセスの際に、パスワードを聞かれずに接続できる。
#3. 接続先設定:VMware ESXi編
次に、VMware ESXi 6.7 update 3の場合の設定。
ESXiのsshdサービスの有効化
ESXiのsshdサービスはデフォルトで無効化されているので、これを有効化する。
- ブラウザを開き、対象のESXiにアクセスする。
- ホスト>管理>サービスを開く。
- TSM-SSHを選択し、アクションをクリック。
- ポリシーを選択し、
ホストと連動して起動および停止します
を選ぶ。 - TSM-SSHを選択したままにして、
起動
ボタンをクリックする。
これでsshdサービスは立ち上がり、次回以降ESXiを再起動した際もsshdサービスが上がってくる。
公開鍵の配布
接続元で作った公開鍵を接続先ESXiに渡す。ここでもscpで渡す。
sh:接続元で実行
# scp /root/.ssh/id_rsa.pub root@192.168.10.200:/
接続先のESXiにrootでsshログインして、受け渡した公開鍵を/etc/ssh/keys-root/authorized_keysに追記する。
~] cat id_rsa.pub >> /etc/ssh/keys-root/authorized_keys
ESXiはサービスの再起動は必要ない。これで終わり。
#4. 接続先設定:Windows 10 Pro
##機能の追加
Windows 10 バージョン1803以降であれば、sshdサービスを追加できる。追加方法は以下の通り。
- スタートメニューを右クリック>
設定
をクリック。 - Windowsの設定>
アプリ
をクリック。 - アプリと機能にある
オプション機能
をクリック。 -
機能の追加
をクリック。 -
OpenSSHサーバー
を選択し、インストール
ボタンが表示されるのでクリック。 - 画面右上の×ボタンで閉じる。
##Windows 10 Proのsshdサービスの有効化
インストールしただけではサービスが有効化されていないので、以下の方法で有効化する。
- 検索ボックスに「サービス」と入力して検索。
サービス
画面を開く。 - サービス名:
OpenSSH SSH Server
を探し、プロパティを開く。 - スタートアップの種類:
自動
を選択し、適用ボタンとOKボタンをクリック。
##公開鍵の配布
接続元で作った公開鍵をこれまたscpを使って接続先のWindows 10に渡す。
なおWindows 10上のユーザー名はTechとする。
# scp /root/.ssh/id_rsa.pub Tech@192.168.10.201:/
これでWindows 10に公開鍵がコピーできたので、今度はWindows 10側で操作する。
PowerShellを開き、受取った公開鍵をユーザーのホームは以下にある.ssh/authorized_keys
に書き込む。
> mkdir .ssh
> cat C:\id_rsa.pub >> .ssh/authorized_keys
##sshdサービスの設定変更とサービスの再起動
設定ファイルは、C:\ProgramData\ssh\sshd_conf
。最初、どこにあるか探してしまった。。。
このファイルの中で、1か所コメントを外して、2か所コメント化する。
具体的には公開鍵認証を有効化する設定と、AuthorizedKeyのファイルはローカルの配下にあるものだけを使う設定。
#PubkeyAuthentication yes
(省略)
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
↓
PubkeyAuthentication yes
(省略)
#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
この後、sshdサービスを再起動する。
これでWindowsにもパスワードなしでssh接続ができるようになった。
#参考にしたサイト
https://qiita.com/Tanaaaaan/items/50c3f0ddc15c40b750d2
https://sig9.hatenablog.com/entry/2015/05/27/185218
http://ttm.jimba.ddo.jp/adiary.cgi/teraterm/0147
https://www.atmarkit.co.jp/ait/articles/1903/28/news005.html