1
1

この記事内では、SSHを利用するユーザのノートパソコンなどをローカル、SSHで接続する先のサーバなどをリモートと呼称しています。

厳密にはSSHのクライアントなどと呼ぶのでしょうが、イメージがしやすいようにこの呼称にしています。

要約

詳細な説明は記事の先を確認してください。IPアドレスやキーの名前は各自のものに読み替えてください。

ローカル
cd ~/.ssh
ssh-keygen -f key_test
scp ./key_test.pub リモートのユーザ名@リモートのアドレス:

ローカルで~/.ssh/configを編集

ローカルの~/.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_testkey_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内に以下のように設定を記述します。

ローカルの~/.ssh/config
Host 接続先のエイリアス(任意の名前)
    HostName リモートのアドレス
    IdentityFile 秘密鍵のパス
    User リモートのユーザ名

例)
Host TestServer
    HostName 192.168.0.1
    IdentityFile ~/.ssh/key_test
    User hoge

これで、ローカルでssh TestServerのように実行し、パスワードを入力せずにログインができるようになっていればOKです。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1