Browse Source

added scp

chrisdrakeford 2 years ago
parent
commit
e9ceea927d
4 changed files with 94 additions and 38 deletions
  1. 1 0
      .gitignore
  2. 13 11
      index.js
  3. 46 0
      scp.js
  4. 34 27
      ssh.js

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
+.env

+ 13 - 11
index.js

@@ -2,11 +2,10 @@ const express = require("express");
 const fs = require("fs");
 const fileUpload = require("express-fileupload");
 const ssh = require("./ssh");
+const scp = require("./scp");
 
 const app = express();
 
-let sshClient;
-
 // Necessary to have access to the file in the req object
 app.use(
   fileUpload({
@@ -14,25 +13,28 @@ app.use(
   })
 );
 
-app.post("/api", async function (req, res) {
+app.post("/api", function (req, res) {
   if (!req.files) {
     res.send("File was not found");
     return;
   }
 
-  fs.writeFile("/Users/chrisdrakeford/Apitest/" + req.files.file1234.name,req.files.file1234.data,function(err){
-    if(err) throw err;
-    console.log("receieved");
- 
-});
+const fileName = req.files.file1234.name;
+console.log("/Users/chrisdrakeford/Apitest/" + fileName)
 
-  await sshClient.uploadFile(req.files.file1234.name,"/home/cdrakeford/apitest/");
+fs.writeFile("/Users/chrisdrakeford/Apitest/" + fileName,req.files.file1234.data,function(err){
+  if(err) throw err;
+  console.log("receieved");
 
+scp.scp1(fileName);
+ssh.booleToGrove();
+scp.scp2(fileName);
+ssh.startGrove();
 
+});
   res.status(200).end();
 });
 
-app.listen(443, async () => {
+app.listen(443, () => {
   console.log("App listening on 443");
-  sshClient = await ssh.start();
 });

+ 46 - 0
scp.js

@@ -0,0 +1,46 @@
+const { Client } = require('node-scp')
+const dotenv = require("dotenv").config();
+const ssh = require("./ssh");
+
+// with ES Module
+function scp1(fileName)
+{
+Client({
+	host: process.env.BOOLE,
+    port: 22,
+    username: process.env.SSH_USER,
+    password: process.env.SSH_PASSWORD,
+    tryKeyboard: true,
+
+}).then(client => {
+  client.uploadFile("/Users/chrisdrakeford/Apitest/" + fileName, "/home/cdrakeford/apitest/" + fileName)
+        .then(response => {
+		  console.log(fileName + " uploaded")
+          client.close() // remember to close connection after you finish
+        })
+        .catch(error => {})
+}).catch(e => console.log(e))
+}
+
+function scp2(fileName)
+{
+Client({
+	host: process.env.GROVE,
+    port: 22,
+    username: process.env.SSH_USER,
+    password: process.env.SSH_PASSWORD,
+    tryKeyboard: true,
+
+}).then(client => {
+  client.uploadFile("/home/cdrakeford/apitest/" + fileName, "/home/cdrakeford/apitest/" + fileName)
+        .then(response => {
+		  console.log(fileName + " uploaded")
+          client.close() // remember to close connection after you finish
+        })
+        .catch(error => {})
+}).catch(e => console.log(e))
+}
+module.exports = {
+	scp1,
+	scp2,
+}

+ 34 - 27
ssh.js

@@ -1,20 +1,18 @@
-const { Client } = require("node-scp");
+const { Client } = require("ssh2");
 const dotenv = require("dotenv").config();
 
 const client1 = new Client();
+const client2 = new Client();
 
-
-async function startClient1() {
-  await client1.on('ready', () => {
-    console.log('FIRST :: connection ready');
-    // Alternatively, you could use something like netcat or socat with exec()
-    // instead of forwardOut(), depending on what the server allows
-    conn1.forwardOut(process.env.BOOLE, 12345, process.env.GROVE, 22, (err, stream) => {
+  function booleToGrove(){
+    client1.on('ready', () => {
+      console.log('FIRST :: connection ready');
+    client1.forwardOut(process.env.BOOLE, 12345, process.env.GROVE, 22, (err, stream) => {
       if (err) {
         console.log('FIRST :: forwardOut error: ' + err);
         return conn1.end();
       }
-      conn2.connect({
+      client2.connect({
         sock: stream,
         username: process.env.SSH_USER,
         password: process.env.SSH_PASSWORD,
@@ -22,28 +20,37 @@ async function startClient1() {
       });
     });
   }).connect({
-    host: process.env.BOOLE,
-    port: 22,
-    username: process.env.SSH_USER,
-    password: process.env.SSH_PASSWORD,
-    tryKeyboard: true,
-  });
-  
-  const client2.on = await Client('ready', () => {
-    console.log('Client :: ready');
-    conn.shell((err, stream) => {
-      if (err) throw err;
+  host: process.env.BOOLE,
+  username: process.env.SSH_USER,
+  password: process.env.SSH_PASSWORD,
+});
+}
+
+  function startGrove(){
+  client2.on('ready', () => {
+    // This connection is the one to 10.1.1.40
+  console.log('SECOND :: connection ready');
+    client2.shell('uptime', (err, stream) => {
+      if (err) {
+        console.log('SECOND :: exec error: ' + err);
+        return client1.end();
+      }
+
       stream.on('close', () => {
-        console.log('Stream :: close');
-        conn.end();
+        client1.end(); // close parent (and this) connection
       }).on('data', (data) => {
-        console.log('OUTPUT: ' + data);
+        
+        console.log(data.toString());
       });
-      stream.end('ls -l\nexit\n');
     });
   })
+  //return client2;
+
 }
-  return client2;
+
 module.exports = {
-  startClient1,
-};
+  //startBoole,
+  startGrove,
+  //scpToBoole,
+  booleToGrove,
+}