Запустите autossh при запуске системы

15

Есть ли способ запуска autosshпри запуске, чтобы он запускал и настраивал туннель ssh еще до того, как пользователь вошел в систему? Я загружаю Ubuntu в терминал, и я хотел бы, чтобы autosshпроцесс запускался автоматически при запуске, чтобы я мог войти в ssh.

Я попытался добавить команду /etc/rc.local, а также создать /etc/init/*.confскрипт. Кажется, ничего из этого не работает.

ПТФ
источник
Какая версия Ubuntu это?
Джордж Удосен
@ Джордж 16.04 LTS.
ПТФ
Что-то вроде @reboot autossh -D 9050 user@sshserver -fTNCна crontab ?
Пабло Бьянки

Ответы:

20

С помощью systemdэтого можно сделать (образец autosshсоздан для mysqlдоступа):

  1. Создайте системный файл, используя nanoили vimили соответствующий редактор по выбору:

    sudo vim /etc/systemd/system/autossh-mysql-tunnel.service 
    
  2. Добавьте следующее содержание:

    [Unit]
    Description=AutoSSH tunnel service everythingcli MySQL on local port 5000
    After=network.target
    
    [Service]
    Environment="AUTOSSH_GATETIME=0"
    ExecStart=/usr/bin/autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -NL 5000:localhost:3306 cytopia@everythingcli.org -p 1022
    
    [Install]
    WantedBy=multi-user.target
    
  3. Перезагрузить systemd:

    sudo systemctl daemon-reload
    
  4. Запустите Autosshсервис:

    sudo systemctl start autossh-mysql-tunnel.service
    
  5. Включить в boot:

    sudo systemctl enable autossh-mysql-tunnel.service
    
  6. Проверьте статус с помощью:

    sudo systemctl status autossh-mysql-tunnel
    

Заметка

Однако следует отметить одну важную вещь, касающуюся systemd и AutoSSH: -f (использование в фоновом режиме) уже подразумевается AUTOSSH_GATETIME=0, однако -fне поддерживается systemd.

Так что в случае systemdвам нужно использоватьAUTOSSH_GATETIME

Источник

Джордж Удосен
источник
Благодарность! Я пытаюсь, но когда я бегу sudo service reverse-ssh-tunnel.service status, я получаю Loaded: not-found (Reason: No such file or directory).
Исследуем
пожалуйста, sudo systemctl status reverse-ssh-tunnelнеsudo service reverse-ssh-tunnel.service status
Джордж Удосен
2
Я полагаю, что вы имеете в видуautossh -i /home/<user>/.ssh/id_rsa -R 22222:localhost:22 <user>@<remote_host>
Джордж Удосен
2
Мне нужно было также добавить -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no. Может, мне просто нужен один из них, я не проверял их по отдельности. Нашел вот это: stackoverflow.com/a/24689061/1211119 . Однако, когда я смотрю на экран входа в систему tty1 (я загружаюсь в терминал), сервис еще не создал туннель. Если я вхожу, служба запускается.
PTF
2
Иногда вы хотите работать в другом пользовательском контексте. Для этого: Добавить User=usernameв [Service]раздел в файле systemd.
Friederbluemle