commit cf2d41429646ebb12785bacea52f573bcc0aa0ed
parent 44f21712387b9a4d37dc05c4aca5796d08af9556
Author: Remy Noulin (Spartatek) <remy.noulin@spartatek.se>
Date: Wed, 23 Nov 2016 09:06:44 +0100
add pem command to setup SSH private key
README.md | 44 +++++++++++++++++++++++++++++++++-
src/gitoff.coffee | 72 ++++++++++++++++++++++++++++++++++++++++++++++++-------
2 files changed, 107 insertions(+), 9 deletions(-)
Diffstat:
| M | README.md | | | 44 | +++++++++++++++++++++++++++++++++++++++++++- |
| M | src/gitoff.coffee | | | 72 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------- |
2 files changed, 107 insertions(+), 9 deletions(-)
diff --git a/README.md b/README.md
@@ -20,7 +20,7 @@ for help.
[https://www.npmjs.com/package/git-off](https://www.npmjs.com/package/git-off)
-# USAGE
+# Quick Start
Setup:
```
@@ -58,6 +58,44 @@ git off env
git off defaults
shows first time config
```
+
+# SSH Setup
+
+Create an SSH key:
+
+```
+ssh-keygen -t rsa
+```
+
+Copy id_rsa.pub file to SSH server and id_rsa to ~/.ssh
+
+Configure your private ssh key:
+
+```
+git off pem ~/.ssh/id_rsa
+```
+
+Use git off scp mode:
+
+```
+git off mode scp
+```
+
+Input user, ssh host and path for store:
+
+```
+git off scp $USER@localhost:offStore
+```
+
+Alternatively, setup SSH with ssh config, edit ~/.ssh/config and add your config:
+
+```
+host localhost
+ HostName localhost
+ IdentityFile ~/.ssh/id_rsa
+ User username
+```
+
# COMMANDS
```
@@ -73,6 +111,10 @@ git off integrity [thisrepo] [enable|disable]
when enabled, the SHA of the file received from the store is
checked again the SHA of the original file
+git off pem [thisrepo] [pathToPrivateKey]
+ set/show git off pem.
+ off.pem is the private key for ssh and scp
+
git off scp [thisrepo] [host]
setup scp config
host has format host:path
diff --git a/src/gitoff.coffee b/src/gitoff.coffee
@@ -13,6 +13,15 @@
# use logger
#
# How to add a new config
+# add variable in runtimeConfig
+# add default settings in offDEFAULTS
+# add a helper in offHelpers
+# add setting of default in offCommands.install
+# add a command for setting value in offCommands
+# print value in offCommands.env
+# add command in CLI parser
+# update help
+#
# How to add a new transport
# How to add a new command
@@ -102,6 +111,7 @@ runtimeConfig =
'offIntegrity': ''
'offScp': ''
'offScpUser': ''
+ 'offPem': ''
'log': ''
# default configuration for first time install
@@ -110,6 +120,7 @@ offDEFAULTS =
'objectPath': '/.git/off/objects'
'mode': 'copy'
'integrity': 'disable'
+ 'pem': ''
'store': '~/.git-off/offStore'
'log': '~/.git-off/log'
'prePush': '#!/bin/sh\ncommand -v git-off >/dev/null 2>&1 || { echo >&2 "\\nThis repository is configured for Git off but \'git-off\' was not found on your path. If you no longer wish to use git off, remove this hook by deleting .git/hooks/pre-push.\\n"; exit 2; }\ngit off pre-push "$@"'
@@ -258,6 +269,12 @@ offHelpers =
runtimeConfig.offIntegrity = expandHome r
runtimeConfig.offIntegrity
+ 'offPem': ->
+ if runtimeConfig.offPem == ''
+ r = gitConfig.get 'off.pem'
+ runtimeConfig.offPem = expandHome r
+ runtimeConfig.offPem
+
'offScp': ->
if runtimeConfig.offScp == ''
runtimeConfig.offScp = gitConfig.get 'off.scphost'
@@ -321,16 +338,28 @@ offHelpers =
sshCmd = '"mkdir -p '+ h_l[1] + '/' + path
sshCmd += '"'
+ # setup ssh/scp private key
+ if offHelpers.offPem() == ''
+ pem = ''
+ else
+ pem = '-i ' + offHelpers.offPem()
+
# ignore error from mkdir for already existing store
if isNaN h_l[2]
- exec 'ssh', [h_l[0], sshCmd], true
+ exec 'ssh', [pem, h_l[0], sshCmd], true
else
- exec 'ssh', ['-p ' + h_l[2], h_l[0], sshCmd], true
+ exec 'ssh', [pem, '-p ' + h_l[2], h_l[0], sshCmd], true
return
'rmAllStore': (path) ->
# rm in remote store
+ # setup ssh/scp private key
+ if offHelpers.offPem() == ''
+ pem = ''
+ else
+ pem = '-i ' + offHelpers.offPem()
+
# scphost format is host:path
h_l = offHelpers.getSSHConfig()
# bug in coffeescript - cant have '"mkdir '+ h_l[1] +'"'
@@ -338,9 +367,9 @@ offHelpers =
sshCmd += '"'
# ignore error from rm
if isNaN h_l[2]
- exec 'ssh', [h_l[0], sshCmd], true
+ exec 'ssh', [pem, h_l[0], sshCmd], true
else
- exec 'ssh', ['-p ' + h_l[2], h_l[0], sshCmd], true
+ exec 'ssh', [pem, '-p ' + h_l[2], h_l[0], sshCmd], true
return
'checkIntegrity': (path) ->
@@ -391,11 +420,17 @@ offHelpers =
f_l = file.split '/'
offHelpers.mkdirStore f_l[0] + '/' + f_l[1]
+ # setup ssh/scp private key
+ if offHelpers.offPem() == ''
+ pem = ''
+ else
+ pem = '-i ' + offHelpers.offPem()
+
h_l = offHelpers.getSSHConfig()
if isNaN h_l[2]
- exec 'scp', [offHelpers.objectPath() + '/' + file, h_l[0] + ':' + h_l[1] + '/' + file]
+ exec 'scp', [pem, offHelpers.objectPath() + '/' + file, h_l[0] + ':' + h_l[1] + '/' + file]
else
- exec 'scp', ['-P ' + h_l[2], offHelpers.objectPath() + '/' + file, h_l[0] + ':' + h_l[1] + '/' + file]
+ exec 'scp', [pem, '-P ' + h_l[2], offHelpers.objectPath() + '/' + file, h_l[0] + ':' + h_l[1] + '/' + file]
return
transport['receive'] = (file) ->
# create file directories in cache
@@ -403,11 +438,17 @@ offHelpers =
if fs.existsSync(offHelpers.objectPath() + '/' + f_l[0] + '/' + f_l[1]) == false
mkdirParents offHelpers.objectPath() + '/' + f_l[0] + '/' + f_l[1]
+ # setup ssh/scp private key
+ if offHelpers.offPem() == ''
+ pem = ''
+ else
+ pem = '-i ' + offHelpers.offPem()
+
h_l = offHelpers.getSSHConfig()
if isNaN h_l[2]
- exec 'scp', [h_l[0] + ':' + h_l[1] + '/' + file, offHelpers.objectPath() + '/' + file]
+ exec 'scp', [pem, h_l[0] + ':' + h_l[1] + '/' + file, offHelpers.objectPath() + '/' + file]
else
- exec 'scp', ['-P ' + h_l[2], h_l[0] + ':' + h_l[1] + '/' + file, offHelpers.objectPath() + '/' + file]
+ exec 'scp', [pem, '-P ' + h_l[2], h_l[0] + ':' + h_l[1] + '/' + file, offHelpers.objectPath() + '/' + file]
if offHelpers.checkIntegrity offHelpers.objectPath() + '/' + file
readStream = fs.createReadStream(offHelpers.objectPath() + '/' + file)
@@ -493,6 +534,8 @@ offCommands =
setCfg('off.mode', offDEFAULTS.mode)
if offHelpers.offIntegrity() == '' or setCfg != gitConfig.set
setCfg('off.integrity', offDEFAULTS.integrity)
+ if offHelpers.offPem() == '' or setCfg != gitConfig.set
+ setCfg('off.pem', offDEFAULTS.pem)
if offHelpers.offStore() == '' or setCfg != gitConfig.set
setCfg('off.store',offDEFAULTS.store)
@@ -532,6 +575,15 @@ offCommands =
console.log 'off.integrity '.blue.bold + offHelpers.offIntegrity()
return
+ 'pem': (setCfg) ->
+ len = process.argv.length
+ pem = process.argv[len-1]
+ if pem != 'pem' and pem != 'thisrepo'
+ setCfg('off.pem', pem)
+ else
+ console.log 'off.pem '.blue.bold + offHelpers.offPem()
+ return
+
'scpUser': (setCfg) ->
len = process.argv.length
scpUser = process.argv[len-1]
@@ -751,6 +803,7 @@ offCommands =
'env': ->
console.log 'off.mode '.blue.bold + offHelpers.offMode()
console.log 'off.integrity '.blue.bold + offHelpers.offIntegrity()
+ console.log 'off.pem '.blue.bold + offHelpers.offPem()
console.log 'off.store '.blue.bold + offHelpers.offStore()
console.log 'off.scphost '.blue.bold + offHelpers.offScp()
console.log 'off.scpuser '.blue.bold + offHelpers.offScpUser()
@@ -786,6 +839,9 @@ if process.argv[2] == 'scp'
if process.argv[2] == 'integrity'
thisrepo offCommands['integrity']
+if process.argv[2] == 'pem'
+ thisrepo offCommands['pem']
+
if process.argv[2] == 'scpuser'
thisrepo offCommands['scpUser']