direct_ssh 0.1.8 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YjA1OTA3N2M3NjRkNzUwMTUzYjJiYzIzMjM2NWYwMDcwYzA1M2U1Ng==
5
- data.tar.gz: !binary |-
6
- NGQ1OTk3YjM0MDg4ZjNlYjQyZDdjODM0MWFmYTFjMWJlMzM1ZTUzNQ==
2
+ SHA256:
3
+ metadata.gz: ba1c3e2ba267144d1f487937d263c3a85e7ffb1d261a3f8d67bfe27d57fd3f98
4
+ data.tar.gz: 2484d5d0ba106029424be7f72d3bd571802bacedbbb868c339d03072eab8b20e
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- MGU2YmViMDA3NzhmZWQ1OTVkN2Y2N2U3MTEyOTdlYTEyYzI4ZmZlZjAzYTQ1
10
- ZDgwNDYzNDZhYzU5MWNkM2Q3MWMzZDVmZTg1YmJlYTAyNzlmZDBhNzNlMzEy
11
- OWQ5OGRhMmJmNWE4ZjkyMGVjNzI0Njk0YTVkZDQ3NjBkMGNlYmU=
12
- data.tar.gz: !binary |-
13
- ZDA1MmUyNjExN2M5OTBhZGI0MDJiNzIxNTEyZTllMDQ2OWI0ZDY4NWQ2M2Rm
14
- ZWZhNGFiY2RhOWZkZWQ2ZjY4Mjk2ZWFiYTBjMTRhZDUwY2RhM2UzZWQ1N2Vk
15
- NTQ5YjE1MDEyMGFlNjdkZmNjMDk1OTI3MzU1ZjEwZDM2NDNmMjk=
6
+ metadata.gz: b80618a834bdc9c1f8885c2564a6e8e43edd02c24a2fad1ec1f87fb92f1441f2f18679754e20e9a11b49f0bf9e3c1812d56e066a92a6a7dff7e90c268b748387
7
+ data.tar.gz: b7b938d32d68bbde55b346e61020b0f7515cc018cd5bd1786971659362e1016f517cd6dc2de36082dd81f956db91f0c98c5c5aca5ad8581634d278ea66da0578
@@ -24,8 +24,7 @@ def main(argv)
24
24
  host, user, port = parse_args(argv)
25
25
 
26
26
  DirectSsh.start(host, user, {:port => port}) { |ssh|
27
- puts ssh.exec!('cat /etc/*-release')
28
- puts 'Direct SSH connected successfully'
27
+ system "ssh #{user}@#{host} -p #{port}"
29
28
  }
30
29
  rescue ArgumentError => e
31
30
  $stderr.puts e.message
@@ -6,24 +6,24 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
6
  require 'direct_ssh/version'
7
7
 
8
8
  Gem::Specification.new do |spec|
