Я использую автовход в систему, не только отключаю пароль ;-)
Если Ваш диск не шифруется, они могли бы просто загрузиться от внешних медиа и украсть Ваши данные. Таким образом, автовход в систему не является проблемой для воров, но людей около Вас (который может получить доступ к Вашему компьютеру, когда Вы не здесь).
Просто не позволяйте людям вокруг Вас знать, что они могли войти в систему как корень без пароля...
Править
В этом случае Вы выполняете автовход в систему в локальном tty, удаленный вход в систему обычно используют pts (pesudo tty), они не вмешиваются друг друга
Если вы хотите повторно использовать образец кода, он может выглядеть примерно так:
#!/bin/bash
case "$1" in
start)
/path/to/hit.sh &
echo $!>/var/run/hit.pid
;;
stop)
kill `cat /var/run/hit.pid`
rm /var/run/hit.pid
;;
restart)
$0 stop
$0 start
;;
status)
if [ -e /var/run/hit.pid ]; then
echo hit.sh is running, pid=`cat /var/run/hit.pid`
else
echo hit.sh is NOT running
exit 1
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0
Естественно, сценарий, который вы хотите запустить как службу, должен перейти, например, /usr/local/bin/hit.sh
, а приведенный выше код должен находиться в /etc/init.d/hitservice
.
Для каждого уровня запуска, на котором должна работать эта служба, вам нужно будет создать соответствующую символическую ссылку. Например, символическая ссылка с именем /etc/init.d/rc5.d/S99hitservice
запустит службу для уровня запуска 5. Конечно, вы все равно можете запускать и останавливать ее вручную через service hitservice start
/ service hitservice stop
Вы не можете использовать прокси/туннелирование, так как ssh-key хранится на транзитном сервере и недоступен локально. В идеале вы создаете новый ключ и добавляете его в ~/.ssh/авторизованные ключи _
в DestinationHost
, но это может оказаться невозможным.
Самый простой способ установить это - использовать удаленную команду и два локальных порта.
Открыть терминал на DestinationHost:
ssh-t HopHostUser@HopHost «ssh DestinationHost»
Открытый терминал + перенаправление портов от DestinationHost к Localhost:
ssh-t-L8081:localhost:9999 HopHostUser@HopHost «ssh-l9999:localhost:80 DestinationHost»
Вы лучше всего используете вас ssh конфигурация для этого. Она очень длинная.
-121--243246- Как видно из результатов ls -l
внутри устройства, для группы и разрешений «других» флажок «записать» снят. Записывать может только пользователь-владелец.
Если требуется сохранить идентификаторы установки в целости, добавьте соответствующий параметр методов
монтирования в /etc/fstab
для разрешения записи в группу, например mode = 0775
является rwx
для пользователя и группы, r-x
для других.
Я полагаю, что CentOS 7 и выше использует systemd. Если это так для вашей системы, попробуйте следующее:
Поместите команды сценария, которые вы хотите запустить, в /usr/bin/myscript
.
Не забудьте сделать сценарий исполняемым с помощью chmod + x
.
Создайте следующий файл:
/etc/systemd/system/my.service
[Unit]
Description=My Script
[Service]
Type=forking
ExecStart=/usr/bin/myscript
[Install]
WantedBy=multi-user.target
Перезагрузите все системные служебные файлы: systemctl daemon-reload
Проверьте, что служба запущена с помощью systemctl start my
.
Бонус:
Для тестирования службы systemd можно запустить среду tmux с двумя окнами, где верхнее окно отслеживает выход из сценария ( stdout
и stderr
) и нижнее окно может использоваться для перезапуска служб. Для этого необходимо установить tmux
, затем просто:
tmux new-session \; select-layout even-horizontal \; split-window -v journalctl -o cat --since=@$(date +%s) -f -u my \; rotate-window \; set -g status-bg colour0 \; set -g status-fg colour9 \; attach
Затем перезапустите службу с помощью:
systemctl restart my
Exit tmux
с помощью ctrl-d
, а затем ctrl-c
.
Взгляните на fpm. Это инструмент, который создаст для вас сценарии инициализации. Работает на многих платформах (systemd, upstart и т. Д.)
Это мой сценарий как услуга:
[Unit]
Description=To change In test buffer
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/test.sh
TimeoutStartSec=0
[Install]
WantedBy=default.target
См. проект Bash Service Manager : https://github.com/reduardo7/bash-service-manager
#!/usr/bin/env bash
export PID_FILE_PATH="/tmp/my-service.pid"
export LOG_FILE_PATH="/tmp/my-service.log"
export LOG_ERROR_FILE_PATH="/tmp/my-service.error.log"
. ./services.sh
run-script() {
local action="$1" # Action
while true; do
echo "@@@ Running action '${action}'"
echo foo
echo bar >&2
[ "$action" = "run" ] && return 0
sleep 5
[ "$action" = "debug" ] && exit 25
done
}
before-start() {
local action="$1" # Action
echo "* Starting with $action"
}
after-finish() {
local action="$1" # Action
local serviceExitCode=$2 # Service exit code
echo "* Finish with $action. Exit code: $serviceExitCode"
}
action="$1"
serviceName="Example Service"
serviceMenu "$action" "$serviceName" run-script "$workDir" before-start after-finish
$ ./example-service
# Actions: [start|stop|restart|status|run|debug|tail(-[log|error])]
$ ./example-service start
# Starting Example Service service...
$ ./example-service status
# Serive Example Service is runnig with PID 5599
$ ./example-service stop
# Stopping Example Service...
$ ./example-service status
# Service Example Service is not running
Приведенный ниже блок кода может быть очень полезен для преобразования скриптов linux в службу
touch /lib/systemd/system/test.service
chmod 664 /lib/systemd/system/test.service
[Unit]
Description=Test Service
After=network.target
[Service]
Type=forking
User=#username
PIDFile=#test.pid_path
ExecStart=#startup_script_path
ExecStop=#shutdown_script_path
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable test.service
systemctl start test.service
systemctl stop test.service
systemctl status test.service
systemctl restart test.service