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ファイルのパス/ファイル名>
この記事が気に入ったらサポートをしてみませんか?