9
- spec.name = "direct_ssh"
10
- spec.version = DirectSsh::VERSION
11
- spec.authors = ["Xia Xiongjun"]
12
- spec.email = ["xxjapp@gmail.com"]
13
- spec.description = %q{In order to use SSH or SCP without the need to enter password every time, this gem will create public/private ssh rsa keys if they do not exist and send public key to remote server automatically only if necessary.}
14
- spec.summary = %q{Use SSH or SCP directly without the need to enter password every time}
15
- spec.homepage = %q{https://github.com/xxjapp/direct_ssh}
16
- spec.license = "MIT"
9
+ spec.name = "direct_ssh"
10
+ spec.version = DirectSsh::VERSION
11
+ spec.authors = ["Xia Xiongjun"]
12
+ spec.email = ["xxjapp@gmail.com"]
13
+ spec.description = %q{In order to use SSH or SCP without the need to enter password every time, this gem will create public/private ssh rsa keys if they do not exist and send public key to remote server automatically only if necessary.}
14
+ spec.summary = %q{Use SSH or SCP directly without the need to enter password every time}
15
+ spec.homepage = %q{https://github.com/xxjapp/direct_ssh}
16
+ spec.license = "MIT"
17
17
 
18
- spec.files = `git ls-files`.split($/)
19
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
- spec.require_paths = ["lib"]
18
+ spec.files = `git ls-files`.split($/)
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
+ spec.require_paths = ["lib"]
22
22
 
23
- spec.add_runtime_dependency "net-ssh", "~> 2.6"
24
- spec.add_runtime_dependency "net-scp", "~> 1.1"
25
- spec.add_runtime_dependency "highline"
23
+ spec.add_runtime_dependency "net-ssh", "~> 5.2"
24
+ spec.add_runtime_dependency "net-scp", "~> 2.0"
25
+ spec.add_runtime_dependency "highline", "~> 2.0"
26
26
 
27
- spec.add_development_dependency "bundler", "~> 1.3"
28
- spec.add_development_dependency "rake"
27
+ spec.add_development_dependency "bundler", "~> 2.1"
28
+ spec.add_development_dependency "rake", "~> 13.0"
29
29
  end
@@ -6,7 +6,7 @@ require 'base64'
6
6
 
7
7
  module KeyHandler
8
8
  def self.send_key_to_remote(ssh)
9
- ssh_public_key = get_ssh_public_key
9
+ ssh_public_key = get_ssh_public_key.chomp
10
10
  send_ssh_public_key_to_remote(ssh, ssh_public_key)
11
11
  end
12
12
 
@@ -33,10 +33,10 @@ module KeyHandler
33
33
 
34
34
  def self.create_ssh_files
35
35
  FileUtils.mkdir_p Dir.home + '/.ssh'
36
- FileUtils.touch Dir.home + '/.ssh/id_rsa'
37
- FileUtils.touch Dir.home + '/.ssh/id_rsa.pub'
38
- FileUtils.touch Dir.home + '/.ssh/authorized_keys'
39
- FileUtils.touch Dir.home + '/.ssh/known_hosts'
36
+ FileUtils.touch Dir.home + '/.ssh/id_rsa'
37
+ FileUtils.touch Dir.home + '/.ssh/id_rsa.pub'
38
+ FileUtils.touch Dir.home + '/.ssh/authorized_keys'
39
+ FileUtils.touch Dir.home + '/.ssh/known_hosts'
40
40
  end
41
41
 
42
42
  # see: http://www.noah.org/wiki/SSH_public_keys
@@ -61,34 +61,73 @@ module KeyHandler
61
61
  ################################################################
62
62
  # remote ssh key process
63
63
 
64
+ def self.is_windows?(ssh)
65
+ ssh.exec!("echo %os%").chomp != "%os%"
66
+ end
67
+
64
68
  def self.send_ssh_public_key_to_remote(ssh, key)
69
+ is_win = is_windows?(ssh)
70
+
65
71
  if !remote_file_exists?(ssh, '~/.ssh/authorized_keys')
66
- remote_create_ssh_files(ssh)
67
- remote_chmod_ssh_files(ssh)
72
+ remote_create_ssh_files(ssh, is_win)
73
+ remote_chmod_ssh_files(ssh, is_win)
68
74
  end
69
75
 
70
- # append public_key to remote '~/.ssh/authorized_keys'
71
- ssh.exec!("echo '#{key}' >> ~/.ssh/authorized_keys")
76
+ remote_append_key(ssh, key, is_win)
72
77
  end
73
78
 
74
79
  def self.remote_file_exists?(ssh, path)
75
- ssh.exec!("[ ! -f #{path} ] && echo NOT_EXIST") == nil
80
+ # windows & linux OK
81
+ # path including '~/' OK
82
+ ssh.exec!("[ ! -f #{path} ] && echo NOT_EXIST").empty?
76
83
  end
77
84
 
78
- def self.remote_create_ssh_files(ssh)
79
- ssh.exec!('mkdir -p ~/.ssh')
80
- ssh.exec!('touch ~/.ssh/id_rsa')
81
- ssh.exec!('touch ~/.ssh/id_rsa.pub')
82
- ssh.exec!('touch ~/.ssh/authorized_keys')
83
- ssh.exec!('touch ~/.ssh/known_hosts')
85
+ def self.remote_create_ssh_files(ssh, is_win)
86
+ if is_win
87
+ ssh_exec!(ssh, 'mkdir .ssh')
88
+ ssh_exec!(ssh, 'touch .ssh\id_rsa')
89
+ ssh_exec!(ssh, 'touch .ssh\id_rsa.pub')
90
+ ssh_exec!(ssh, 'touch .ssh\authorized_keys')
91
+ ssh_exec!(ssh, 'touch .ssh\known_hosts')
92
+ else
93
+ ssh_exec!(ssh, 'mkdir ~/.ssh')
94
+ ssh_exec!(ssh, 'touch ~/.ssh/id_rsa')
95
+ ssh_exec!(ssh, 'touch ~/.ssh/id_rsa.pub')
96
+ ssh_exec!(ssh, 'touch ~/.ssh/authorized_keys')
97
+ ssh_exec!(ssh, 'touch ~/.ssh/known_hosts')
98
+ end
84
99
  end
85
100
 
86
101
  # see: http://www.noah.org/wiki/SSH_public_keys
87
- def self.remote_chmod_ssh_files(ssh)
88
- ssh.exec!('chmod 700 ~/.ssh')
89
- ssh.exec!('chmod 600 ~/.ssh/id_rsa')
90
- ssh.exec!('chmod 644 ~/.ssh/id_rsa.pub')
91
- ssh.exec!('chmod 644 ~/.ssh/authorized_keys')
92
- ssh.exec!('chmod 644 ~/.ssh/known_hosts')
102
+ def self.remote_chmod_ssh_files(ssh, is_win)
103
+ if is_win
104
+ # puts "NOTE 1: The default mode on windows should work"
105
+ # puts "NOTE 2: 'chmod' is not available or doesn't work on windows."
106
+ # puts " If password asked, try to handle according to"
107
+ # puts " https://social.technet.microsoft.com/Forums/Azure/en-US/e4c11aed-1d8b-4ff4-89ad-c90c62e13ce0/ssh-asking-for-password-even-i-have-private-key"
108
+ # puts " and log file C:\\ProgramData\\ssh\\logs\\sshd.log"
109
+ else
110
+ ssh_exec!(ssh, 'chmod 700 ~/.ssh')
111
+ ssh_exec!(ssh, 'chmod 600 ~/.ssh/id_rsa')
112
+ ssh_exec!(ssh, 'chmod 644 ~/.ssh/id_rsa.pub')
113
+ ssh_exec!(ssh, 'chmod 644 ~/.ssh/authorized_keys')
114
+ ssh_exec!(ssh, 'chmod 644 ~/.ssh/known_hosts')
115
+ end
116
+ end
117
+
118
+ # append public_key to remote '~/.ssh/authorized_keys'
119
+ def self.remote_append_key(ssh, key, is_win)
120
+ if is_win
121
+ ssh_exec!(ssh, "echo #{key} >> .ssh\\authorized_keys")
122
+ else
123
+ ssh_exec!(ssh, "echo #{key} >> ~/.ssh/authorized_keys")
124
+ end
125
+ end
126
+
127
+ def self.ssh_exec!(ssh, cmd)
128
+ # puts "# #{cmd}"
129
+ res = ssh.exec! cmd
130
+ # puts res.force_encoding('SJIS').encode('UTF-8')
131
+ res
93
132
  end
94
133
  end
@@ -1,3 +1,3 @@
1
1
  module DirectSsh
2
- VERSION = "0.1.8"
2
+ VERSION = "2.1.1"
3
3
  end
metadata CHANGED
@@ -1,85 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: direct_ssh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Xia Xiongjun
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-06 00:00:00.000000000 Z
11
+ date: 2020-09-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: net-ssh
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.6'
19
+ version: '5.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.6'
26
+ version: '5.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: net-scp
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.1'
33
+ version: '2.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.1'
40
+ version: '2.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: highline
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '2.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '2.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.3'
61
+ version: '2.1'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.3'
68
+ version: '2.1'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ! '>='
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '13.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ! '>='
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: '13.0'
83
83
  description: In order to use SSH or SCP without the need to enter password every time,
84
84
  this gem will create public/private ssh rsa keys if they do not exist and send public
85
85
  key to remote server automatically only if necessary.
@@ -92,7 +92,7 @@ executables:
92
92
  extensions: []
93
93
  extra_rdoc_files: []
94
94
  files:
95
- - .gitignore
95
+ - ".gitignore"
96
96
  - Gemfile
97
97
  - LICENSE.txt
98
98
  - README.md
@@ -115,17 +115,16 @@ require_paths:
115
115
  - lib
116
116
  required_ruby_version: !ruby/object:Gem::Requirement
117
117
  requirements:
118
- - - ! '>='
118
+ - - ">="
119
119
  - !ruby/object:Gem::Version
120
120
  version: '0'
121
121
  required_rubygems_version: !ruby/object:Gem::Requirement
122
122
  requirements:
123
- - - ! '>='
123
+ - - ">="
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  requirements: []
127
- rubyforge_project:
128
- rubygems_version: 2.4.8
127
+ rubygems_version: 3.1.4
129
128
  signing_key:
130
129
  specification_version: 4
131
130
  summary: Use SSH or SCP directly without the need to enter password every time