はじめに
今となってはこの辺で困る事は無いのですが、初めてLinuxを触った時に基本的な事がわからなくて困ったので同じように困る人向けに書いておきます。
誰かの役に立てれば嬉しいです!
高度な事を書いているのではなく、SSH周りで基本的に使われる事を書いてます。
※なお、クライアントはMacを想定してます。
SSHって・・・?
Secure Shell
の略称であり、コマンドです。
通称はSSH
やSSHコマンド
などと呼ばれます。
SSHはWindowsでいうリモートディスクトップ
です。
自分のPCから他のPC(主にサーバー)へ接続して、他のPCを操作するための接続手段です。
Windowsのリモートディスクトップ
で接続する場合はGUI(Graphical User Interface
)という画像などを使って視覚的に操作しやすい方法で操作します。
一方で、SSHで接続する場合はCUI(command line interface
)という黒背景に白文字という質素画面で操作します。
視覚的に優れているGUI
の方が良さそうですが、実際はCUI
の方が操作が早くマシンスペックも使わないためなれると楽になります。
(そもそもSSHで接続する先のPCはGUIをサポートしていない場合がほとんど。)
普通のSSHコマンド
基本中の基本のコマンド
$ ssh user@host_name
これでSSH接続されます。
鍵付きのSSHコマンド
鍵をどこかに置いてから以下のコマンドを実行します。
$ ssh -i ~/.ssh/鍵ファイル user@host_name
~
はホームディレクトリを指します。
通常~/.ssh
に鍵を保管するのが普通ですが、別に他の場所に保管していても構いません。
~/.ssh/id_rsa
に鍵を置いている場合は-i ~/.ssh/鍵ファイル
で鍵を指定しなくてもこの鍵が自動的に使われます。
鍵ちょうだい
といわれた場合の対応
昔、「鍵ちょうだい」と言われて半日くらい固まっていた人が居ました。
知っていれば大した事はないのですが、知らないとフリーズしますw
以下のコマンドで鍵を作成できます。
$ ssh-keygen -t rsa
実施すると以下の確認をされます。
Enter file in which to save the key (~/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
...
鍵の保管場所と鍵自体にパスフレーズを付けるか確認されます。
セキュリティを考えるとパスフレーズをつけた方がいいですが、なんらかのシステムに鍵を使わせる場合はパスフレーズを無しにした方が都合が良いこともあります。
(パスフレーズを忘れると、その鍵は使えなくなります。)
ここでできたid_rsa.pub
を「鍵ちょうだい」と言う人に渡せばOKです。
また、できた鍵は自分以外の人が使えないようにする必要があります。
$ chmod 600 id_rsa
or
$ chmod 400 id_rsa
で鍵にパーミッションを付けましょう。
Windowsの場合
Puttyなどを使うことで鍵を作成できますので、必要に応じて調べてください。
Windowsで作った鍵(PPK)をMacで使う場合は変換する必要がありますので、ご注意ください。
鍵って何?
ssh-keygen
で鍵を作成するとid_rsa
とid_rsa.pub
の二つが出来上がります。
(ファイル名を指定した場合はこの限りではない。)
id_rsa
は秘密鍵
と呼ばれ、自分以外の人には渡さないようにしてください。
id_rsa.pub
は公開鍵
と呼ばれ、リモート操作をしたいPCに設置してもらう必要があります。
イメージとしては、秘密鍵
は自分の鍵で公開鍵
は自分の鍵を型を取ったものになります。
その型を他の家に設置してもらうことで、自分の鍵を使って開けれるようにするイメージです。
なので、開けたい家全てに対して公開鍵
を設定してもらえば一つの秘密鍵
で様々な家に入れるようになります。
このように秘密鍵
と公開鍵
はペアで扱います。
※鍵を複数作っても良いのですが、管理が面倒になるので一つの鍵を使って公開鍵をあちらこちらに設定してもらう方が良いです。
(ただし、家で使っている秘密鍵
を職場でも使うと言う事は極力やめましょう。わからないうちは秘密鍵
はPC毎に作った方が良いです。)
公開鍵から秘密鍵を作れるの?
秘密鍵
があれば公開鍵
は作れます。
公開鍵
から秘密鍵
を作れてしまうと、秘密鍵
の意味がなくなってしまいます。なので、公開鍵
から秘密鍵
を作る事はできません。
(アルゴリズムが公開されているため、理論上は鍵を作り直す事はできますが・・・膨大な時間がかかるため実質作れ無い
と同義です。)
なお、公開鍵を作成する場合は以下の方法で作成できます。(やった事無いけど・・・)
$ ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
公開鍵はどうやって設置するの?
使い側からすると関係無い事ですが、設置するPCのユーザーホームにて以下のコマンドを実施すると設置されます。
$ cd /home/ユーザー/.ssh/
# authorized_keysが無い場合
$ touch authorized_keys
$ chmod 600 authorized_keys
$ cat ~/id_rsa.pub >> authorized_keys
# 不要になったので消す。
$ rm ~/id_rsa.pub
この対応は設置するPCに入れるユーザーに行ってもらう必要があります。
ホスト名が長いんだけど・・・
ホスト名が長いと毎回以下のコマンドを打たなければなりません。
$ ssh -i ~/.ssh/hogehogehoe_id_rsa hoge_user@hoge.hoasdaedhoasda.com
こんなのいや!
と言う方は~/.ssh/config
に記載できます。
(普通はここに書くと思います・・・w)
Host hoge
HostName hoge.hoasdaedhoasda.com
User hoge_user
IdentityFile ~/.ssh/hogehogehoe_id_rsa
と記載しておくと
$ ssh hoge
でアクセスできるようになります。
chef
を使う場合はこの手法がほぼ必須になります。
覚えておきましょう!
github
ちなみにgithubを使う場合は以下のようになります。
ほぼコピペで使えるはずです。
Host github
HostName github.com
IdentityFile ~/.ssh/id_rsa
User git
パスワード付きのSSH
最近パスワード認証なんて中々ないけど、該当環境に当たってしまったのでメモ。
#!/usr/bin/expect
set timeout 2
spawn ssh user@host_name
expect "Password: "
send "パスワード\n"
interact
上記のように設定して以下のコマンドでSSH接続する。
$ connect.sh
その他、知ってると良い事
SSHと併用して以下の2つコマンドを覚えておくと便利です。
SCP
ファイルやフォルダの転送ができます。
rsync
フォルダの同期ができます。
大量のファイルを転送する時はSCPよりも早い上に、途中で中断して再開する事もできます。
昔はrsync
でデプロイをしていた時期もありましたが、事故が多いので小規模サイト以外ではやらない方が無難です。
まとめ
多分、これだけ知ってればプログラマーがSSHで困る事は無いはずです。
もし困っても調べればすぐにわかるレベルだと思います。
インフラ担当にとっては当たり前の事でも、プログラマーはこの部分が弱い人が多いので覚えておくと良いです。
追記
プログラマーが知っておくと良いLinuxコマンドも書きました。
よければみてください。