233
259

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

プログラマーがSSH周りで知っておくと良いこと

Last updated at Posted at 2015-11-26

はじめに

今となってはこの辺で困る事は無いのですが、初めてLinuxを触った時に基本的な事がわからなくて困ったので同じように困る人向けに書いておきます。
誰かの役に立てれば嬉しいです!

高度な事を書いているのではなく、SSH周りで基本的に使われる事を書いてます。

※なお、クライアントはMacを想定してます。

SSHって・・・?

Secure Shellの略称であり、コマンドです。
通称はSSHSSHコマンドなどと呼ばれます。

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_rsaid_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)

~/.ssh/config
Host hoge
  HostName hoge.hoasdaedhoasda.com
  User hoge_user
  IdentityFile ~/.ssh/hogehogehoe_id_rsa

と記載しておくと

$ ssh hoge

でアクセスできるようになります。
chefを使う場合はこの手法がほぼ必須になります。
覚えておきましょう!

github

ちなみにgithubを使う場合は以下のようになります。
ほぼコピペで使えるはずです。

~/.ssh/config
Host github
  HostName github.com
  IdentityFile ~/.ssh/id_rsa
  User git

パスワード付きのSSH

最近パスワード認証なんて中々ないけど、該当環境に当たってしまったのでメモ。

connect.sh
#!/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コマンドも書きました。
よければみてください。

233
259
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
233
259

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?