{"componentChunkName":"component---src-modules-datocms-post-page-page-tsx","path":"/posts/61","result":{"data":{"post":{"title":"1円/時のVPS「DigitalOcean」をコマンドで操作する方法","author":{"name":"suin","images":{"r32":{"src":"https://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&fm=png&h=32&mask=ellipse&w=32","srcSet":"https://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=1&fm=png&h=32&mask=ellipse&w=32 1x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=1.5&fm=png&h=32&mask=ellipse&w=32 1.5x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=2&fm=png&h=32&mask=ellipse&w=32 2x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=3&fm=png&h=32&mask=ellipse&w=32 3x"},"r48":{"src":"https://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&fm=png&h=48&mask=ellipse&w=48","srcSet":"https://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=1&fm=png&h=48&mask=ellipse&w=48 1x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=1.5&fm=png&h=48&mask=ellipse&w=48 1.5x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=2&fm=png&h=48&mask=ellipse&w=48 2x,\nhttps://www.datocms-assets.com/29850/1591833290-avatar512.jpg?auto=format&dpr=3&fm=png&h=48&mask=ellipse&w=48 3x"}},"bio":"好き: TypeScript, DDD, OOP／#YYTypeScript の主催者／Qiita 4位／株式会社クラフトマンソフトウェア取締役／『実践ドメイン駆動設計』邦訳レビュア／#分報 考案者／Web自動テストShouldBeeを開発"},"date":"2015年12月7日","tags":[],"category":"プログラミング","body":"<a href=\"https://c16e-esa-io-public-files.s3-ap-northeast-1.amazonaws.com/uploads/production/attachments/15637/2020/05/28/18740/eeb98f36-822a-49e9-b918-f1c0acd3bc45.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"1200\" alt=\"image.png (69.4 kB)\" src=\"https://c16e-esa-io-public-files.s3-ap-northeast-1.amazonaws.com/uploads/production/attachments/15637/2020/05/28/18740/eeb98f36-822a-49e9-b918-f1c0acd3bc45.png\"></a>\n<p data-sourcepos=\"3:1-3:157\">1時間0.007ドル(約0.8円)で使える非常に安価なレンタルサーバ「<a href=\"https://www.digitalocean.com/?refcode=05858f2fb943\" target=\"_blank\" rel=\"noopener noreferrer\">DigitalOcean</a>」をコマンドから操作する方法を紹介する。</p>\n<h1 data-sourcepos=\"5:1-5:60\" id=\"1-0-0\" name=\"1-0-0\">\n<a class=\"anchor\" id=\"DigitalOceanをコマンドで操作できる「tugboat」\" name=\"DigitalOcean%E3%82%92%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E6%93%8D%E4%BD%9C%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%8Ctugboat%E3%80%8D\" href=\"#DigitalOcean%E3%82%92%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E6%93%8D%E4%BD%9C%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%8Ctugboat%E3%80%8D\" data-position=\"1-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"DigitalOceanをコマンドで操作できる「tugboat」\"> &gt; DigitalOceanをコマンドで操作できる「tugboat」</span></a>DigitalOceanをコマンドで操作できる「tugboat」</h1>\n<p data-sourcepos=\"7:1-7:307\"><a href=\"https://github.com/pearkes/tugboat\" target=\"_blank\" rel=\"noopener noreferrer\">tugboat</a>は、Ruby製の<a href=\"https://www.digitalocean.com/?refcode=05858f2fb943\" target=\"_blank\" rel=\"noopener noreferrer\">DigitalOcean</a>をコマンドで扱うためのツールだ。DigitalOceanはドロップレット(サーバインスタンス)の操作をREST APIで行うことができ、同ツールはこれを利用してドロップレットの作成などをコマンドラインで行う。</p>\n<h1 data-sourcepos=\"9:1-9:32\" id=\"2-0-0\" name=\"2-0-0\">\n<a class=\"anchor\" id=\"APIトークンを取得する\" name=\"API%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B\" href=\"#API%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B\" data-position=\"2-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"APIトークンを取得する\"> &gt; APIトークンを取得する</span></a>APIトークンを取得する</h1>\n<p data-sourcepos=\"11:1-11:151\">tugboatを使う前に、DigitalOceanの管理画面からAPIトークンを取得する必要がある。トークンの取得方法は次の通り。</p>\n<h2 data-sourcepos=\"13:1-13:24\" id=\"2-1-0\" name=\"2-1-0\">\n<a class=\"anchor\" id=\"APIページを開く\" name=\"API%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%E9%96%8B%E3%81%8F\" href=\"#API%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%E9%96%8B%E3%81%8F\" data-position=\"2-1-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"APIページを開く\"> &gt; APIページを開く</span></a>APIページを開く</h2>\n<p data-sourcepos=\"15:1-15:192\">Digital Oceanの管理画面にログインしたのち、<a href=\"https://cloud.digitalocean.com/settings/applications\" target=\"_blank\" rel=\"noopener noreferrer\">APIページ</a>ページを開き、「Generate new token」ボタンを押す。</p>\n<h2 data-sourcepos=\"17:1-17:30\" id=\"2-2-0\" name=\"2-2-0\">\n<a class=\"anchor\" id=\"トークンを生成する\" name=\"%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B\" href=\"#%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B\" data-position=\"2-2-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"トークンを生成する\"> &gt; トークンを生成する</span></a>トークンを生成する</h2>\n<p data-sourcepos=\"19:1-19:232\">「Token Name」には「tugboat」などわかりやすい名前を入力する。「Select Scopes」の「Write」にチェックが入っていることを確認し、「Generate Token」を押してトークンを生成する。</p>\n<h2 data-sourcepos=\"21:1-21:27\" id=\"2-3-0\" name=\"2-3-0\">\n<a class=\"anchor\" id=\"トークンを控える\" name=\"%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E6%8E%A7%E3%81%88%E3%82%8B\" href=\"#%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E6%8E%A7%E3%81%88%E3%82%8B\" data-position=\"2-3-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"トークンを控える\"> &gt; トークンを控える</span></a>トークンを控える</h2>\n<p data-sourcepos=\"23:1-23:171\">トークンの生成が完了すると、トークンが画面に表示される。トークンは一度しか表示されないので、今のうちに控えておく。</p>\n<h1 data-sourcepos=\"25:1-25:26\" id=\"3-0-0\" name=\"3-0-0\">\n<a class=\"anchor\" id=\"SSHキーを登録する\" name=\"SSH%E3%82%AD%E3%83%BC%E3%82%92%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B\" href=\"#SSH%E3%82%AD%E3%83%BC%E3%82%92%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B\" data-position=\"3-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"SSHキーを登録する\"> &gt; SSHキーを登録する</span></a>SSHキーを登録する</h1>\n<p data-sourcepos=\"27:1-27:166\">次に、tugboatで作ったドロップレットにSSHでログインできるよう、あらかじめ自分のSSH公開鍵を管理画面から登録しておく。</p>\n<h2 data-sourcepos=\"29:1-29:27\" id=\"3-1-0\" name=\"3-1-0\">\n<a class=\"anchor\" id=\"公開鍵を登録する\" name=\"%E5%85%AC%E9%96%8B%E9%8D%B5%E3%82%92%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B\" href=\"#%E5%85%AC%E9%96%8B%E9%8D%B5%E3%82%92%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B\" data-position=\"3-1-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"公開鍵を登録する\"> &gt; 公開鍵を登録する</span></a>公開鍵を登録する</h2>\n<p data-sourcepos=\"31:1-31:347\">「<a href=\"https://cloud.digitalocean.com/settings/security\" target=\"_blank\" rel=\"noopener noreferrer\">Security</a>」の「Add SSH Key」を開き、「Name」と「Public SSH key」を入力する。「Name」は管理上、分かりやすい名前にする。「Public SSH Key」はid_rsa.pubなどの中身をそのままコピペする。入力した「Create SSH Key」を押して終わる。</p>\n<h2 data-sourcepos=\"33:1-33:54\" id=\"3-2-0\" name=\"3-2-0\">\n<a class=\"anchor\" id=\"SSHキーのフィンガープリントを控える\" name=\"SSH%E3%82%AD%E3%83%BC%E3%81%AE%E3%83%95%E3%82%A3%E3%83%B3%E3%82%AC%E3%83%BC%E3%83%97%E3%83%AA%E3%83%B3%E3%83%88%E3%82%92%E6%8E%A7%E3%81%88%E3%82%8B\" href=\"#SSH%E3%82%AD%E3%83%BC%E3%81%AE%E3%83%95%E3%82%A3%E3%83%B3%E3%82%AC%E3%83%BC%E3%83%97%E3%83%AA%E3%83%B3%E3%83%88%E3%82%92%E6%8E%A7%E3%81%88%E3%82%8B\" data-position=\"3-2-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"SSHキーのフィンガープリントを控える\"> &gt; SSHキーのフィンガープリントを控える</span></a>SSHキーのフィンガープリントを控える</h2>\n<p data-sourcepos=\"35:1-35:171\">公開鍵の登録が終わると、「SSH Keys」にSSHキーのフィンガープリントが表示される。後で、tugboatの設定で使うので控えておく。</p>\n<h1 data-sourcepos=\"37:1-37:30\" id=\"4-0-0\" name=\"4-0-0\">\n<a class=\"anchor\" id=\"tugboatのインストール\" name=\"tugboat%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB\" href=\"#tugboat%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB\" data-position=\"4-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"tugboatのインストール\"> &gt; tugboatのインストール</span></a>tugboatのインストール</h1>\n<p data-sourcepos=\"39:1-39:43\">tugboatはgemでインストールする。</p>\n<div class=\"code-block\" data-sourcepos=\"41:1-43:3\"><div class=\"highlight\"><pre class=\"highlight plaintext\"><code>gem install tugboat\n</code></pre></div></div>\n<h1 data-sourcepos=\"45:1-45:18\" id=\"5-0-0\" name=\"5-0-0\">\n<a class=\"anchor\" id=\"tugboatの設定\" name=\"tugboat%E3%81%AE%E8%A8%AD%E5%AE%9A\" href=\"#tugboat%E3%81%AE%E8%A8%AD%E5%AE%9A\" data-position=\"5-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"tugboatの設定\"> &gt; tugboatの設定</span></a>tugboatの設定</h1>\n<p data-sourcepos=\"47:1-47:199\"><code>tugboat authorize</code>コマンドを実行すると、設定ウィザードが始まる。ほとんどデフォルト値で構わないが、下では設定しておくべき項目のみ抜粋する。</p>\n<div class=\"code-block\" data-sourcepos=\"49:1-60:3\"><div class=\"highlight\"><pre class=\"highlight plaintext\"><code>% tugboat authorize\nNote: You can get your Access Token from https://cloud.digitalocean.com/settings/tokens/new\n\nEnter your access token: ここにトークン貼り付け\n...\nEnter your default region (optional, defaults to nyc1): sgp1 # シンガポールを指定\n...\nEnter your default ssh key IDs (optional, defaults to none, comma separated string): ed:8d:36:66:... ここにSSHキーのIDを貼り付け\n...\nAuthentication with DigitalOcean was successful.\n</code></pre></div></div>\n<p data-sourcepos=\"62:1-62:78\">ウィザードが完了すると、<code>~/.tagboat</code>に設定が保存される。</p>\n<div class=\"code-block\" data-sourcepos=\"64:1-82:3\"><div class=\"highlight\"><pre class=\"highlight plaintext\"><code>% cat ~/.tugboat\n---\n---\nauthentication:\n  access_token: トークン\nssh:\n  ssh_user: root\n  ssh_key_path: \"~/.ssh/id_rsa\"\n  ssh_port: '22'\ndefaults:\n  region: sgp1\n  image: ubuntu-14-04-x64\n  size: 512mb\n  ssh_key: ed:8d:36:66:....\n  private_networking: 'false'\n  backups_enabled: 'false'\n</code></pre></div></div>\n<h1 data-sourcepos=\"84:1-84:21\" id=\"6-0-0\" name=\"6-0-0\">\n<a class=\"anchor\" id=\"tugboatの使い方\" name=\"tugboat%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9\" href=\"#tugboat%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9\" data-position=\"6-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"tugboatの使い方\"> &gt; tugboatの使い方</span></a>tugboatの使い方</h1>\n<p data-sourcepos=\"86:1-86:49\">tugboatの基本的な使い方を紹介する。</p>\n<p data-sourcepos=\"88:1-88:166\">まず、ドロップレットを作成する方法。<code>tugboat create [好きなドロップレット名]</code>でドロップレットを作成することができる。</p>\n<div class=\"code-block\" data-sourcepos=\"90:1-93:3\"><div class=\"highlight\"><pre class=\"highlight plaintext\"><code>% tugboat create test\nQueueing creation of droplet 'test'...Droplet created!\n</code></pre></div></div>\n<p data-sourcepos=\"95:1-95:51\">作ったドロップレットの一覧を見る。</p>\n<div class=\"code-block\" data-sourcepos=\"97:1-100:3\"><div class=\"highlight\"><pre class=\"highlight plaintext\"><code>% tugboat droplets\ntest (ip: 128.199.169.218, status: active, region: sgp1, id: 8993546)\n</code></pre></div></div>\n<p data-sourcepos=\"102:1-102:48\">作ったドロップレットを削除する。</p>\n<div class=\"code-block\" data-sourcepos=\"104:1-109:3\"><div class=\"highlight\"><pre class=\"highlight plaintext\"><code>% tugboat destroy test\nDroplet fuzzy name provided. Finding droplet ID...done, 8993546 (test)\nWarning! Potentially destructive action. Please confirm [y/n]: y\nQueuing destroy for 8993546 (test)...Deletion Successful!\n</code></pre></div></div>\n<p data-sourcepos=\"111:1-111:223\">イメージを指定してドロップレットを作成する。Digital OceanはデフォルトでDocker入りのイメージを提供しているので、イメージを指定すればすぐに使うことができる。</p>\n<div class=\"code-block\" data-sourcepos=\"113:1-116:3\"><div class=\"highlight\"><pre class=\"highlight plaintext\"><code>% tugboat create --image=docker mydocker\nQueueing creation of droplet 'mydocker'...Droplet created!\n</code></pre></div></div>\n<p data-sourcepos=\"118:1-118:69\">ドロップレットが起動するまで待つこともできる。</p>\n<div class=\"code-block\" data-sourcepos=\"120:1-124:3\"><div class=\"highlight\"><pre class=\"highlight plaintext\"><code>% tugboat wait mydocker\nDroplet fuzzy name provided. Finding droplet ID...done, 8993795 (mydocker)\nWaiting for droplet to become active..........\n</code></pre></div></div>\n<p data-sourcepos=\"126:1-126:111\">ドロップレット名でSSH接続することも可能。これが一番便利な機能かもしれない。</p>\n<div class=\"code-block\" data-sourcepos=\"128:1-134:3\"><div class=\"highlight\"><pre class=\"highlight plaintext\"><code>% tugboat ssh mydocker\nDroplet fuzzy name provided. Finding droplet ID...done, 8993795 (mydocker)\nExecuting SSH on Droplet (mydocker)...\nAttempting SSH: root@128.199.116.248\nWelcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-68-generic x86_64)\n</code></pre></div></div>\n<p data-sourcepos=\"136:1-136:43\">以上がtugboatの基本的な使い方。</p>\n<h1 data-sourcepos=\"138:1-138:44\" id=\"7-0-0\" name=\"7-0-0\">\n<a class=\"anchor\" id=\"簡単なプロビジョニングをする\" name=\"%E7%B0%A1%E5%8D%98%E3%81%AA%E3%83%97%E3%83%AD%E3%83%93%E3%82%B8%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0%E3%82%92%E3%81%99%E3%82%8B\" href=\"#%E7%B0%A1%E5%8D%98%E3%81%AA%E3%83%97%E3%83%AD%E3%83%93%E3%82%B8%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0%E3%82%92%E3%81%99%E3%82%8B\" data-position=\"7-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"簡単なプロビジョニングをする\"> &gt; 簡単なプロビジョニングをする</span></a>簡単なプロビジョニングをする</h1>\n<p data-sourcepos=\"140:1-140:312\">tugboatを使うといとも簡単にドロップレットを作ることができるが、tugboat自体にはプロビジョニングの機能がない。一方で、Digital Oceanでは、ユーザデータ(User Data)というYAMLで簡単なプロビジョニングを行える仕組みを提供している。</p>\n<p data-sourcepos=\"142:1-142:214\">tugboatでは、<code>create</code>コマンドのオプションで、このユーザデータのYAMLファイルを渡すことができる。この機能を活用して簡単なプロビジョニングを行ってみる。</p>\n<p data-sourcepos=\"144:1-144:362\">下のコードは、Digital Oceanのユーザデータの定義だ。これを、cloud-config.ymlなど好きな名前で保存して準備しておく。ちなみに、このユーザデータでやっていることは、ユーザの追加とSSHのセキュリティを高めるための設定、そして、簡易的なファイアウォールの設定だ。</p>\n<div class=\"code-block\" data-sourcepos=\"146:1-167:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>yaml</div>\n<div class=\"highlight\"><pre class=\"highlight yaml\"><code><span class=\"c1\">#cloud-config</span>\n<span class=\"na\">users</span><span class=\"pi\">:</span>\n  <span class=\"pi\">-</span> <span class=\"na\">name</span><span class=\"pi\">:</span> <span class=\"s\">suin</span>\n    <span class=\"na\">ssh-authorized-keys</span><span class=\"pi\">:</span>\n      <span class=\"pi\">-</span> <span class=\"s\">ssh-rsa AAAAB3Nz...[略]...VEAiQMtTQ== suin@SuinMacbook.local</span>\n    <span class=\"na\">sudo</span><span class=\"pi\">:</span> <span class=\"pi\">[</span><span class=\"s1\">'</span><span class=\"s\">ALL=(ALL)</span><span class=\"nv\"> </span><span class=\"s\">NOPASSWD:ALL'</span><span class=\"pi\">]</span>\n    <span class=\"na\">groups</span><span class=\"pi\">:</span> <span class=\"s\">sudo</span>\n    <span class=\"na\">shell</span><span class=\"pi\">:</span> <span class=\"s\">/bin/bash</span>\n<span class=\"na\">runcmd</span><span class=\"pi\">:</span>\n  <span class=\"c1\"># SSHD config</span>\n  <span class=\"pi\">-</span> <span class=\"s\">sed -i -e '/^Port/s/^.*$/Port 4444/' /etc/ssh/sshd_config</span>\n  <span class=\"pi\">-</span> <span class=\"s\">sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin no/' /etc/ssh/sshd_config</span>\n  <span class=\"pi\">-</span> <span class=\"s\">sed -i -e '/^#PasswordAuthentication/s/^.*$/PasswordAuthentication no/' /etc/ssh/sshd_config</span>\n  <span class=\"pi\">-</span> <span class=\"s\">service ssh restart</span>\n  <span class=\"c1\"># firewall</span>\n  <span class=\"pi\">-</span> <span class=\"s\">ufw enable</span>\n  <span class=\"pi\">-</span> <span class=\"s\">ufw allow </span><span class=\"m\">4444</span>\n  <span class=\"pi\">-</span> <span class=\"s\">ufw allow http</span>\n  <span class=\"pi\">-</span> <span class=\"s\">ufw allow https</span>\n  <span class=\"pi\">-</span> <span class=\"s\">ufw reload</span>\n</code></pre></div>\n</div>\n<p data-sourcepos=\"169:1-169:146\">このファイル名をtugboatの<code>--user-data</code>オプションに渡すと、ドロップレットを作成するときに実行してくれる。</p>\n<div class=\"code-block\" data-sourcepos=\"171:1-173:3\"><div class=\"highlight\"><pre class=\"highlight plaintext\"><code>tugboat create --user-data=cloud-config.yml userdata-test\n</code></pre></div></div>\n<p data-sourcepos=\"175:1-175:218\">ユーザデータでSSHのポートを4444に変更したのと、rootでのログインを封じたので、tugboatの<code>ssh</code>コマンドではポート番号とユーザ名を明示的に渡して、SSH接続する。</p>\n<div class=\"code-block\" data-sourcepos=\"177:1-179:3\"><div class=\"highlight\"><pre class=\"highlight plaintext\"><code>tugboat ssh -p 4444 -u suin userdata-test\n</code></pre></div></div>\n<p data-sourcepos=\"181:1-181:67\">rootではログインできなくなったことも確認する。</p>\n<div class=\"code-block\" data-sourcepos=\"183:1-189:3\"><div class=\"highlight\"><pre class=\"highlight plaintext\"><code>% tugboat ssh -p 4444 -u root userdata-test\nDroplet fuzzy name provided. Finding droplet ID...done, 8994269 (userdata-test)\nExecuting SSH on Droplet (userdata-test)...\nAttempting SSH: root@128.199.109.111\nPermission denied (publickey).\n</code></pre></div></div>\n<h1 data-sourcepos=\"191:1-191:11\" id=\"8-0-0\" name=\"8-0-0\">\n<a class=\"anchor\" id=\"まとめ\" name=\"%E3%81%BE%E3%81%A8%E3%82%81\" href=\"#%E3%81%BE%E3%81%A8%E3%82%81\" data-position=\"8-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"まとめ\"> &gt; まとめ</span></a>まとめ</h1>\n<p data-sourcepos=\"193:1-193:98\">tugboatを使うと、Digital Oceanのドロップレットの管理がとても容易になる。</p>\n"}},"pageContext":{"id":"DatoCmsPost-5142998-ja","description":"1時間0.007ドル(約0.8円)で使える非常に安価なレンタルサーバ「DigitalOcean」をコマンドから操作する方法を紹介する。 DigitalOceanをコマンドで操作できる「tugboat」 tugboatは、Ruby製のDigitalOceanをコマンドで扱うためのツールだ。DigitalOceanはドロップレット(サーバインスタンス)の操作をREST APIで行うことができ、同ツールはこれを利用してドロップレットの作成などをコマンドラインで行う。 APIトークンを取得する tugboatを使う前に、DigitalOceanの管理画面からAPIトークンを取得する必要がある。トークン","toc":[{"tag":"h1","depth":1,"href":"#DigitalOcean%E3%82%92%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E6%93%8D%E4%BD%9C%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%8Ctugboat%E3%80%8D","text":"DigitalOceanをコマンドで操作できる「tugboat」","html":"DigitalOceanをコマンドで操作できる「tugboat」"},{"tag":"h1","depth":1,"href":"#API%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B","text":"APIトークンを取得する","html":"APIトークンを取得する"},{"tag":"h2","depth":2,"href":"#API%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%E9%96%8B%E3%81%8F","text":"APIページを開く","html":"APIページを開く"},{"tag":"h2","depth":2,"href":"#%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B","text":"トークンを生成する","html":"トークンを生成する"},{"tag":"h2","depth":2,"href":"#%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E6%8E%A7%E3%81%88%E3%82%8B","text":"トークンを控える","html":"トークンを控える"},{"tag":"h1","depth":1,"href":"#SSH%E3%82%AD%E3%83%BC%E3%82%92%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B","text":"SSHキーを登録する","html":"SSHキーを登録する"},{"tag":"h2","depth":2,"href":"#%E5%85%AC%E9%96%8B%E9%8D%B5%E3%82%92%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B","text":"公開鍵を登録する","html":"公開鍵を登録する"},{"tag":"h2","depth":2,"href":"#SSH%E3%82%AD%E3%83%BC%E3%81%AE%E3%83%95%E3%82%A3%E3%83%B3%E3%82%AC%E3%83%BC%E3%83%97%E3%83%AA%E3%83%B3%E3%83%88%E3%82%92%E6%8E%A7%E3%81%88%E3%82%8B","text":"SSHキーのフィンガープリントを控える","html":"SSHキーのフィンガープリントを控える"},{"tag":"h1","depth":1,"href":"#tugboat%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB","text":"tugboatのインストール","html":"tugboatのインストール"},{"tag":"h1","depth":1,"href":"#tugboat%E3%81%AE%E8%A8%AD%E5%AE%9A","text":"tugboatの設定","html":"tugboatの設定"},{"tag":"h1","depth":1,"href":"#tugboat%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9","text":"tugboatの使い方","html":"tugboatの使い方"},{"tag":"h1","depth":1,"href":"#%E7%B0%A1%E5%8D%98%E3%81%AA%E3%83%97%E3%83%AD%E3%83%93%E3%82%B8%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0%E3%82%92%E3%81%99%E3%82%8B","text":"簡単なプロビジョニングをする","html":"簡単なプロビジョニングをする"},{"tag":"h1","depth":1,"href":"#%E3%81%BE%E3%81%A8%E3%82%81","text":"まとめ","html":"まとめ"}],"ogpImageUrl":"https://www.datocms-assets.com/29850/1593190022-pastedimage20200627146.png?fm=png&mark64=aHR0cHM6Ly93d3cuZGF0b2Ntcy1hc3NldHMuY29tLzI5ODUwLzE1OTMxNTQ2MzYtdHJhbnNwYXJlbnQtcGl4ZWwucG5nP3c9NDAwJmg9NjQmZml0PWNyb3AmYmxlbmQ2ND1hSFIwY0hNNkx5OTNkM2N1WkdGMGIyTnRjeTFoYzNObGRITXVZMjl0THpJNU9EVXdMekUxT1RFNE16TXlPVEF0WVhaaGRHRnlOVEV5TG1wd1p6OXRZWE5yUFdWc2JHbHdjMlVtWm0wOWNHNW5KbmM5TWpVMkptZzlNalUyJmJsZW5kLWg9NjQmYmxlbmQteD0wJmJsZW5kLXk9MCZibGVuZC1tb2RlPW5vcm1hbCZtYXJrNjQ9YUhSMGNITTZMeTloYzNObGRITXVhVzFuYVhndWJtVjBMMzUwWlhoMFAzUjRkQzFoYkdsbmJqMXRhV1JrYkdVbE1rTnNaV1owSm5SNGRDMW1iMjUwUFhOaGJuTXRjMlZ5YVdZbE1rTmliMnhrSm5SNGRDMWpiMnh2Y2oweU1qRTRNVFltZEhoME5qUTlZek5XY0dKbkpuUjRkQzF6YVhwbFBUTXdKbWc5TmpRJm1hcmsteD02NCZtYXJrLWFsaWduPW1pZGRsZSUyQ2xlZnQ&mark-align=bottom%2Cleft&mark-x=100&mark-y=496&blend64=aHR0cHM6Ly93d3cuZGF0b2Ntcy1hc3NldHMuY29tLzI5ODUwLzE1OTMxNTQ2MzYtdHJhbnNwYXJlbnQtcGl4ZWwucG5nP3c9MTIwMCZoPTYzMCZmaXQ9Y3JvcCZtYXJrNjQ9YUhSMGNITTZMeTkzZDNjdVpHRjBiMk50Y3kxaGMzTmxkSE11WTI5dEx6STVPRFV3THpFMU9UTXhOVEE1TkRBdFkzSmhablJ6YldGdUxUQXhMbkJ1WncmbWFyay1hbGlnbj10b3AlMkNjZW50ZXImbWFyay13PTI1MCZtYXJrLXk9ODAmYmxlbmQ2ND1hSFIwY0hNNkx5OWhjM05sZEhNdWFXMW5hWGd1Ym1WMEwzNTBaWGgwUDNSNGRDMWhiR2xuYmoxdGFXUmtiR1VsTWtOalpXNTBaWEltZEhoMExXWnZiblE5YzJGdWN5MXpaWEpwWmlVeVEySnZiR1FtZEhoMExYQmhaRDB4TURBbWRIaDBMV052Ykc5eVBUSXlNVGd4TmlaMGVIUTJORDFOWlZkSGFHbGZiVzFaVEdwbllUVlhWVVpRYW1kSmVFVmhWMlJ3WkVkR2MxUXlUbXhaVnpkcVowa3phbWR3VEdwbmNsQnFaelUzYW1jM1VHcG5ORzVxWjJGbWJXczBNMnQyV25wcVoxcHVhbWR2ZG0xc2NtNXRjelZWSm5SNGRDMXphWHBsUFRVMUpuYzlNVEl3TUNab1BUWXpNQSZibGVuZC1tb2RlPW5vcm1hbA&blend-mode=normal","otherPost":{"type":"author","title":"シェルスクリプトの処理境界が鮮明になる「名前付きブロック記法」なるものを考えてみた","slug":"/posts/62"}}}}