sshの設定について

リモートホストへの ssh 接続に関する設定について、まとめました。
クラウドの仮想マシンなどでは、セキュリティの観点から公開鍵認証を用いるべきということで、パスワードでの認証については書いていません。



sshの設定ファイル等の所在

設定ファイル等は、通常、ユーザのホームディレクトリ直下の .ssh という隠しディレクトリに配置します。


.ssh 配下の主なファイル

  • 接続される側
    authorized_keys:
    接続する側が持っている秘密鍵に対応した公開鍵を記述します。
    ログインされるユーザの .ssh に正しく記述された authorized_keys がなければ、認証が失敗して、接続できません。

  • 接続する側
    config:
    sshコマンドが参照する接続先情報やその他の設定を記述します。
    configには色々な設定を書くことができますが、sshコマンド実行時にオプションで指定している事項については、コマンドのオプションが優先されます。逆に言うと、オプションで明に指定されたもの以外は、configの内容が適用されます。

    〇〇.pem:
    認証に使う秘密鍵(ファイル名は任意)です。

    known_hosts:
    既知の接続先のフィンガープリントを記述します。
    初回接続時に自動的に書き込まれていきますが、あらかじめ自分で書いておくこともできます。


ssh接続の仕方(configなしver)

ssh -i <秘密鍵ファイルのパス/ファイル名> <ユーザ名>@<接続先IPアドレス>

使う鍵ファイルを指定して、どのIPの、どのユーザにログインするのかを書きます。
至って普通の書き方ですが、毎回書くのは少々メンドウかもしれません。


ssh接続の仕方(configありver)

ssh <configファイルで設定した接続先の名前>

以上です。
接続先の情報などを全て config に書いておくことで、ssh接続のたびに指定する必要がなくなります。
正しく config に書けていれば、Tab補完もできて便利です。


config の書き方

Host <接続先の名前(任意設定可能)>
        HostName <接続先IPアドレス>
        User <ユーザ名>
        Port 22
        IdentityFile <秘密鍵ファイルのパス/ファイル名>

上記のように、コマンド実行時に指定していた情報を書きます。
接続先には任意の名前を付けることができます。


コマンド実行時に、config に書かれているのとは異なる指定が与えられた場合は、そちらが優先されるため、今回に限っては別のユーザにログインしたい、といった場合は以下のように書くことができます。

ssh <configファイルで設定したのとは別のユーザ名>@<configファイルで設定した接続先の名前>


通常、config は .ssh 直下のものが使われますが、別のファイルを用意して、そちらを参照させることもできます。

ssh -F <configファイルのパス/ファイル名> <configファイルで設定した接続先の名前>


ssh接続を含む処理の自動化

ssh接続を自動化する場合にネックになるのが、初回接続時の確認です。
あらかじめ初回接続を済ませておけばいいのですが、コンテナで処理を実行するときなど、そうはいかない場合もあります。

sshコマンドのオプションでその辺りの確認を無視することができ、その設定も config に書くことができます。

        StrictHostKeyChecking no
        UserKnownHostsFile=/dev/null

上記を追加することで、初回接続時の確認を行わず、フィンガープリントの書き込みも行わない、ということになります。

なお、初回接続時の確認を行わないようにしても、一時的に既知の接続先として記録する旨の警告が表示されます。

そのメッセージがログに残ったりすることを回避するには、あらかじめ接続先のフィンガープリントを known_hosts に書いておくという手段があります。(フィンガープリントは接続先の情報なので、接続元が異なっていても同一です。)

通常は known_hosts も .ssh 直下のものが参照されますが、config にて別のファイルを見るように指定することも可能です。

        UserKnownHostsFile=<known_hostsファイルのパス/ファイル名>



この記事が気に入ったらサポートをしてみませんか?