awsssh 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/README.md +43 -0
- data/awsssh.gemspec +16 -0
- data/bin/awsssh +5 -0
- data/lib/awsssh.rb +179 -0
- metadata +64 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NzVmZmEzNDNkNDZjNzMzZDEwNjZmOGZiYjA1NGZkN2UzYTM2Nzc2Yg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YmIzNjlkMzE2ZDVhZjBhZGRjMDk3ZmZlZmQxMjE2YTVmYjc5N2E4ZQ==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
OTg3NzFjOGJjN2UxM2NiZmU4ODdiNTU1MmQyMTlhZmRlM2Q4YzY2YWE2OWQw
|
10
|
+
YTQzMjliMzVhMThkNzEwZDQ4NDNkNDIzNTM1MWYxOWIwNDIyZjUyZWE3Njg2
|
11
|
+
Nzk3MGQ3YWQ3YTNjODc5YjQ5NmVkZmI3ZDBhMjBhNWYwYWMzYWI=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
M2M1ZjkyYTM4ZmQyZDU3NzQ5NzgyZTgyYjlmZmJkMDhlMjc5ZDRiOGIwOWE2
|
14
|
+
ODkxNTVlZTI2YzQ2ZTEwZjA1YmZiYjM2ZmNjODQ2NjE2Yjk2YWI5MDAxYzhj
|
15
|
+
YzEzZjE4NjY3NDQwODBiOWJhMmM5YWJiOGVmMDc0MWM4MWUyM2M=
|
data/README.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# AWSSSH
|
2
|
+
|
3
|
+
Im [Mitarbeiterhandbuch](https://employeeapps.infopark.de/manual/03_Security) sind SSH-Configurationen vorgegeben, mit denen man alle AWS-EC2s abfängt.
|
4
|
+
Da ich aber nicht jedesmal nachschauen will, wie der Public-DNS Name einer instance ist, will ich das weiterhin in meiner ssh config pflegen und habe dort einträge wie:
|
5
|
+
|
6
|
+
```Host sihl-live1
|
7
|
+
Hostname ec2-54-194-243-71.eu-west-1.compute.amazonaws.com```
|
8
|
+
|
9
|
+
da ein Aufruf von `$ ssh sihl-live1` dann aber die einstellung ignoriert der umweg über dieses script.
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
|
13
|
+
1. Herunterladen
|
14
|
+
2. an die Stelle verschieben, an der es am ende liegen soll
|
15
|
+
3. wenn bei 2. nicht /usr/* angegeben ist `rake install` ausführen. Das erstellt ein Link in `/usr/local/bin`
|
16
|
+
|
17
|
+
### Configurationen
|
18
|
+
1. Das zum Umschalten der AWS Config muss das script über `awscfg <kundenname>` aufrufbar sein.
|
19
|
+
2. Die Konfigurationsdateien müssen unter `/Users/<username>/.aws/` liegen.
|
20
|
+
3. Die Konfigurationsdateien müssen den Namen `aws_config_<kundenname>` heißen.
|
21
|
+
|
22
|
+
## Aufruf
|
23
|
+
|
24
|
+
`awsssh HOST`
|
25
|
+
|
26
|
+
**Beispiel**<br>
|
27
|
+
`awsssh sihl-live1`
|
28
|
+
|
29
|
+
## Hilfe
|
30
|
+
|
31
|
+
`awsssh --help`<br>
|
32
|
+
Zeigt die Hilfe an
|
33
|
+
|
34
|
+
## Inhalte
|
35
|
+
|
36
|
+
`Gemfile`: zum installieren aller benötigten gems<br>
|
37
|
+
`README.md`: diese README<br>
|
38
|
+
`Rakefile`: für die installation<br>
|
39
|
+
`awsssh.rb`: Erstellt die verbidnung (Programmlogik)<br>
|
40
|
+
|
41
|
+
## Kontakt
|
42
|
+
|
43
|
+
Sebastian Thiele <[mailto:sebastian.thiele@infopark.de]>
|
data/awsssh.gemspec
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'awsssh'
|
3
|
+
s.version = '2.0.1'
|
4
|
+
s.date = '2014-02-27'
|
5
|
+
s.summary = "Connects you with OpsWorks EC2"
|
6
|
+
s.description = "This will connects you with an EC3 instace"
|
7
|
+
s.authors = ["Sebastian Thiele"]
|
8
|
+
s.email = [%w(Sebastian.Thiele infopark.de).join('@')]
|
9
|
+
s.license = "MIT"
|
10
|
+
s.files = `git ls-files`.split("\n")
|
11
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
12
|
+
s.homepage = "https://github.com/infopark/support/tree/master/scripte/ruby/awsssh"
|
13
|
+
|
14
|
+
|
15
|
+
s.add_runtime_dependency "net-ssh", "2.7.0"
|
16
|
+
end
|
data/bin/awsssh
ADDED
data/lib/awsssh.rb
ADDED
@@ -0,0 +1,179 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rubygems'
|
3
|
+
require 'net/ssh'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
class Awsssh
|
7
|
+
|
8
|
+
def do_start
|
9
|
+
if ARGV[0] == "--list-accounts"
|
10
|
+
list_accounts
|
11
|
+
elsif ARGV[0] == "--list-servers" && !ARGV[1].nil?
|
12
|
+
list_servers(ARGV[1])
|
13
|
+
elsif !ARGV[0].nil? && ARGV[0][0,2] != "--"
|
14
|
+
connect ARGV[0]
|
15
|
+
else
|
16
|
+
help
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
CONFIG_DIR = "/Users/#{ENV['USER']}/.aws/"
|
21
|
+
CONF_FILE = "aws_config_"
|
22
|
+
##
|
23
|
+
# Renders the Help
|
24
|
+
#
|
25
|
+
# * *Returns* :
|
26
|
+
# - [String]
|
27
|
+
# usage: awsssh [<instance-name>|parameters]
|
28
|
+
# <instance-name> Name of the instance
|
29
|
+
# parameters:
|
30
|
+
# --help This help
|
31
|
+
# --list-accounts List all known AWS Accounts
|
32
|
+
# --list-servers <account> List all Server for an AWS Account
|
33
|
+
|
34
|
+
def help
|
35
|
+
length = 30
|
36
|
+
puts "usage: awsssh [<instance-name>|parameters]"
|
37
|
+
printf "\t %-#{length}s Name of the instance\n", "<instance-name>"
|
38
|
+
puts "parameters:"
|
39
|
+
printf "\t %-#{length}s This help\n", "--help"
|
40
|
+
printf "\t %-#{length}s List all known AWS Accounts\n", "--list-accounts"
|
41
|
+
printf "\t %-#{length}s List all Server for an AWS Account\n", "--list-servers <account>"
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
##
|
46
|
+
# List stacks for a account
|
47
|
+
#
|
48
|
+
# * *Args* :
|
49
|
+
# - +account+ -> Account name
|
50
|
+
#
|
51
|
+
# * *Returns* :
|
52
|
+
# - [Array] StackIDs
|
53
|
+
|
54
|
+
def list_stacks(account)
|
55
|
+
awscfg(account)
|
56
|
+
stacks = JSON.parse(`aws opsworks describe-stacks`)
|
57
|
+
stack_ids = []
|
58
|
+
stacks['Stacks'].each do |stack|
|
59
|
+
stack_ids << stack['StackId']
|
60
|
+
end
|
61
|
+
return stack_ids
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
##
|
66
|
+
# Read Stack
|
67
|
+
#
|
68
|
+
# * *Args* :
|
69
|
+
# - +stackid+ -> Stack ID
|
70
|
+
# - +account+ -> Account name
|
71
|
+
#
|
72
|
+
# * *Returns* :
|
73
|
+
# - Stecks JSON
|
74
|
+
#
|
75
|
+
|
76
|
+
def read_stack(stackid, account)
|
77
|
+
# `awscfg #{account}`
|
78
|
+
awscfg(account)
|
79
|
+
JSON.parse(`aws opsworks describe-instances --stack-id #{stackid}`)
|
80
|
+
end
|
81
|
+
|
82
|
+
##
|
83
|
+
# Lists all AWS Accounts
|
84
|
+
#
|
85
|
+
# * *Returns* :
|
86
|
+
# - [String]
|
87
|
+
# This are the known AWS Accounts:
|
88
|
+
# - account
|
89
|
+
|
90
|
+
def list_accounts
|
91
|
+
length = 30
|
92
|
+
puts "This are the known AWS Accounts:"
|
93
|
+
config_files = Dir.entries(CONFIG_DIR)
|
94
|
+
config_files.each do |file|
|
95
|
+
if file[0,CONF_FILE.length] == CONF_FILE
|
96
|
+
file_part = file.split("_")
|
97
|
+
unless file_part[2].nil?
|
98
|
+
printf "\t- %-#{length}s\n", file_part[2]
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
##
|
105
|
+
# Server Name
|
106
|
+
#
|
107
|
+
# * *Args* :
|
108
|
+
# - +stack+ -> Stack as JSON
|
109
|
+
#
|
110
|
+
# * *Returns* :
|
111
|
+
# - [String]
|
112
|
+
# - <servername> (<status>)
|
113
|
+
|
114
|
+
def server_name(stack)
|
115
|
+
stack["Instances"].each do |instance|
|
116
|
+
printf "\t- %-20s %s\n", instance["Hostname"], instance["Status"]
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
##
|
121
|
+
# List all Servers for a given AWS Account
|
122
|
+
#
|
123
|
+
# * *Args* :
|
124
|
+
# - +account+ -> AWS Account name
|
125
|
+
#
|
126
|
+
|
127
|
+
def list_servers(account)
|
128
|
+
stacks = list_stacks account
|
129
|
+
stacks.each do |stack_id|
|
130
|
+
stack = read_stack stack_id, account
|
131
|
+
server_name stack
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
##
|
136
|
+
# Establish the connection
|
137
|
+
#
|
138
|
+
# * *Args* :
|
139
|
+
# - +server+ -> Server name
|
140
|
+
#
|
141
|
+
|
142
|
+
def connect(server)
|
143
|
+
host = server.split("-")
|
144
|
+
public_dns = nil
|
145
|
+
stack_ids = list_stacks host[0]
|
146
|
+
stack_ids.each do |stack_id|
|
147
|
+
stack = read_stack(stack_id, host[0])
|
148
|
+
stack["Instances"].each do |i|
|
149
|
+
if i["Hostname"] == server
|
150
|
+
public_dns = i["PublicDns"]
|
151
|
+
break
|
152
|
+
end
|
153
|
+
end
|
154
|
+
break unless public_dns.nil?
|
155
|
+
end
|
156
|
+
|
157
|
+
if public_dns.nil?
|
158
|
+
puts "Server '#{server}' not found. Try ssh"
|
159
|
+
exec "ssh #{server}"
|
160
|
+
exit -1
|
161
|
+
end
|
162
|
+
|
163
|
+
puts "Connecting to #{server} (#{public_dns})"
|
164
|
+
exec "ssh #{public_dns}"
|
165
|
+
|
166
|
+
end
|
167
|
+
|
168
|
+
def awscfg(account)
|
169
|
+
if File.exists?(CONFIG_DIR + CONF_FILE + account)
|
170
|
+
`awscfg #{account}`
|
171
|
+
else
|
172
|
+
puts "No config #{CONF_FILE}#{account} found"
|
173
|
+
exit -1
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
|
178
|
+
|
179
|
+
end
|
metadata
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: awsssh
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sebastian Thiele
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-02-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: net-ssh
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.7.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.7.0
|
27
|
+
description: This will connects you with an EC3 instace
|
28
|
+
email:
|
29
|
+
- Sebastian.Thiele@infopark.de
|
30
|
+
executables:
|
31
|
+
- awsssh
|
32
|
+
extensions: []
|
33
|
+
extra_rdoc_files: []
|
34
|
+
files:
|
35
|
+
- README.md
|
36
|
+
- awsssh.gemspec
|
37
|
+
- bin/awsssh
|
38
|
+
- lib/awsssh.rb
|
39
|
+
homepage: https://github.com/infopark/support/tree/master/scripte/ruby/awsssh
|
40
|
+
licenses:
|
41
|
+
- MIT
|
42
|
+
metadata: {}
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ! '>='
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ! '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
requirements: []
|
58
|
+
rubyforge_project:
|
59
|
+
rubygems_version: 2.2.1
|
60
|
+
signing_key:
|
61
|
+
specification_version: 4
|
62
|
+
summary: Connects you with OpsWorks EC2
|
63
|
+
test_files: []
|
64
|
+
has_rdoc:
|