Как выполнить изменения на удаленном сервере как корень?

Показать непечатаемые символы (как C управляющие коды каждый раз, когда возможный) в Вашем ls произведите Вас, также может использовать -b опция к ls команда:

ls -Cb | grep -v '\.pyc$' | column -t
8
29.04.2014, 10:16
4 ответа

Вы можете запускать локальные сценарии удаленно, выполнив bash в удаленной системе и передав ей свой сценарий

$ ssh user @ host 'bash -s'

Edit

Для выполнения команд, требующих использования sudo на удаленном компьютере, используйте параметр ssh -t и передайте команды для ssh . Параметр -t выделяет псевдотерминал и позволяет пользователю взаимодействовать с командами, выполняемыми ssh , такими как ввод пароля для sudo

$ ssh user@host -t 'sudo foo'

Для изменения файла с помощью этого метода рекомендуется sed вместо перенаправления > , потому что перенаправление оболочки не позволяет записывать файлы при использовании sudo . Кроме того, все переменные в команде sed должны быть экранированы, когда они передаются в ssh .

$ ssh user@host -t 'sudo sed -i "\$a text to insert" /path/to/file'

Чтобы автоматизировать все это:

#!/bin/bash
SERVERS=( server1 server2 server3 )

for HOST in ${SERVERS[@]}; do 
    ssh user@${HOST} -t 'sudo sed -i "\$a text to insert" /path/to/file'

    if [[ $? -ne 0 ]]; then
        echo "ERROR: $HOST did not complete"
     else   
        echo "$HOST complete"
    fi   
done
18
27.01.2020, 20:09

Вы должны были бы уже иметь какой-то доступ к корневому уровню, либо через Direct Root Passwd, либо ваш идентификатор пользователя Sudo Sudo Настройка правила перед попыткой изменить файл sudoers.

0
27.01.2020, 20:09

Мне показалась полезной команда tee чтобы избежать ограничения sudo на перенаправление файлов. Использование sed оказалось разочаровывающим из-за требований к экранированию символов.

Это команда, которую я использовал для удаленного добавления хостов для всех машин в моем кластере в / etc / hosts:

for i in {1..10}; do ssh ubuntu@10.1.1.$i -t "echo '10.1.1.1 dev-1    
10.1.1.4 dev-4
10.1.1.3 dev-3
10.1.1.2 dev-2
10.1.1.6 dev-6
10.1.1.8 dev-8
10.1.1.5 dev-5
10.1.1.10 dev-10
10.1.1.9 dev-9
10.1.1.7 dev-7' | sudo tee -a /etc/hosts >/dev/null"

Результат для каждой итерации выглядит следующим образом:

0+1 records in
0+1 records out
255 bytes (255 B) copied, 4.1338e-05 s, 6.2 MB/s

Этот ответ SU сыграл решающую роль в создании моего окончательного варианта. решение: https://superuser.com/a/1026359/587485

1
27.01.2020, 20:09

Если вам нужно запустить несколько команд или перенаправить, вы должны использовать следующий синтаксис:

ssh server.com "sudo sh -c 'ps aux | grep jav > /root/1.txt'"
1
27.01.2020, 20:09

Теги

Похожие вопросы