direct_ssh 0.1.8 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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