Как настроить SSH с помощью RemoteCommand только для интерактивных сеансов (т.е. без команды или без sftp)

Что делает top -M -n 1? В моей системе -M является недопустимой опцией. Я предполагаю, что вы пытаетесь получить количество используемой памяти в системе (в мегабайтах)? В таком случае, используйте free, а не top - извлекать данные из приложения ncurses с помощью top глупо, когда для этого есть такие инструменты, как free.

В любом случае, я собираюсь использовать free -m в моем примере сценария.

В развитие работы Archemar по устранению лишних команд grep и awk:

mem=$(free -m | awk '/Mem:/ {print $3}')

if [ "$mem" -gt 1024 ] ; then (
    echo "Memory utilisation is high"
    echo "Please find history of the memory utilisation below"
    sar -r | awk '{print $1,$2,$3,$4}' | column -t
) >>/home/shyam/utilisation.txt
fi

Вместо того чтобы использовать awk для выполнения всей работы, он использует awk только для извлечения данных об использовании памяти из вывода free -m, а затем использует shell-код для выполнения остальной работы. Он запускает echo и sar | awk внутри под-оболочки, при этом весь вывод под-оболочки перенаправляется в utilisation. txt

Если в вашей системе нет free и top -M -n 1 работает для вас, то используйте это в качестве первой строки:

mem=$(top -M -n1 | awk '/Mem/ {print $7}')
6
22.06.2018, 11:39
2 ответа

Вариант 1)

Вы можете выбрать опцию Match (см. man ssh _config)

Match Host example.com exec "test $_ = /usr/bin/ssh"
     RemoteCommand tmux a; or tmux
     RequestTTY yes

Это будет различать только разницу между ssh и sftp

Вариант 2

Вы создаете некоторую конфигурацию-заполнитель для своей команды diffe, например:

Host tmux.example.com
  HostName example.com
  HostKeyAlias example.com
  RemoteCommand tmux a; or tmux
  RequestTTY yes

И после этого вы все еще можете использовать example.com для использования sftp / ping.

9
27.01.2020, 20:25

Я использую что-то более сложное, имеющее дело с параметрами ssh и пробелами в аргументах:

Match exec "POSIXLY_CORRECT=1 xargs -0 getopt -o 46AaCfGgKkMNnqsTtVvXxYyB:b:c:D:E:e:F:I:i:J:L:l:m:O:o:p:Q:R:S:W:w: --  </proc/$PPID/cmdline | perl -pe 's|.*? -- ||' | { read -r c; eval a=($c); [ ${#a[@]} -le 2 ]; }"
    RemoteCommand my-command-here
    RequestTTY yes

Кроме того, если кто-то хочет использовать RemoteCommand для некоторых машин (, например, внутри «host xxxx» ), тот же трюк можно использовать в обратной логике (совпадение оценивается после хоста):

Match exec "POSIXLY_CORRECT=1 xargs -0 getopt -o 46AaCfGgKkMNnqsTtVvXxYyB:b:c:D:E:e:F:I:i:J:L:l:m:O:o:p:Q:R:S:W:w: -- </proc/$PPID/cmdline | perl -pe 's|.*? -- ||' | { read -r c; eval a=($c); [ ${#a[@]} -gt 2 ]; }"
     RemoteCommand none
     RequestTTY auto

Host machine1 machine2...
     RemoteCommand my-command-here
     RequestTTY yes

Если кому-то интересно, сейчас я использую RemoteCommand для вызова экрана:

RemoteCommand which screen &>/dev/null && TERM=xterm screen -q -RR "%u-%C" $SHELL -l || $SHELL -l
4
27.01.2020, 20:25

Теги

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