@ethicdevs/gitfoss | Show object: 3079db60013edba8b85fdfb6b7c47b21e6fade0c ∙ GitFOSS
refactor(ssh_command): make it works
+ 21
- 15
@@ -67,7 +67,7 @@ RUN crystal build --release ./packages/gitfoss-ssh-command/src/ssh-command.cr
 
 COPY ./public              /usr/src/app/public
 COPY ./app.manifest.json   /usr/src/app/app.manifest.json
-COPY ./packages/gitfoss-ssh-command/ssh-command /usr/src/app/bin/ssh-command
+COPY ./packages/gitfoss-ssh-command/bin/ssh_command /usr/src/app/bin/ssh_command
 # COPY ./dist                /usr/src/app/dist
 
 FROM node:slim AS base

...
@@ -175,7 +175,7 @@ RUN chown git:git git-shell-commands/no-interactive-login
 RUN chmod +x git-shell-commands/no-interactive-login
 
 # Add ssh command to force client command
-COPY --from=builder /usr/src/app/bin/ssh-command /usr/bin/ssh_command
+COPY --from=builder /usr/src/app/bin/ssh_command /usr/bin/
 # COPY ./data/ssh_command /usr/bin/
 COPY ./data/ssh_command_node /usr/bin/
 COPY ./data/http_client.js /usr/bin/

@@ -1,3 +1 @@
-command="/usr/local/bin/git-upload-pack-wrapper wnemencha",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDGo9GDFyJ8RJ4F+Y4Vxl2bCl8sskRYbiSWItmoBZoYFVR2qAvUyowDY2xlDa9JaG/+zbBB6sUwUr8oC/GdSaV+zp5CTP2RxcXDW2Aup6w1/a4qiilSKORMXBWvIgjyvVvHjG0TiCfeC0PfBbXCO8FhLxP5lgTrl1kVUduM0LR4/gcH3vIrrKbORWtfAC7Bw6z3qc/X9CysPxtQZYu6+AknJ1vwUtLAH2H9cKS8uwaJ5N/k0n8Sc8ANozdpp7EyodA12nFFwvf5oPakTdm5cBnnnEIe2p+GA4nP2DyybmtIR/wttJGMs6Bmz0bXO6AfFdhcGKbzwT2qEGRX5drQj0qUI+gLSZ42/9DsGN7kr2gRDpXG2ATx+c4H2XvR3fqS1cyFq+ZmezK4l32BH/KjQMR1zfgeX2Ky46YxOLQn84PvWILmpzYPLTJ02kXFr0pjofraX2h0E/0Ke2ZBPlOUcaNZOU2dJDYn/B0GVrJ0niopvseYpVXHoTzMPYpr+ReCfAc= admin@Admins-MacBook-Pro.local
-command="/usr/local/bin/git-upload-pack-wrapper willi.wonka38",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCbpfyW60ydd3p0xQAozzB2lecE4NG9KyUbd/mRl+EPEOm4pnh3oIqbGLs42QYgKc1H8bkEEddFvnayN+JHJIwsRBSv3YMMsbTRHp6onHgsVHMaO+nNyubONwb7eLfR+5PvZ4eeOwbJpgfLwW2tVpoqLiTRpF8DFijYQePqGqQzFwWXx9niHHb3s1pqDPGjiqlEqbJPT4MyIdHo66M8SJMFL12uIUq33Wm3PRCtPDMs4FdW0fpvQpaBqu6cb71WrH8MDRC5IGT2KC3MD7flVfayUoSsdo3I/zzkom8t34Ee0b7NkQ0jvcsVves/Vz36YCZ/W7pNiKYi18B3sLIxpwI9a9k+kYt5a/5kz5izmeVbiVK2PDk45GN2b0RCfMb3uT3v5MwcJjKf5h52WYVjh0Uzj8AC4ZOtW84BAVrnX4hkBirN6oOYJB8/8pHvtAq5WSFtJnPzz1rL/mOFSsr/HS5Jo8KSsrH8uZHz2QWr6T6PDDGOjiEc44JTPOxqywUXo7Cs5TvicLhqWXdPokTmVftoG0pRpVWi9ctvGc1GRXviEWgvJZyqx/yDdtvrjKWDNjIM3jww1Blrb0R1o/0wvvHFfTf8flvW4SC7POXG0bXp/ANSGnTXIiAQk9JGmU6ntCqVebtNis60Xvbfj5gMGsEv1rhM1cyMcvIfT20ASZo6hw== aremy.dev@gmail.com
-command="/usr/local/bin/git-upload-pack-wrapper willi.wonka38",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC2gwbtNQtNTLbvyd8/B7k+dzOiYMYKfjbmr5x8DQUZr+K9367D3TzQ6wDMQBWnDu5FIKoKvAFTP3tHhV5p+3GMXqzS/2PCtzV7WHlUtJ7vVxsREoQVrHCS0KZ7+KT5F+daV4VKmnCqr6qfeirvCc1XS/feBnp+P9ctGjMj+PEdkaAv3JaOVpH3bROaokTiTdr4NPF73hM2jAhEo8V7IJwd6e/GlWM4X6rp1QL5cB38utbxIBqq8GYUeX021OLoQoRazXTC27Xwn3i1+w9uqA97KYfSk5pKwrv1+V9JfiHUmaQRB08+nd9hi0dDARJaiar5ipJZ6fioWTM+lqDhEFxBTz9Xfioa1HkpBfh8gW3nsQAJBYUaqUifn5ucJJCu3zZJwTynP4/CGe6g1K7uNjKCHXUx4Lnmw5wcQGCLsSEFc6Pc8QUxjuJ7R5pzvNOTC2omAAoZvHtinj+pHCG6mM4FmL0Wic8qDOLDCeyFS8zHMa2bzulFpwr2tyNcX3xGFT8= xana@blackstorm
+command="ssh_command willi.wonka38 %k %f %r %i %p %t %l %n %h %d %u",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC2gwbtNQtNTLbvyd8/B7k+dzOiYMYKfjbmr5x8DQUZr+K9367D3TzQ6wDMQBWnDu5FIKoKvAFTP3tHhV5p+3GMXqzS/2PCtzV7WHlUtJ7vVxsREoQVrHCS0KZ7+KT5F+daV4VKmnCqr6qfeirvCc1XS/feBnp+P9ctGjMj+PEdkaAv3JaOVpH3bROaokTiTdr4NPF73hM2jAhEo8V7IJwd6e/GlWM4X6rp1QL5cB38utbxIBqq8GYUeX021OLoQoRazXTC27Xwn3i1+w9uqA97KYfSk5pKwrv1+V9JfiHUmaQRB08+nd9hi0dDARJaiar5ipJZ6fioWTM+lqDhEFxBTz9Xfioa1HkpBfh8gW3nsQAJBYUaqUifn5ucJJCu3zZJwTynP4/CGe6g1K7uNjKCHXUx4Lnmw5wcQGCLsSEFc6Pc8QUxjuJ7R5pzvNOTC2omAAoZvHtinj+pHCG6mM4FmL0Wic8qDOLDCeyFS8zHMa2bzulFpwr2tyNcX3xGFT8= xana@blackstorm

