{"action":"created","comment":{"url":"https://api.github.com/repos/rackerlabs/python-lavaclient/pulls/comments/44039777","id":44039777,"diff_hunk":"@@ -0,0 +1,131 @@\n+Using SSH to Access Your Cluster\n+===========\n+\n+Once you have a cluster, many of the tools in the ecosystem require command line access to your\n+cluster in order to run them.  We provide SSH access to all nodes in your cluster, as well as the\n+ability to set up a SOCKS proxy over SSH so you can load internal cluster web pages in your\n+browser.\n+\n+Setting up your SSH credentials\n+--------------\n+\n+If you haven't defined any ssh credentials, when you create a cluster using lavaclient, it\n+will attempt to use your current username and ssh public key to provide access to your cluster.\n+\n+    $ NODE_GROUPS='slave(flavor_id=hadoop1-7,count=3)'\n+    $ lavaclient clusters create --node-groups $NODE_GROUPS my-cluster HADOOP_HDP2_3\n+    You have not uploaded any SSH key credentials; do you want to upload\n+    $HOME/.ssh/id_rsa.pub now?\n+\n+If you want to specify a different ssh key, you can preload your ssh keys using the credentials\n+commands:\n+\n+    $ lavaclient credentials create_ssh_key my-ssh-key ~/.ssh/id_rsa.pub\n+\n+Then you can specify your uploaded ssh key to be used for access to your cluster:\n+\n+    $ lavaclient clusters create --ssh-key my-ssh-key my-cluster HADOOP_HDP2_3\n+\n+To specify a username that you want to be created on your clusters, you can pass that in the\n+cluster create call:\n+\n+    $ lavaclient clusters create --username my-username my-cluster HADOOP_HDP2_3\n+\n+Once you have a cluster, you can ssh to it using the username that you supplied or your current\n+username if you left it at the default behavior:\n+\n+    $ ssh my-username@<public-ip-of-node-in-cluster>\n+\n+The IP addresses of your cluster nodes are visible by getting a list of nodes in your cluster:\n+\n+    $ lavaclient clusters nodes <cluster-id>\n+\n+\n+SSH Access\n+--------------\n+\n+lavaclient has a shortcut for ssh'ing into a node in your cluster.  By default, it will pick a\n+random node in your cluster. This saves you from having to look up the IP addresses.\n+\n+    $ lava clusters ssh <cluster-id>\n+    Last login: Thu Jun 18 18:25:50 2015 from some.host\n+    [my-username@gateway-1 ~]$\n+\n+If you want a specific host, you can use the node name to go to the host of your choice:\n+\n+    $ lava clusters ssh --node-name master-1 <cluster-id>\n+    Last login: Thu Jun 18 18:25:50 2015 from some.host\n+    [my-username@master-1 ~]$\n+\n+If you need custom ssh options, like you are using a different ssh keypair than the default, you\n+can supply a custom ssh command to be used:\n+\n+    $ lava clusters ssh --ssh-command 'ssh -i ~/.ssh/id_rsa2 -o StrictHostKeyChecking=no'\n+    Last login: Thu Jun 18 18:25:50 2015 from some.host\n+    [my-username@gateway-1 ~]$\n+\n+For most uses, if your stack has a 'gateway' node, that is probably where you want to be, since\n+it has all of the cluster client libraries already installed and configured there:\n+\n+    $ lava clusters ssh --node-name gateway-1\n+    Last login: Thu Jun 18 18:25:50 2015 from some.host\n+    [my-username@gateway-1 ~]$\n+\n+\n+SOCKS Proxy\n+--------------\n+\n+Many of the services in your cluster provide web pages to get status information about that\n+service.  Because these pages are not locked down with authenticated access, we firewall off your\n+cluster to deny public access to them.  In order for you to access them, you need to create what","path":"docs/ssh.rst","position":80,"original_position":80,"commit_id":"1a66091426492b569de93a9b3691157cd9502267","original_commit_id":"1a66091426492b569de93a9b3691157cd9502267","user":{"login":"thesquelched","id":838700,"avatar_url":"https://avatars.githubusercontent.com/u/838700?v=3","gravatar_id":"","url":"https://api.github.com/users/thesquelched","html_url":"https://github.com/thesquelched","followers_url":"https://api.github.com/users/thesquelched/followers","following_url":"https://api.github.com/users/thesquelched/following{/other_user}","gists_url":"https://api.github.com/users/thesquelched/gists{/gist_id}","starred_url":"https://api.github.com/users/thesquelched/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thesquelched/subscriptions","organizations_url":"https://api.github.com/users/thesquelched/orgs","repos_url":"https://api.github.com/users/thesquelched/repos","events_url":"https://api.github.com/users/thesquelched/events{/privacy}","received_events_url":"https://api.github.com/users/thesquelched/received_events","type":"User","site_admin":false},"body":"The `what is called` is extraneous; maybe just make `SOCKS proxy` a link to a wikipedia page or something.","created_at":"2015-11-05T17:18:06Z","updated_at":"2015-11-05T17:18:06Z","html_url":"https://github.com/rackerlabs/python-lavaclient/pull/40#discussion_r44039777","pull_request_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/pulls/40","_links":{"self":{"href":"https://api.github.com/repos/rackerlabs/python-lavaclient/pulls/comments/44039777"},"html":{"href":"https://github.com/rackerlabs/python-lavaclient/pull/40#discussion_r44039777"},"pull_request":{"href":"https://api.github.com/repos/rackerlabs/python-lavaclient/pulls/40"}}},"pull_request":{"url":"https://api.github.com/repos/rackerlabs/python-lavaclient/pulls/40","id":49847598,"html_url":"https://github.com/rackerlabs/python-lavaclient/pull/40","diff_url":"https://github.com/rackerlabs/python-lavaclient/pull/40.diff","patch_url":"https://github.com/rackerlabs/python-lavaclient/pull/40.patch","issue_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/issues/40","number":40,"state":"open","locked":false,"title":"Add a tutorial for ssh and socks proxy usage","user":{"login":"jimbobhickville","id":230385,"avatar_url":"https://avatars.githubusercontent.com/u/230385?v=3","gravatar_id":"","url":"https://api.github.com/users/jimbobhickville","html_url":"https://github.com/jimbobhickville","followers_url":"https://api.github.com/users/jimbobhickville/followers","following_url":"https://api.github.com/users/jimbobhickville/following{/other_user}","gists_url":"https://api.github.com/users/jimbobhickville/gists{/gist_id}","starred_url":"https://api.github.com/users/jimbobhickville/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jimbobhickville/subscriptions","organizations_url":"https://api.github.com/users/jimbobhickville/orgs","repos_url":"https://api.github.com/users/jimbobhickville/repos","events_url":"https://api.github.com/users/jimbobhickville/events{/privacy}","received_events_url":"https://api.github.com/users/jimbobhickville/received_events","type":"User","site_admin":false},"body":"Is this explanatory enough?  Anything I missed?","created_at":"2015-11-05T16:36:45Z","updated_at":"2015-11-05T17:18:06Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c3deb27d385237fa433c2e66603753f9eae4f498","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/pulls/40/commits","review_comments_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/pulls/40/comments","review_comment_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/issues/40/comments","statuses_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/statuses/1a66091426492b569de93a9b3691157cd9502267","head":{"label":"jimbobhickville:ssh-proxy-docs","ref":"ssh-proxy-docs","sha":"1a66091426492b569de93a9b3691157cd9502267","user":{"login":"jimbobhickville","id":230385,"avatar_url":"https://avatars.githubusercontent.com/u/230385?v=3","gravatar_id":"","url":"https://api.github.com/users/jimbobhickville","html_url":"https://github.com/jimbobhickville","followers_url":"https://api.github.com/users/jimbobhickville/followers","following_url":"https://api.github.com/users/jimbobhickville/following{/other_user}","gists_url":"https://api.github.com/users/jimbobhickville/gists{/gist_id}","starred_url":"https://api.github.com/users/jimbobhickville/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jimbobhickville/subscriptions","organizations_url":"https://api.github.com/users/jimbobhickville/orgs","repos_url":"https://api.github.com/users/jimbobhickville/repos","events_url":"https://api.github.com/users/jimbobhickville/events{/privacy}","received_events_url":"https://api.github.com/users/jimbobhickville/received_events","type":"User","site_admin":false},"repo":{"id":38007277,"name":"python-lavaclient","full_name":"jimbobhickville/python-lavaclient","owner":{"login":"jimbobhickville","id":230385,"avatar_url":"https://avatars.githubusercontent.com/u/230385?v=3","gravatar_id":"","url":"https://api.github.com/users/jimbobhickville","html_url":"https://github.com/jimbobhickville","followers_url":"https://api.github.com/users/jimbobhickville/followers","following_url":"https://api.github.com/users/jimbobhickville/following{/other_user}","gists_url":"https://api.github.com/users/jimbobhickville/gists{/gist_id}","starred_url":"https://api.github.com/users/jimbobhickville/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jimbobhickville/subscriptions","organizations_url":"https://api.github.com/users/jimbobhickville/orgs","repos_url":"https://api.github.com/users/jimbobhickville/repos","events_url":"https://api.github.com/users/jimbobhickville/events{/privacy}","received_events_url":"https://api.github.com/users/jimbobhickville/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jimbobhickville/python-lavaclient","description":"Command line client for Cloud Big Data","fork":true,"url":"https://api.github.com/repos/jimbobhickville/python-lavaclient","forks_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/forks","keys_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/teams","hooks_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/hooks","issue_events_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/issues/events{/number}","events_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/events","assignees_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/assignees{/user}","branches_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/branches{/branch}","tags_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/tags","blobs_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/git/refs{/sha}","trees_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/statuses/{sha}","languages_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/languages","stargazers_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/stargazers","contributors_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/contributors","subscribers_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/subscribers","subscription_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/subscription","commits_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/commits{/sha}","git_commits_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/git/commits{/sha}","comments_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/comments{/number}","issue_comment_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/issues/comments{/number}","contents_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/contents/{+path}","compare_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/merges","archive_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/downloads","issues_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/issues{/number}","pulls_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/pulls{/number}","milestones_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/milestones{/number}","notifications_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/labels{/name}","releases_url":"https://api.github.com/repos/jimbobhickville/python-lavaclient/releases{/id}","created_at":"2015-06-24T19:48:03Z","updated_at":"2015-06-24T19:48:04Z","pushed_at":"2015-11-05T16:36:15Z","git_url":"git://github.com/jimbobhickville/python-lavaclient.git","ssh_url":"git@github.com:jimbobhickville/python-lavaclient.git","clone_url":"https://github.com/jimbobhickville/python-lavaclient.git","svn_url":"https://github.com/jimbobhickville/python-lavaclient","homepage":null,"size":332,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"rackerlabs:master","ref":"master","sha":"4242c007cbd526b679d5cf4b5768e99433cbc238","user":{"login":"rackerlabs","id":84293,"avatar_url":"https://avatars.githubusercontent.com/u/84293?v=3","gravatar_id":"","url":"https://api.github.com/users/rackerlabs","html_url":"https://github.com/rackerlabs","followers_url":"https://api.github.com/users/rackerlabs/followers","following_url":"https://api.github.com/users/rackerlabs/following{/other_user}","gists_url":"https://api.github.com/users/rackerlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/rackerlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rackerlabs/subscriptions","organizations_url":"https://api.github.com/users/rackerlabs/orgs","repos_url":"https://api.github.com/users/rackerlabs/repos","events_url":"https://api.github.com/users/rackerlabs/events{/privacy}","received_events_url":"https://api.github.com/users/rackerlabs/received_events","type":"Organization","site_admin":false},"repo":{"id":35032950,"name":"python-lavaclient","full_name":"rackerlabs/python-lavaclient","owner":{"login":"rackerlabs","id":84293,"avatar_url":"https://avatars.githubusercontent.com/u/84293?v=3","gravatar_id":"","url":"https://api.github.com/users/rackerlabs","html_url":"https://github.com/rackerlabs","followers_url":"https://api.github.com/users/rackerlabs/followers","following_url":"https://api.github.com/users/rackerlabs/following{/other_user}","gists_url":"https://api.github.com/users/rackerlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/rackerlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rackerlabs/subscriptions","organizations_url":"https://api.github.com/users/rackerlabs/orgs","repos_url":"https://api.github.com/users/rackerlabs/repos","events_url":"https://api.github.com/users/rackerlabs/events{/privacy}","received_events_url":"https://api.github.com/users/rackerlabs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rackerlabs/python-lavaclient","description":"Command line client for Cloud Big Data","fork":false,"url":"https://api.github.com/repos/rackerlabs/python-lavaclient","forks_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/forks","keys_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/teams","hooks_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/hooks","issue_events_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/issues/events{/number}","events_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/events","assignees_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/assignees{/user}","branches_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/branches{/branch}","tags_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/tags","blobs_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/git/refs{/sha}","trees_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/statuses/{sha}","languages_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/languages","stargazers_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/stargazers","contributors_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/contributors","subscribers_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/subscribers","subscription_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/subscription","commits_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/commits{/sha}","git_commits_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/git/commits{/sha}","comments_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/comments{/number}","issue_comment_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/issues/comments{/number}","contents_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/contents/{+path}","compare_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/merges","archive_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/downloads","issues_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/issues{/number}","pulls_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/pulls{/number}","milestones_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/milestones{/number}","notifications_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/labels{/name}","releases_url":"https://api.github.com/repos/rackerlabs/python-lavaclient/releases{/id}","created_at":"2015-05-04T12:16:35Z","updated_at":"2015-06-29T08:56:14Z","pushed_at":"2015-11-05T16:36:45Z","git_url":"git://github.com/rackerlabs/python-lavaclient.git","ssh_url":"git@github.com:rackerlabs/python-lavaclient.git","clone_url":"https://github.com/rackerlabs/python-lavaclient.git","svn_url":"https://github.com/rackerlabs/python-lavaclient","homepage":null,"size":609,"stargazers_count":2,"watchers_count":2,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":8,"mirror_url":null,"open_issues_count":2,"forks":8,"open_issues":2,"watchers":2,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rackerlabs/python-lavaclient/pulls/40"},"html":{"href":"https://github.com/rackerlabs/python-lavaclient/pull/40"},"issue":{"href":"https://api.github.com/repos/rackerlabs/python-lavaclient/issues/40"},"comments":{"href":"https://api.github.com/repos/rackerlabs/python-lavaclient/issues/40/comments"},"review_comments":{"href":"https://api.github.com/repos/rackerlabs/python-lavaclient/pulls/40/comments"},"review_comment":{"href":"https://api.github.com/repos/rackerlabs/python-lavaclient/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rackerlabs/python-lavaclient/pulls/40/commits"},"statuses":{"href":"https://api.github.com/repos/rackerlabs/python-lavaclient/statuses/1a66091426492b569de93a9b3691157cd9502267"}}}}