SSH ForceCommand для оболочки при сохранении возможности обычного входа в систему и удаленного выполнения команд

find+awksolución:

find /net/*/scenes -maxdepth 1 -type f -name "*.mb" \
| awk -F'/' '{ fn = $NF; $NF = "" }!a[$0]++{ print $0 fn }' OFS='/'
  • -F'/'yOFS='/'-representan el separador de campo de entrada y salida
  • fn = $NF-almacenar el último valor de campo (, es decir, un nombre de archivo )en la variablefn
  • !a[$0]++{ print $0 fn }-en la primera aparición de la ruta de directorio única (presentada por$0)imprima la línea (la ruta de archivo completa)

O usando canalización GNU coreutils:

find /net/*/scenes -maxdepth 1 -type f -name "*.mb" -printf "%H %p\n" \
| sort -k1,1 -u | cut -d' ' -f2
1
25.06.2019, 18:16
1 ответ

Используйте скрипт-оболочку в качестве ForceCommand. Скажем, что-то вроде этого скрипта (, сохраненного в/usr/local/bin/myshell):

#! /bin/bash

if [[ -n $SSH_ORIGINAL_COMMAND ]] # command given, so run it
then
    exec /bin/bash -c "$SSH_ORIGINAL_COMMAND"
else # no command, so interactive login shell
    exec bash -il
fi

В действии:

% grep ForceCommand -B1 /etc/ssh/sshd_config
Match user muru
    ForceCommand /usr/local/bin/forceshell
% ssh muru@localhost
$ ls
Desktop   Documents   Downloads   Music   Pictures   Public   Templates   Videos
$ logout
Connection to localhost closed.
% ssh muru@localhost echo foo
foo
% ssh muru@localhost echo '*'
Desktop   Documents   Downloads   Music   Pictures   Public   Templates   Videos
4
27.01.2020, 23:41

Теги

Похожие вопросы