この記事内では、SSHを利用するユーザのノートパソコンなどをローカル、SSHで接続する先のサーバなどをリモートと呼称しています。
厳密にはSSHのクライアントなどと呼ぶのでしょうが、イメージがしやすいようにこの呼称にしています。
要約
詳細な説明は記事の先を確認してください。IPアドレスやキーの名前は各自のものに読み替えてください。
cd ~/.ssh
ssh-keygen -f key_test
scp ./key_test.pub リモートのユーザ名@リモートのアドレス:
ローカルで~/.ssh/config
を編集
Host TestServer
HostName リモートのアドレス
IdentityFile ~/.ssh/key_test
User リモートのユーザ名
初めて場合のみ
cd ~
mkdir .ssh
chmod 700 .ssh
cd ~/.ssh
touch authorized_keys
chmod 600 authorized_keys
初めての場合と追加の場合どちらも
cd ~
cat key_test.pub >> ~/.ssh/authorized_keys
rm key_test.pub
背景
リモートにあるサーバなどにSSHでアクセスする際、認証方法としてパスワードによる認証と公開鍵による認証があります。今まで、研究室の実験用のサーバや個人利用のサーバを利用するにあたって、高セキュリティが求められている訳ではなかったため、設定が簡易だったパスワード認証を主に使ってSSHを利用して来ました。ですがこの間、各サーバで公開鍵認証を使えるように設定したので、この機にその方法をまとめておきます。
動機
パスワード認証から公開鍵認証に移行する動機として、もちろんセキュリティの向上もありますが、一番はめんどくさい操作を無くしたいというのがありました。
というのも、パスワード認証の場合、当たり前ですが毎回パスワードを手作業で入力する必要があります。このパスワード入力の繰り返し作業が面倒でした。
一方、公開鍵認証であれば、設定をしておけばSSH接続時の内部処理でローカルの秘密鍵を使った認証をしてくれるため、毎回パスワードを入力するというような操作をせずに済みます。これが楽で嬉しいなと思っていました。
手順
ローカル環境で認証鍵のキーペアを生成する
公開鍵認証に使用するキーペアは、ホームディレクトリの下の.ssh
フォルダに置かれることが一般的かと思います。.ssh
フォルダがない場合は、先にmkdir ~/.ssh
などでフォルダを作成しておいてください。
今回は説明のため、-f
オプションを使って生成されるキーペアのファイル名を指定しました。
途中、パスフレーズを聞かれるかと思いますが、特に必要がなければ何も入力せずにエンターを2度押して進めましょう。
cd ~/.ssh
ssh-keygen -f key_test
これでkey_test
とkey_test.pub
という2つのファイルができたかと思います。このうちkey_test.pub
の方が公開鍵で、これからリモートに持ってくものになります。
~/.ssh
の~
はホームディレクトリの意味で、WindowsならC:¥Users¥ユーザ名
、Macなら/Users/ユーザ名
、Ubuntuなどでは/home/ユーザ名
のパスに対応します。
ターミナルやPowerShellでcd ~
のように実行すると、このホームディレクトリに移動できます。
リモート先に公開鍵をアップロードする
生成した公開鍵をリモートにアップロードします。ファイルの転送にはscp
コマンドを利用します。ssh-copy-id
というコマンドをインストールして利用する方法もあるようですが、Windowsのデフォルトでは使えないので、ここは基本のLinuxのコマンドのみで進めたいと思います。
cd ~/.ssh
scp ./key_test.pub リモートのユーザ名@リモートのアドレス:
例)
scp ./key_test.pub hoge@192.168.0.1:
scpコマンドの最後のコロン:
を見落とさないようにお気をつけください。
これで、リモート先のhogeユーザのホームディレクトリに、先ほど生成した公開鍵がアップロードされました。ローカルの公開鍵key_test.pub
は消してしまっても構いません。
リモート先で公開鍵を認証用に設定する
次にリモート環境で公開鍵を認証用に設定します。リモートに今までのパスワード認証などで接続し、ターミナルで以下を進めます。
リモート先に初めて公開鍵の設定をする場合は以下のコマンドを実行します。ホームディレクトリに.ssh
フォルダを作り、その中にauthorized_keys
というファイルを作成しています。これらは適切なパーミッションが設定されている必要があるので、それぞれchmod
コマンドで変更しています。
cd ~
mkdir .ssh
chmod 700 .ssh
cd ~/.ssh
touch authorized_keys
chmod 600 authorized_keys
そして、公開鍵の新規登録あるいは追加の場合のどちらにも共通する操作です。以下のコマンドで公開鍵を~/.ssh/authorized_keys
のファイルに公開鍵を書き込みます。
このauthorized_keys
ファイル内に書かれている公開鍵が、今後、認証で利用される鍵になります。複数の鍵を登録できるので、追記のリダイレクト(>>
)で書き込んでいます。
cd ~
cat key_test.pub >> ~/.ssh/authorized_keys
rm key_test.pub
ローカルで公開鍵認証を利用するように設定する
最後に、ローカルでSSH接続時に公開鍵認証を利用するように設定します。特に今回はキーペアのファイル名を変更しているため、どの鍵を使用するかを設定しておかないといけません。
~/.ssh
フォルダにまだconfig
ファイルがなければ作成します。
cd ~/.ssh
touch config
そして、config内に以下のように設定を記述します。
Host 接続先のエイリアス(任意の名前)
HostName リモートのアドレス
IdentityFile 秘密鍵のパス
User リモートのユーザ名
例)
Host TestServer
HostName 192.168.0.1
IdentityFile ~/.ssh/key_test
User hoge
これで、ローカルでssh TestServer
のように実行し、パスワードを入力せずにログインができるようになっていればOKです。
参考