Вы должны изменить эту строку и добавить в нее созданный вами каталог, как показано ниже.
sshpass -p 'PASSWORD' scp /dbbackup/backupdb/ontape/fullsize/* "$server/$(date +%Y-%m-%d)"
Вместо этого вы также можете использовать rsync
, так как он создаст каталог последнего уровня в целевом пути, если он не существует и нет необходимости mkdir
в качестве дополнительной команды.
sshpass -p 'PASSWORD' rsync /dbbackup/backupdb/ontape/fullsize/* "$server/$(date +%Y-%m-%d)"
это создаст каталог из "$(date +%Y-%m-%d)"
, если он не существует в пути назначения.
Таким образом, в вашем скрипте, поскольку вы собираетесь копировать в 2 пути назначения и сначала создаете каталоги, вы можете сделать это только с помощью приведенного ниже скрипта.
for dest in dest1 dest2; do
sshpass -p 'PASSWORD' rsync -av /path/to/src/* "$dest/$(date +%Y-%m-%d)"
done
Обратите внимание, что использование этого способа передачи пароля является плохой практикой, так как он виден другим пользователям, имеющим доступ к вашей системе или может просматривать их с помощью команды ps -aux
. Вместо этого вы можете установить аутентификацию с помощью publikKey .
ssh-keygen -t rsa
ssh-copy-id USER@HOST
Этот вопрос, вероятно, связан с:
Удаленный запуск сеанса на дисплее :0 а также Удаленный запуск x11vnc, когда X-сервер уже запущен
В этом ответе я буду использовать systemd в качестве диспетчера служб, SDDM в качестве диспетчера рабочего стола и x11vnc в качестве сервера VNC. Для разных ресурсов адаптация не задействована.
Если вы загрузили свой компьютер удаленно, например, через пробуждение -по -локальной сети, и у вас нет физического доступа к клавиатуре, чтобы ввести пароль пользователя на экране входа в KDE, вы не сможете откройте X-дисплей через SSH, просто запустив сеанс VNC, например
$ x11vnc --display $DISPLAY
Вывод команды будет каким-то подробным,но прочитав его, вы найдете что-то вроде строк
20/12/2019 19:32:35 *** XOpenDisplay failed ($DISPLAY) *** x11vnc was unable to open the X DISPLAY: "$DISPLAY", it cannot continue. ***
, так как сеанс X -еще не аутентифицирован.
Если мы прочитаем вывод дальше, то найдем
** If NO ONE is logged into an X session yet, but there is a greeter
login program like "gdm", "kdm", "xdm", or "dtlogin" running, you
will need to find and use the raw display manager MIT-MAGIC-COOKIE
file. Some examples for various display managers:
gdm: -auth /var/gdm/:0.Xauth -auth /var/lib/gdm/:0.Xauth
kdm: -auth /var/lib/kdm/A:0-crWk72
-auth /var/run/xauth/A:0-crWk72
xdm: -auth /var/lib/xdm/authdir/authfiles/A:0-XQvaJk
dtlogin: -auth /var/dt/A:0-UgaaXa
Это то, что нам нужно сделать, найти и использовать необработанный файл диспетчера отображения MIT -MAGIC -COOKIE.
По выходу
$ systemctl status sddm
мы найдем что-то вроде
CGroup: /system.slice/sddm.service
|-650 /usr/bin/sddm
`-660 /usr/lib/Xorg -nolisten tcp -auth /var/run/sddm/{$somelongstring} -background none -noreset -displayfd 17 -seat seat0 vt1
Просто загрузите x11vnc вышеупомянутый файл cookie,
# x11vnc --display $DISPLAY -auth /var/run/sddm/{$somelongstring}
Обратите внимание, что такую операцию необходимо выполнять от имени пользователя root.
Теперь на вашем компьютере будет запущен VNC-сервер X11, и вы сможете разблокировать экран приветствия с помощью VNC-подключения через любое устройство, которым может быть и ваш смартфон.
Возможно, кто-то может предложить более простое и/или более легкое решение, при котором соединения SSH и VNC не нужны, а достаточно командной строки. Однако этот подход довольно быстрый и должен решить вашу проблему.
Для различных диспетчеров служб, диспетчеров рабочих столов и серверов VNC приведенные здесь команды должны быть соответствующим образом адаптированы.
ОБНОВЛЕНИЕ:
Вчера я почему-то думал над этим вопросом и наткнулся на другой подход, который может сработать.
Идея в основном состоит в том, чтобы отказаться от диспетчеров рабочего стола/входа в систему вместо аутентификации с их помощью и удаленного запуска X самостоятельно.
Допустим, на вашем компьютере включена служба SSH-сервера. С удаленной машины (ваш телефон ), остановите диспетчер рабочего стола (SDDM, например):
# systemctl stop sddm
Теперь давайте предположим, что у вас установлен какой-то другой пакет инициализации X, например xinit , где будет достаточно такой команды, как startx. Если вы работали с консоли,
$ startx
без проблем запустит X в соответствии с вашими конфигурационными файлами.Я не знаю о каждой Unix -подобной системе, но, по моему опыту, startx
будет заботиться о $HOME/.xinitrc
или, если файл не существует, /etc/X11/xinitrc
, и X-сервер запустится, как и ожидалось.
К сожалению, мы не в консоли, и при попытке запуска из другой оболочки, такой как эмулятор терминала, где мы отправляем команды через SSH, просто отправляем
$ startx
извлекает
/usr/lib/Xorg.wrap: Only console users are allowed to run the X server
С другой стороны, пользователь root может удаленно инициализировать X-сервер из защищенной оболочки через эмулятор терминала. Например,
# startx
инициализирует X-сервер, как и ожидалось, следуя конфигурационным файлам root
из дома (или /etc/X11/xinitrc
, как упоминалось выше ). Это заставляет нас думать, что речь идет о разрешениях, а не о невозможности сделать это.
После пары минут поиска я наткнулся на Ошибка при попытке использовать Xorg :Только пользователям консоли разрешено запускать X-сервер? , Вход в систему SSH показывает Только пользователям консоли разрешено запускать X-сервер , оба из которых сводятся к одному и тому же пути, редактируйте (или добавляйте и редактируйте, если он не существует )/etc/X11/Xwrapper.config
, чтобы включить следующие строки
allowed_users=anybody
needs_root_rights=yes
, который действительно позволяет выполнять команду startx
обычным пользователем из эмулятора терминала.
Примечание:
Убедитесь, что ваш файл Xresources
загружается соответствующим образом. Не забудьте правильно добавить в xinitrc
окружение рабочего стола, оконный менеджер, команду xrdb
и т. д.
Актуально:
Я также рассматриваю другой подход, вдохновленный Как удаленно войти в систему с полным графическим рабочим столом через X11 , но нужно подумать об этом немного подробнее. Это может послужить источником вдохновения для дальнейших решений и, возможно, лучшего или более подходящего варианта.
Я сделал этот скрипт несколько недель назад, и он работает очень хорошо, поэтому я размещаю его здесь для других. Он использует метод, введенный в -sf -d выше. Это не то же самое, что мой первоначальный запрос, который заключался в том, чтобы иметь возможность войти в систему через ssh и набрать пару букв, но у него есть дополнительное преимущество в виде возможности удаленного просмотра и управления компьютером.
#!/bin/bash
TMPVAR=`systemctl status sddm.service`
echo "TMPVAR = $TMPVAR"
TMPVAR2=$(echo $TMPVAR | cut -d '{' -f 2)
echo "TMPVAR2 = $TMPVAR2"
TMPVAR3=$(echo $TMPVAR2 | cut -d '}' -f 1)
echo "TMPVAR3 = $TMPVAR3"
TMPVAR4="/var/run/sddm/\{$TMPVAR3\}"
echo "TMPVAR4 = $TMPVAR4"
echo "starting VNC server with string: sudo x11vnc -auth $TMPVAR4 -
nopw -ncache 10"
x11vnc -auth $TMPVAR4 -nopw
Я вызываю этот скрипт при загрузке через systemd, создавая этот файл и активируя его
x11vnc.service
[Unit]
Description=starts x11vnc server with authorization to access sddm
After=sddm.service graphical.target
Wants=display-manager.service
[Service]
ExecStart=/home/daddy/Desktop/sddm_VNC.sh
Restart=always
[Install]
WantedBy=graphical.target
А потом, конечно,
sudo systemctl enable x11vnc.service
У меня есть очень простой ответ. :Включите автоматический вход в систему для SDDM, а затем создайте скрипт, вызывающий loginctl
для блокировки всех сеансов сразу после загрузки или через 10 секунд. Затем вы можете воспользоваться удобством loginctl
, все еще находясь в заблокированном состоянии.
Другой способ — удаленно отредактировать конфигурацию SDDM, чтобы включить автоматический вход в систему. Вы можете либо вручную отредактировать ее с помощью ssh, затем перезапустить SDDM или перезагрузиться, либо создать сценарий, который при вызове заменяет файл конфигурации файлом автоматического входа в систему. псевдоним для него и запустить его легко. См. здесь для получения дополнительной информации.