Использование оболочки bash при входе в FreeBSD ssh

Я ищу способ убедиться, что мои команды выполняются с помощью bash на некоторых машинах FreeBSD 11, которые используют csh в качестве оболочки по умолчанию.

Ниже приведен мой код, который работает на Linux CentOS / Debian / MacOS X / pfSense 2.3 (работает на FreeBSD 10.3) и даже на Windows 10 bash, но не работает на FreeBSD 11

cat "/some/filelist" | ssh -i "/home/user/.ssh/some_key" user@freebsd11  'bash -c "while read -r file; do stat -f \"%N;%c;%m\" \"\$file\"; done | sort"'

Вывод предыдущей команды на FreeBSD 11 похоже на сообщение об ошибке csh

Unmatched ".

При проверке того, какая оболочка запускается, кажется, что запускается csh. Следующее возвращает 'csh'

ssh -i /home/user/.ssh/some_key user@freebsd11 'bash -c "echo $0"'

Насколько я понимаю, системы BSD не позволяют изменять оболочку, Меня не интересует изменение оболочки по умолчанию для пользователей FreeBSD.

Есть идеи здесь?

Лучше всего разделить задачу:

1 / отправить файл с помощью cat / some / filelist | ssh [..] 'cat> somefile'

2 / использовать отправленный файл в heredoc

ssh [..] 'bash -s' << 'EOF'
while read -r file; do stat -f "%N;%c;%m" "$file" | sort; done < "$somefile"
'EOF'

Это решение может работать, но беспорядочно, устанавливает 2 соединения вместо одного и не будет работать, если удаленный не может писать "somefile" по какой-то причине.

5
задан 8 December 2016 в 22:23
2 ответа

Если вы упростите командную строку, оболочка, скорее всего, не будет иметь значения. Скорее всего, это сработает

ssh </some/filelist -i /home/user/.ssh/some_key user@freebsd11 xargs -n 1 stat -f \"%N;%c;%m\" | sort

. В качестве альтернативы, вы можете изменить оболочку по умолчанию на bash для конкретного пользователя, которому вы используете ssh - см. Команду chsh (1).

3
ответ дан 3 December 2019 в 01:36

Используйте ansible . Вам не нужно добавлять дополнительное программное обеспечение на целевые машины и, возможно, это упрощает то, что вам нужно делать. ansible использует стандартный ssh для подключения к машинам, sudo , pfexec или doas доступны, если вам нужно для запуска с привилегиями , и вы можете выбрать, от имени какого пользователя подключаться и от имени какого пользователя выполнять.

Если фактическая задача состоит в выполнении stat для списка файлов, для этого уже есть модуль и поиск для перебора строк файла :

---
- hosts: freebsd11:pfsense
  gather_facts: yes
  tasks:

  - name: stat a list of files
    stat: "{{ item }}"
    with_lines:
     - cat /path/to/list_of_files

Если задача является произвольной командой оболочки, которую необходимо выполнить на целевой машине, используя bash , для этого также есть модуль :

---
- hosts: freebsd11:pfsense
  gather_facts: yes
  tasks:

  - name: execute shell script using bash
    shell: cat < /tmp/*txt
      args:
        executable: /bin/bash
2
ответ дан 3 December 2019 в 01:36

Теги

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