ssh と mosh についてのメモ
ssh を最近まともに扱えるようになったけど、どうせ設定の方法とか忘れるのでメモ。
まず、ssh にはパスワード認証と鍵認証の 2 種類の認証方法がある。
今回はパスワード認証ができることを前提にして、鍵認証をするためのやり方を記す。
一応、パスワード認証方式で ssh 接続をするコマンドは
$ ssh [ホスト名] -l [ユーザー名] -p [ポート番号]
または
$ ssh [ユーザー名]@[ホスト名] -p [ポート番号]
でいい。
ちなみにポート番号は普通 22 番が使われていて、ポート番号を指定しなかった場合はデフォルトで 22 番が指定されるので基本的に指定することはない。
次にこの状態から鍵認証をできるようにする。
最初はローカルで
$ ssh-keygen -t rsa
とすると
Generating public/private rsa key pair. Enter file in which to save the key (/home/cat/.ssh/id_rsa):
と言われる。
これに入力せずに Enter を押すと ~/.ssh/ 以下に id_rsa と id_rsa.pub というファイルが生成される。
例えばここで hoge と入力すると id_rsa の部分が hoge に置き換わったファイルができるだけで、名前は後からでも変更できるので別にいま決めても後でもいい。
名前は基本的に何でもいいのでわかりやすいのをつけるといい。
で、id_rsa.pub の方が公開鍵、id_rsa の方が秘密鍵、と言われる。
秘密鍵を接続元の ~/.ssh/ 以下に、公開鍵を接続先の ~/.ssh/ 以下に置く。
公開鍵を接続先に送る方法だが、USBメモリ等を使って物理的に送るか、scp や sftp を使う方法がある。
今回はすでに ssh 接続ができる前提なので scp を使う。
scp は ssh を使った cp コマンドのようなもので、ググればわかるとは思うが一応メモっとく。
$ scp [コピーしたいファイル] [接続先のユーザー名]@[接続先のホスト名]:[ファイルを起きたい場所]
でいい。基本的には cp コマンドと使い方は同じ。
でもって公開鍵を接続先の ~/.ssh/ 以下に置けばとりあえず完了。
$ ssh [ホスト名] -l [ユーザー名] -i [秘密鍵]
これでパスワードを毎回入力する必要がなくなる。
さらにもうひと押し。
接続元の ~/.ssh/ 以下に config というファイルをなければ作成して、
Host [わかりやすい名前] User [ユーザー名] Port 22 IdentityFile ~/.ssh/[秘密鍵] TCPKeepAlive yes
と入力。
使用するポートが 22 番でなければ変更する。
これで
$ ssh [わかりやすい名前]
だけでつながるようになる。
ちなみに、接続先のサーバーを他の誰かが管理している場合、公開鍵の名前が指定されていることがある。
これを確認するには /etc/ssh/sshd_config を開いて
#PubkeyAuthentication yes #AuthorizedKeysFile .ssh/authorized_keys
を確認する。
上の例のように # でコメントアウトされていれば何でも良いが、
PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/hogepiyo_pubkey
となっていた場合は公開鍵を ~/.ssh/hogepiyo_pubkey と置かなければならない。
他にもこの sshd_config で root でのログイン禁止やパスワード認証の禁止等の設定もできるがここでは割愛する。
とまあ、だらだら書いてきたがこれに目を通せばひとまず困ることはないと思う。
もしこの通りにやっても接続できないなら
- ネットにつながってない
- 鍵が壊れている
- 鍵の対応があってない
- サーバーが落ちてる
などの原因が考えられる。
では、最後におまけ程度に mosh の使い方を。
$ mosh --ssh "ssh -i ~/.ssh/[秘密鍵] -l [ユーザー名]" [ホスト名]
これだけ。
シェルの設定ファイルに
alias hogehogemosh="mosh --ssh "ssh -i ~/.ssh/[秘密鍵] -l [ユーザー名]" [ホスト名]"
とかしとくといいかもしれない。