new file
packages/gitfoss-ssh-command/.gitignore
@@ -0,0 +1,2 @@
+bin/
+lib/

file deleted
packages/gitfoss-ssh-command/bin/ssh_command
file deleted
packages/gitfoss-ssh-command/invoke-from-fake-ssh.sh
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-SSH_ORIGINAL_COMMAND="git-receive-pack aaaa" ./ssh-command skz aaaa ffff

packages/gitfoss-ssh-command/src/ssh-command.cr
@@ -30,23 +30,30 @@ PATTERNS = [
 ]
 
 # prefix
-SIDEBAND_PREFIX = "remote: "
+SIDEBAND_PREFIX = "0008" + "\x02"
+SIDEBAND_ERR_PREFIX = "0008" + "\x03"
 
 # ---------- Helpers ----------
 def write_to_file(msg : String)
-  File.write(filename: LOG_FILE, content: "#{msg}\n", encoding: "utf-8")
+  txt = msg.gsub(SIDEBAND_PREFIX, "").gsub(SIDEBAND_ERR_PREFIX, "")
+  File.open(LOG_FILE, mode: "a", encoding: "utf-8") do |file|
+    file.flock_exclusive # prevent concurrent writes
+    file.print "#{txt}\n"
+    file.flush
+    file.flock_unlock
+  end
 end
 
 def die_with_message(msg : String, code = 1)
-  txt = "#{SIDEBAND_PREFIX}#{msg}"
-  STDOUT.puts txt
+  txt = "#{SIDEBAND_ERR_PREFIX}#{msg}\n"
+  STDERR.puts txt
   write_to_file txt
   exit(code)
 end
 
 def sideband_println(msg : String)
-  txt = "#{SIDEBAND_PREFIX}#{msg}"
-  STDOUT.puts txt
+  txt = "#{SIDEBAND_PREFIX}#{msg}\n"
+  STDERR.puts txt
   write_to_file txt
 end
 

...
@@ -160,6 +167,8 @@ end
 AUTH_URL = "https://gitfoss.dev/_ssh/auth"
 TRIGGER_BASE = "https://gitfoss.dev"  # base host for pipeline triggers
 
+write_to_file("#{ARGV.join("")}\n")
+
 # ---------- Step 1: gather inputs ----------
 if ARGV.size < 3
   die_with_message "usage: ssh-command <user> <key_blob> [fingerprint]\n", 2

...
@@ -170,7 +179,7 @@ key_blob = ARGV[1]
 fingerprint = ARGV[2] rescue nil
 
 if ENV["SSH_ORIGINAL_COMMAND"]?.nil?
-  die_with_message "Script has not been invoked by ssh. Missing environment variable SSH_ORIGINAL_COMMAND.\n", 2
+  die_with_message "Script has not been invoked by ssh. Missing environment variable SSH_ORIGINAL_COMMAND.", 2
 end
 
 SSH_ORIGINAL_COMMAND = ENV["SSH_ORIGINAL_COMMAND"]? || ""

file deleted
packages/gitfoss-ssh-command/ssh-command