Вы можете использовать функцию оболочки практически везде, где можете использовать программу. Просто помните, что функции оболочки не существуют вне области, в которой они были созданы.
#!/bin/bash
#
f() {
sleep 1
echo "f: Hello from f() with args($*)" >&2
sleep 1
echo "f: Goodbye from f()" >&2
}
echo "Running f() in the foreground" >&2
f one
echo "Running f() in the background" >&2
f two &
echo "Just waiting" >&2
wait
echo "All done"
exit 0
Для rsync существует шаблон, который люди использовали для реализации этого. Большинство установок Linux по умолчанию включают rsync.
rsync -e "ssh -t" --rsync-path="sudo rsync" ...
- https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Automated_Backup#Backup_with_rsync_and_sudo
Как насчет того, чтобы вытащить данные, вместо того, чтобы отправлять данные куда-то, что вы не можете легко записать? Или отправка данных в другое место, куда можно записать, а затем что-то в удаленной системе, помещающее данные на место? - возможно, когда приложение откажется от загрузки новых файлов?
Также будьте осторожны, так как некоторые из предложений ослабляют безопасность вашей производственной системы.
Существует множество способов решить эту проблему вне SSH. В дополнение к этому вы немного неоднозначны в отношении учетной записи root и среды «sudo».Я предполагаю, что вы имеете в виду, что учетная запись root не разрешает доступ к оболочке (что по умолчанию используется в Ubuntu), и вы должны предоставить пользователям доступ sudo, чтобы иметь возможность предоставлять права администратора. Сама корневая учетная запись все еще существует (uid/gid 0).
В случае SSH, sudo и безопасного копирования файлов. Вы можете скопировать файл в общедоступное место, а затем использовать sudo, чтобы скопировать или переместить его в место с ограниченным доступом. Это имеет некоторые последствия для безопасности, поскольку файл, по крайней мере, временно находится в общедоступном месте. Существует также множество подходов к смягчению фактора безопасности этой проблемы.
Надежно скопируйте файл во временное место на удаленном сервере.
scp -p xfer_file jschaeffer@aiur:/tmp
Теперь подключитесь к серверу по SSH и скопируйте или переместите его на постоянное место.
ssh -t jschaeffer@aiur: sudo cp /tmp/xfer_file /perm
Ключевым выводом здесь является -t для ssh. Со страницы руководства.
-t Принудительное выделение псевдотерминала. Это может быть использовано для выполнения произвольных экранных программ на удаленная машина, которая может быть очень полезна, например. при реализации сервисов меню. Несколько параметров -t принудительное выделение tty, даже если ssh не имеет локального tty.
В дополнение к этому вы можете определить правило sudo так, чтобы пароль не запрашивался, и оно не запрашивало пользователя.
Альтернативой этому подходу может быть использование открытых ключей. Вы можете предоставить пользователям доступ к другой учетной записи с помощью открытых ключей. Это также имеет свои последствия для безопасности.Вы предоставляете пользователям полный root-доступ к ящику (об этом немного ниже).
jschaeffer@defiler:~# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/jschaeffer/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /jschaeffer/.ssh/id_rsa.
Your public key has been saved in /jschaeffer/.ssh/id_rsa.pub.
Затем скопируйте открытый ключ на удаленный сервер (убедитесь, что вы копируете открытый ключ, а не закрытый). Поскольку все обсуждение касается копирования файлов на сервер, который не разрешает прямой доступ root, я не буду показывать команды ssh-copy-id или scp, которые подключаются к учетной записи root. В любом случае вам нужно найти способ передать ключ в ~root/.ssh/authorized_keys. Можно использовать описанную выше стратегию или скопировать на флэш-накопитель или каким-либо другим способом (rsync, ftp и т. д.)
Учетная запись root должна разрешать аутентификацию без пароля на сервере. Убедитесь, что настройки в /etc/ssh/sshd_config установлены правильно
# Authentication:
LoginGraceTime 120
PermitRootLogin without-password
StrictModes yes
. Затем просто скопируйте файл непосредственно в учетную запись root.
scp -p xfer_file root@aiur:/perm_location
Вы можете ограничить то, что пользователи могут фактически делать, когда они используют ssh, добавив параметры в файл author_keys.
Конечно, есть много других параметров, которые я перечислю, но не буду вдаваться в подробности: