Назад | Перейти на главную страницу

Как изменить rsync и перезагрузить удаленную службу, но только один раз ввести пароль SSH

Я хотел бы синхронизировать локальные изменения в файле с удаленным сервером, а затем перезагрузить службу, которая использует этот файл. Например:

# Sync file to remote server
rsync -avzhe ssh --rsync-path "sudo rsync" \
    /etc/haproxy/haproxy.cfg vagrant@192.168.50.31:/etc/haproxy/

# Reload remote service
ssh vagrant@192.168.50.31 "sudo /etc/init.d/haproxy reload"

Это заставляет меня дважды вводить пароль пользователя SSH. Есть ли способ сделать это лучше, чтобы мне приходилось вводить пароль только один раз?

Ты можешь использовать ControlMaster, ControlPath и ControlPersist ssh, чтобы использовать функцию совместного использования ssh-соединения. Их использование заставляет ssh сохранять указанное количество секунд соединения (или навсегда с 0), и любые последующие сеансы ssh будут подключаться без аутентификации, потому что они будут использовать уже установленное соединение.

Пример:

поместите это в .ssh / config

Host *
    ControlMaster auto
    ControlPath /tmp/ssh_shared_%h_%p_%r
    ControlPersist 60

это сохранит соединение в течение 60 секунд. В этот раз пароль запрашиваться не будет.

Бегать ssh-keygen:

ssh > ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): abc.key
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in abc.key.
Your public key has been saved in abc.key.pub.
The key fingerprint is:
9e:e2:46:c0:9a:ac:fe:fb:ea:ec:ee:66:00:39:91:f8 root@domain.tld
The key's randomart image is:
+--[ RSA 2048]----+
|..               |
|+                |
| + .             |
|+ E o            |
|.o o .  S        |
| .+   .. .       |
| ..  .. o        |
|. .o ...         |
|..OX+o.          |
+-----------------+

Здесь я дважды пропустил кодовую фразу, нажав Enter. Теперь у меня есть abc.key и abc.key.pub файлы. Сделаем их доступными для чтения только мне:

chmod 600 abc.key*

Открой abc.key.pub:

ssh > cat abc.key.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDppADcp53HZ4KF7EsNcfV1qM4WtuYEeHWjAXsFqJwHd7loyKYnORHtAMtd78+cSHTiAycLeNqX9xRh/lPlhifeovxJ8th6c4W7cXNWalmz6q+RkDE8ZznmcNSvrMToLm7oivdsBDiPIBbiOtunKRQ2TsNZ72RJuC3RlrmUakWp9RcrQMFAvyxkzJYmm4fTSozosA2/NaHn0qIm/5Ed9I5BQ9IzRQLgzsXCtBTQY83aBcYLk+AzhQiM45AV1mOGzYAkgXu6Uo3P9jDxi2DE1priW8SnKEXhrTEmNDAZDkDRAz1Go/lGnENslqLZ0URs5spGtHGhcWt9DmSjVGbbGvpP user@domain.tld

Скопируйте всю строку и вставьте ее в /home/user/.ssh/authorized_keys на удаленном хосте.

А теперь попробуйте:

ssh -i /path/abc.key user@remote.host

Да, теперь вы вошли в систему без аутентификации с клавиатуры. Вы можете проделать этот трюк везде, где использовали ssh.