ssh の話

リモート作業に使用する ssh の使い方をあらためてまとめてみた。

鍵の作成

鍵ファイルは公開鍵ファイルと、秘密鍵ファイルの二つが生成される。
公開鍵ファイルを他のサーバなどに登録し、秘密鍵ファイルは他の人に見られないようにしておく。

# ssh-keygen -t rsa -b 2048 -C "hoge@fuga.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_rsa): "保存場所の指定"
Enter passphrase (empty for no passphrase):  "パスフレーズの入力"
Enter same passphrase again:

 -t rsa、証明書に使用する暗号化方式の指定、だいたい rsa でいいんではないでしょうか。 楕円曲線暗号の ecdsa などもつかえる。


 -b 4096、暗号化のビット数、最低でも2048以上を指定しましょう。 8196 だと計算負荷があるけど、最近のマシンなら大丈夫でしょう


 -C、証明書につけるコメント、メールアドレスやサーバ名など必要に応じて


上記のコマンドで、通常は ~.ssh ディレクトリ以下に id_rsa と、id_rsa.pub が作成される。

パスフレーズについては入力しないというのもあり。 ssh を使った自動ログインを設定したいのなら、パスフレーズは入力しない。

パスフレーズを設定することにより、秘密鍵を盗まれても簡単には解読されないので安全になるが、不要という意見もある。

http://freak-da.hatenablog.com/entry/20100901/p1:SSH秘密鍵のパスフレーズは(つけるなら)11文字以上にしましょうねという話

個人的にはパスフレーズは設定して、ssh-agent(後述) を使用するほうがいいかなと思う。

鍵の確認

作成した証明書のビット数やコメントを確認するには ssh-keygen コマンドに -l オプションを付けて -f で公開鍵ファイルを指定する。

# ssh-keygen -lf id_rsa.pub
4096 SHA256:Z+3xx/WxWwxMxxxxxxxxxxxxxxxxxxxbMIug hoge@fuga.com

パスフレーズの変更

作成した証明書のパスフレーズを変更するには ssh-keygen に -p オプションを付ける。

# ssh-keygen -pf id_rsa
Enter old passphrase:"古いパスフレーズ"
Enter new passphrase (empty for no passphrase):"新しいパスフレーズ"
Enter same passphrase again:"新しいパスフレーズの再入力"
Your identification has been saved with the new passphrase.

鍵のコピー

作成した公開鍵、id_rsa.pub をリモートサーバにコピーする。

簡単なのは ssh-copy-id コマンドを使用する

# ssh-copy-id age.fuga.com
hoge@age's password:
Now try logging into the machine, with "ssh 'age'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

ログインしているマシンとアカウント名が違うなら、hoge@age.fuga.com で指定する。



よく使われているのは scp コマンドを使用する。

# scp ~/.ssh/id_rsa.pub hoge@age.fuga.com:
# ssh hoge@age.fuga.com
hoge@age's password:
Last login: Thu Feb 1 20:57:41 2017 from sage.fuga.com
$ mkdir .ssh
$ chmod 700 .ssh
$ cat id_rsa.pub >> .ssh/authorized_keys
$ chmod 700 .ssh/authorized_keys
$ rm id_rsa.pub

scp コマンドでコピーした場合には、.ssh ディレクトリがなればそれの作成や、authorized_keys ファイルへの追加などが必要になる。


これでリモートマシンに ssh でログインができるようになる。


sshd の設定

ssh の証明書ログインができるようになったら、証明書を使用しないログインを禁止しましょう。

/etc/sshd/sshd_config で sshd の設定をします。

PubkeyAuthentication yes # 公開鍵認証を有効にする
AuthorizedKeysFile   .ssh/authorized_keys # 公開鍵ファイルの場所
PasswordAuthentication no # パスワードログインの禁止

上記の変更をしたら、service sshd restart などで sshd の再起動をする。 念のため、現在のログインをそのままにして、新しく ssh ログインをして正常にログインできるか確認しましょう。

ssh config の設定

ssh でログインするときには、

# ssh hoge@age.fuga.com

としますが、~.ssh/config ファイルを設定しておくことで省略してログインすることができるようになる。

Host age
     HostName age.fuga.com
     User hoge
     IdentityFile ~.ssh/id_rsa # 標準の鍵ファイルなら必要ない

これで

# ssh age

でログインできるようになる。

ssh-agent の使用

秘密鍵にはパスフレーズを設定したほうがいいと思うが、それをすると毎回ログインするときにパスフレーズの入力が必要になり、面倒くさい。

ssh-agent を使用するとパスフレーズを覚えてくれるので毎回パスフレーズを入力する必要がなくなる。

まずは ssh-agent を起動。

# eval `ssh-agent`
Agent pid 25908

このコマンドを .bash_profile などに登録しておくとログイン時に自動的に実行される。


秘密鍵ファイルの登録。

# ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/hoge/.ssh/id_rsa:
Identity added: /home/hoge/.ssh/id_rsa (/home/hoge/.ssh/id_rsa)

これでログインしているシェルから抜けるまではパスフレーズを覚えていてくれる。

ssh-agent が覚えている鍵は ssh-add -l で表示できる。

# ssh-add -l                                                     *[~]
8192 SHA256:Z+3xx/WxWwxxxxxxxxxxxxxxxxxxxxxxxsPphbbMIug .ssh/id_rsa (RSA)
2048 SHA256:BPgh9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxuZ4 .ssh/id_rsa_nar (RSA)