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
鍵のコピー
作成した公開鍵、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)