heteml(ヘテムル)は、SSH接続できるレンタルサーバです。ヘテムルのコントロールパネルでSSHアカウントを設定した直後は、パスワード認証だけです。そこで、公開鍵認証でもSSH接続できるようにします。
公開鍵認証を設定したら、パスワード認証はどうなるのかな?
どちらも使えるから安心して
パスワード認証の確認
ヘテムルのマニュアルを参考にしながら、パスワード認証でSSH接続できることを確認してください。ヘテムルIDを 1234example、SSHサーバが 1234example-heteml.net なら、次のように実行します。
SSHパスワードを入力します。
$ ssh -p 2222 1234example@1234example-heteml.net
1234example@1234example-heteml.net's password:
ヘテムルIDの先頭に数字は使えないよ
説明のための架空のヘテムルIDよ
Windows 10
Windows 10では、コマンドプロンプトでsshやssh-keygenを使えるようになりました。
以前はどうしてたの?
PuTTYとPuTTYgenを使ってたわ
PuTTYはどう読むの?
公式には「パティ」らしいけど、
「プッティ」で通じることが多いわね。
キーペア作成
キーペアのファイル数が少なければ %HOME%\.ssh\ 直下に作成してもいいですし、キーペアのファイル数が多ければ、%HOME%\.ssh\ にサブディレクトリを作って、整理してもいいです。
ここでは、id_rsa_heteml、id_rsa_heteml.pub を作成します。
途中で、パスフレーズを入力してください。パスフレーズはパスワードマネージャーなどで管理してください。
> cd
> mkdir .ssh
> cd .ssh
> ssh-keygen -t rsa -f id_rsa_heteml
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
> dir /B
id_rsa_heteml
id_rsa_heteml.pub
Code language: Bash (bash)
pub付きが、公開鍵
pub無しが、秘密鍵
ヘテムルに公開鍵をコピー
Windows 10のコマンドプロンプトを起動します。
scpコマンドで、公開鍵をヘテムル側の ~/.ssh/authorized_keysにコピーします。
まず、ヘテムルにパスワード認証でSSHログインして、~/.ssh/authorized_keys を作成します。
> ssh 1234example@ssh-1234example.heteml.net
1234example@1234example-heteml.net's password:
$
Code language: Bash (bash)
.sshディレクトリを作成して、ファイルモードを 700 に設定します。ls -al して、「drwx---r-x」ではなく、「drwx------」 であることを確認します。
$ mkdir .ssh
$ chmod 700 .ssh
$ ls -al
(省略)
drwx------ 2 xxxxx HetemlUser 4096 2020-05-07 09:42 .ssh
(省略)
Code language: Bash (bash)
.sshディレクトリにcdして、authorized_keysファイルを作ります。ls -l して、「-rw----r--」ではなく、「-rw-------」であることを確認します。
$ cd .ssh
$ touch authorized_keys
$ chmod 600 authorized_keys
$ ls -l
-rw------- 1 xxxxxx HetemlUser 0 2020-05-06 17:35 authorized_keys
Code language: Bash (bash)
ヘテムルからlogoutします。
$ logout
>
Code language: Bash (bash)
Windows 10のコマンドプロンプトに戻ってきました。
scpで、id_rsa_heteml.pub を ヘテムル側の .ssh/authorized_keys にコピーします。パスワード認証のパスワードを入力します。
> scp id_rsa_heteml.pub 1234example@ssh-1234example.heteml.net:~/.ssh/authorized_keys
1234example@1234example-heteml.net's password:
Code language: Bash (bash)
公開鍵認証でSSHログインできるはずです。-i オプションには「秘密鍵(pub無し)」を指定します。秘密鍵のパスフレーズを入力してください。
$ ssh -i id_rsa_heteml 1234example@ssh-1234example.heteml.net
Enter passphrase for key 'C:\Users\aoki.makoto\.ssh\heteml':
Code language: Bash (bash)
.ssh/configに登録
SSH接続する機会が多ければ、さきほどのコマンドを入力するのは面倒です。
めったにSSH接続しないのなら、さきほどのコマンドを忘れています。
そこで、%HOME%\.ssh\configに登録しておきます。IdentityFileは、C:\から始まる絶対パスを設定してください。
Host heteml
# 2020-04-06
HostName ssh-1234example.heteml.net
User 1234example
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile C:\Users\aoki.makoto\.ssh\id_rsa_heteml
IdentitiesOnly yes
LogLevel FATAL
Code language: plaintext (plaintext)
%HOME%\.ssh\configに登録しておくと、SSH接続でHost名を指定するだけでよくなります。Host名を忘れたら、%HOME%\.ssh\config を見ればわかります。
$ ssh heteml
Enter passphrase for key 'C:\Users\aoki.makoto\.ssh\id_rsa_heteml':
Code language: Bash (bash)
.ssh/config のことも忘れそうだな
ネットで調べているうちに思い出せるといいわね
ssh-agent
ssh-addを使う前に、ssh-agentを起動しておく必要があります。サービスとして自動起動するので、PC再起動後もssh-agentサービスが自動起動しています。手作業でssh-agentを起動する必要はありません。
管理者モードでコマンドプロンプトを起動してください。
次のコマンドで、ssh-agentを起動してください。
> sc config ssh-agent start=auto
> sc start ssh-agent
管理者モードのコマンドプロンプトを閉じてください。
これまで作業していた通常モードのコマンドプロンプトはいったん閉じて、あらたに通常モードのコマンドプロンプトを起動してください。
ssh-add
パスフレーズの入力も面倒なんだけど
SSHログインするときは、その日のうちに何回もSSHログインするものです。すると、毎回、秘密鍵のパスフレーズを入力するのも面倒になります。
そこで、ssh-addコマンドで、秘密鍵とパスフレーズを登録しておきます。以後、パスフレーズを入力することなく、SSHログインできます。
$ ssh-add %HOME%\.ssh\id_rsa_heteml
Enter passphrase for C:\Users\aoki.makoto\.ssh\id_rsa_heteml:
Code language: Bash (bash)
もし次のようなエラーが表示されたら、ssh-agentが起動していません。ssh-agentを起動してください。
$ ssh-add %HOME%\.ssh\id_rsa_heteml
Could not open a connection to your authentication agent.
Code language: Bash (bash)
%HOME%.ssh\configを使わない方法で、sshログインしてください。秘密鍵のパスフレーズを聞かれません。
$ ssh -p 2222 1234example@1234example-heteml.net
Code language: Bash (bash)
残念ながら、%HOME%\.ssh\config に登録したHost名でSSH接続すると、パスフレーズを聞かれてしまいます。
$ ssh heteml
Enter passphrase for key 'C:\Users\aoki.makoto\.ssh\id_rsa_heteml':
Code language: Bash (bash)
これができたらいいのにね
パスワード認証でログインする場合は、ssh-add -Dで、ssh-addした秘密鍵とパスフレーズを削除してから、sshログインします。
$ ssh-add -D
$ ssh -p 2222 1234example@1234example-heteml.net
1234example@1234example-heteml.net's password:
Mac OS X
キーペア作成
キーペアのファイル数が少なければ ~/.ssh/ 直下に作成してもいいですし、キーペアのファイル数が多ければ、~/.ssh/ にサブディレクトリを作って、整理してもいいです。
ここでは、id_rsa_heteml、id_rsa_heteml.pub を作成します。
途中で、パスフレーズを入力してください。パスフレーズはパスワードマネージャーなどで管理してください。
$ cd ~
$ mkdir .ssh
$ chmod 700 .ssh
$ cd .ssh
$ ssh-keygen -t rsa -f id_rsa_heteml
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
$ ls
id_rsa_heteml id_rsa_heteml.pub
Code language: Bash (bash)
pub付きが、公開鍵
pub無しが、秘密鍵
ヘテムルに公開鍵をコピー
ssh-copy-idコマンドで、公開鍵をヘテムル側の ~/.ssh/authorized_keysに追加します。
-i オプションには「公開鍵(pub付き)」を指定します。
$ ssh-copy-id -i id_rsa_heteml.pub -p 2222 1234example@ssh-1234example.heteml.net
Code language: Bash (bash)
公開鍵認証でSSHログインできるはずです。
-i オプションには「秘密鍵(pub無し)」を指定します。
秘密鍵のパスフレーズを入力してください。
$ ssh -i ~/.ssh/id_rsa_heteml -p 2222 1234example@ssh-1234example.heteml.net
Enter passphrase for key '/Users/aoki.makoto/.ssh/id_rsa_heteml':
Code language: Bash (bash)
.ssh/configに登録
SSH接続する機会が多ければ、さきほどのコマンドを入力するのは面倒です。
めったにSSH接続しないのなら、さきほどのコマンドを忘れています。
そこで、~/.ssh/configに登録しておきます。
Host heteml
# 2020-04-06
HostName ssh-1234example.heteml.net
User 1234example
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile ~/.ssh/id_rsa_heteml
IdentitiesOnly yes
LogLevel FATAL
UseKeyChain yes
AddKeysToAgent yes
Code language: plaintext (plaintext)
~/.ssh/configに登録しておくと、SSH接続でHost名を指定するだけでよくなります。Host名を忘れたら、~/.ssh/config を見ればわかります。
> ssh heteml
Enter passphrase for key '/Users/aoki.makoto/.ssh/id_rsa_heteml':
Code language: Bash (bash)
.ssh/config のことも忘れそうだな
ネットで調べているうちに思い出せるといいわね
ssh-add
パスフレーズの入力も面倒なんだけど
SSHログインするときは、その日のうちに何回もSSHログインするものです。すると、毎回、秘密鍵のパスフレーズを入力するのも面倒になります。
そこで、ssh-addコマンドで、秘密鍵とパスフレーズを登録しておきます。以後、パスフレーズを入力することなく、SSHログインできます。
-K オプションをつけると、キーチェーンにパスフレーズも記憶されるので、PC再起動後に ssh-add する必要がありません。
$ ssh-add -K ~/.ssh/id_rsa_heteml
Enter passphrase for /Users/aoki.makoto/.ssh/id_rsa_heteml:
Code language: Bash (bash)
もし次のようなエラーが表示されたら、ssh-agentが起動していません。ssh-agentを起動してください。
$ ssh-add -K ~/.ssh/id_rsa_heteml
Could not open a connection to your authentication agent.
$ eval $(ssh-agent -s)
Agent pid 13244
Code language: Bash (bash)
sshログインしてください。秘密鍵のパスフレーズを聞かれません。
$ ssh heteml
Code language: Bash (bash)
パスワード認証でもsshログインできます。秘密鍵のパスフレーズではなく、ヘテムルのコントロールパネルで設定したSSHパスワードです。
$ ssh -p 2222 1234example@1234example-heteml.net
1234example@1234example-heteml.net's password:
Ubuntu 18.04
キーペア作成
キーペアのファイル数が少なければ ~/.ssh/ 直下に作成してもいいですし、キーペアのファイル数が多ければ、~/.ssh/ にサブディレクトリを作って、整理してもいいです。
ここでは、id_rsa_heteml、id_rsa_heteml.pub を作成します。
途中で、パスフレーズを入力してください。パスフレーズはパスワードマネージャーなどで管理してください。
$ cd ~
$ mkdir .ssh
$ chmod 700 .ssh
$ cd .ssh
$ ssh-keygen -t rsa -f id_rsa_heteml
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
$ ls
id_rsa_heteml id_rsa_heteml.pub
Code language: Bash (bash)
pub付きが、公開鍵
pub無しが、秘密鍵
ヘテムルに公開鍵をコピー
ssh-copy-idコマンドで、公開鍵をヘテムル側の ~/.ssh/authorized_keysに追加します。
-i オプションには「公開鍵(pub付き)」を指定します。
$ ssh-copy-id -i id_rsa_heteml.pub -p 2222 1234example@ssh-1234example.heteml.net
Code language: Bash (bash)
公開鍵認証でSSHログインできるはずです。
-i オプションには「秘密鍵(pub無し)」を指定します。
秘密鍵のパスフレーズを入力してください。
$ ssh -i ~/.ssh/id_rsa_heteml -p 2222 1234example@ssh-1234example.heteml.net
Enter passphrase for key '/home/aoki/.ssh/id_rsa_heteml':
Code language: Bash (bash)
.ssh/configに登録
SSH接続する機会が多ければ、さきほどのコマンドを入力するのは面倒です。
めったにSSH接続しないのなら、さきほどのコマンドを忘れています。
そこで、~/.ssh/configに登録しておきます。
Host heteml
# 2020-04-06
HostName ssh-1234example.heteml.net
User 1234example
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /home/aoki/.ssh/id_rsa_heteml
IdentitiesOnly yes
LogLevel FATAL
Code language: plaintext (plaintext)
~/.ssh/configに登録しておくと、SSH接続でHost名を指定するだけでよくなります。Host名を忘れたら、~/.ssh/config を見ればわかります。
$ ssh heteml
Enter passphrase for key '/home/aoki/.ssh/id_rsa_heteml':
Code language: Bash (bash)
.ssh/config のことも忘れそうだな
ネットで調べているうちに思い出せるといいわね
ssh-add
パスフレーズの入力も面倒なんだけど
SSHログインするときは、その日のうちに何回もSSHログインするものです。すると、毎回、秘密鍵のパスフレーズを入力するのも面倒になります。
そこで、ssh-addコマンドで、秘密鍵とパスフレーズを登録しておきます。以後、パスフレーズを入力することなく、SSHログインできます。
PC再起動後、sshログイン前に一度は、ssh-addする必要があります。
$ ssh-add ~/.ssh/id_rsa_heteml
Enter passphrase for /home/aoki/.ssh/id_rsa_heteml:
Code language: Bash (bash)
もし次のようなエラーが表示されたら、ssh-agentが起動していません。ssh-agentを起動してください。
$ ssh-add ~/.ssh/id_rsa_heteml
Could not open a connection to your authentication agent.
$ eval $(ssh-agent -s)
Agent pid 13244
Code language: Bash (bash)
sshログインしてください。秘密鍵のパスフレーズを聞かれません。
$ ssh heteml
Code language: Bash (bash)
パスワード認証でもsshログインできます。秘密鍵のパスフレーズではなく、ヘテムルのコントロールパネルで設定したSSHパスワードです。
$ ssh -p 2222 1234example@1234example-heteml.net
1234example@1234example-heteml.net's password: