男もすなるsshといふものを、我もしてみむとて解説するなりこの広告は、90日以上更新していないブログに表示しています。2016-12-15男もすなるsshといふものを、我もしてみむとて解説するなりTweetこんにちは。エンジニアでインターンをしている村田です。最近寒くてベッドから起き上がるのがつらいです。最近デスクトップ環境をxubuntuにしたのですが使いやすくて感動してます。思ったことってありませんか?自分は結構多いです、この現象(笑)。学習していくとそれが当たり前になってしまうので「このサイトにわかりやすく書いてあるじゃん」と思うのですが、最初は難しく感じてしまうものなんですよね。今回は以前自分が概念を理解するまでに苦労してしまった「sshのしくみ」についてまとめていこうと思います。(「わかりやすい」というのは個人的な感想です。日本語にすると安全なシェルということです。「ssh」っていつ使うの?「sshとは安全なシェルのことです!」と言われてもそれではなんのことかわからないと思いますので、もう少しかみ砕いて説明していきます。このページをご覧になっている方は、例えば「サーバーにアクセスしようとしたけどsshってどういうことなんだ?」とか「GitHubを使ってみたいけどなんか登録してsshを使わなくちゃいけないらしい」といった方が多いかと思います。それではsshとはどういう場面で必要なのでしょうか?簡単な言葉で説明すると「他のコンピュータに対してアクセスして、何かしらの操作を加えたいとき」にsshを使います。「サーバーに対してコマンドを実行して環境を作りたい」とか「GitHubなどのリモートリポジトリに対してブランチをマージさせたい」といったところで、sshというコマンドを使用したいわけです。user@host_nameで使います。これは色々なところで書いてあるのでわかりやすいと思います。そもそも、「安全なシェル」の「シェル」とは人間とコンピュータが気軽におしゃべりするための言語です。ファイルを削除したい!というときの「cd」とか「rm」はそれに当たりますよね。遠くのコンピュータに命令したいときも当然同じようにおしゃべりできたら便利なわけですから、シェルを使いたいですよね。暗号化なしで通信するとほかの人に見られる危険などがあるため安全なシェルすなわちsshを使いたいということなのです。(実は以前は暗号化されていないtelnetというものを使っていました。基本的な機能しかないことを利用して、現在もサーバーを作る際にときどき用いることがあります。)暗号化の仕組みsshで公開鍵暗号方式を使用しています。(実は違うやり方でパスワード認証方式というのもありますが、あまり使われないように思われます。公開鍵暗号方式の通信とはサーバーに公開鍵を持たせて文書等を暗号化させて、受信する際には自分の持っている秘密鍵を使用して複合する通信のことです。公開鍵を錠(lock)、秘密鍵はその錠の鍵(key)だと考えてください。南京錠などを想像すればわかるように、lockのやり方がわかっても、keyが用意できなければ実際に中身にたどり着くことはできません。リアルの世界とは違って暗号化の世界では錠の鍵穴を見て鍵を作り出すことができない(らしい)ので、自分の秘密鍵をばらさなければこれで安全に通信することが可能なわけです。sshではより安全性を高めるために秘密鍵に対して鍵をかけるのが一般的です。鍵に鍵をかけるというのは面白いですよね。この鍵は暗号化も複合化も同じ共通鍵暗号方式を使用しています。実際に使用していくコマンドここでは実践で使っていくコマンドを簡単に紹介していきます。紹介できなかったオプションやコマンドがたくさんあると思うので、不足している部分に関しては最後の参照URL等をご覧ください。事前知識としてsshに関するファイルは~/.sshというディレクトリに入るのですが、そこのファイルの役割を紹介しておきます。公開鍵を登録しておくファイル。SSH接続に関する設定を書いておくファイル。過去に接続したことがあるサーバーを書いておくファイル。"your_email@example.com"これはgithubで推奨されている鍵の作り方です。rsaの部分はRSAという暗号化方式を使って作成するという意味です。他にもDSAやECDSAといった種類がありますが一般的にはRSAを用いるのではないかと思います。4096では鍵のビット数をしてしています。デフォルトでは2048になのでより強固に作成していると言えますね。"your_email@example.com"の部分はコメントなので必要なければ省いて構いません。途中でパスフレーズを聞かれると思いますが、これが先ほど書いたとおり秘密鍵に対するパスワードになっているので忘れないものを使用してください。このコマンドを実行するとid_rsaとid_rsa.pubが作成されます。前者が秘密鍵、後者が公開鍵です。余談ですが、GitHubユーザーのSSH鍵6万個を調べてみたでGitHubのssh鍵に関して面白い考察がありました。user@host_nameこれはsshの公開鍵を登録したいサーバーに送るコマンドです。iオプションで任意のファイルを指定して送ることができます。ここでは先程作成した~/.ssh/id_rsa.pubを指定しています。~/.ssh/id_rsassh-agentは認証エージェントとよばれるもので、sshをするときに必要なパスワードの入力をショートカットできるようにするコマンドです。(ubuntuやMacの人は自動的に起動しているのでこのコマンドは忘れてしまっても問題ありません。bashなどを打たないといけないかもしれません。)ssh-addはssh-agentに秘密鍵を追加するメソッドです。引数にとった秘密鍵を追加します。http://webos-goodies.jp/archives/50672669.htmlまたこちらは書籍ですが、私がsshの仕組みを少し理解できるようになったきっかけになった本です。10:55男もすなるsshといふものを、我もしてみむとて解説するなりTweet広告を非表示にする関連記事2017-07-12Yarnを導入しました!こんにちは、エンジニアの井戸田です。弊社が運用しているmama...2017-05-12エンジニアが暗号理論を学んでみた。Railsにwebpackを使ってPostCSSを導入してみた【ローカル環境編】こんにちは、エンジニアの井戸田です。今回はモダンなCSS環境...2016-11-05HTMLテンプレートエンジン「slim」の解析ツールslim-lintを導入してみた!こんにちは、エンジニアの井戸田です。Macが遅い問題をdocker-syncで解決するこんにちは。エンジニアの志村です。2Wantedlyも更新中です!月別アーカイブエンジニア採用情報はてなブログをはじめよう!cluex-developersさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。