Можно ли вкладывать удаленные вызовы с помощью ssh в сценарий bash? [дубликат]

Gracias por todas las respuestas. He editado las configuraciones después de leer sus comentarios. ¿Esto se ve más bien?

; BIND data file for local loopback interface
;
$TTL    5D
@       IN      SOA     ns1.craig.linuxcourse.tfe.ltu.se. 
root.linuxcourse.tfe.ltu.se. (
                 2018052100         ; Serial
                     604800         ; Refresh
                      86400         ; Retry
                    2419200         ; Expire
                      10800 ); Negative Cache TTL
;
                IN      NS      ns1.craig.linuxcourse.tfe.ltu.se.

ns1             IN      A       xxx.239.163.100
www             IN      A       xxx.239.163.110
ftp             IN      A       xxx.239.163.120
craig           IN      A       xxx.239.163.130

Y así es como se ve named.conf.local:

zone    "craig.linuxcourse.tfe.ltu.se" in {
    allow-transfers { any; };
    file "/etc/bind/db.craig.linuxcourse.tfe.ltu.se";
    type master;
};
1
17.09.2018, 18:00
1 ответ

Важно понимать, что аргументы, переданные в ssh, объединяются, чтобы составить командную строку оболочки , интерпретируемую оболочкой входа удаленного пользователя.

Таким образом, чтобы иметь возможность запускать some-shell-codeна C через ssh-соединение с B, вам нужно построить командную строку для B, чтобы оболочка входа пользователя B правильно интерпретировала ее, чтобы передать это some-shell-codeкак есть. к ssh.

Если текущая оболочка на A, оболочка входа пользователя на B и оболочка входа пользователя на C — все bash, одна и та же версия (и используется одна и та же локаль, если часть этого кода содержит -символы ASCII ), а $CODEсодержит код bashдля выполнения на C, вы можете сделать:

printf -v quoted_CODE %q "$CODE"
ssh B "ssh C $quoted_CODE"

Если вы не уверены, что оболочка входа пользователя на B или C — bash, и вам не нужно передавать какую-либо информацию через стандартный ввод, вы можете просто выполнить:

ssh B ssh C bash <<< "$CODE"

Или если вы знаете, что sshdна A и B разрешают входящие LC_*переменные(AcceptEnv LC_*общие вsshd_config):

LC_CODE=$CODE ssh -o SendEnv=LC_CODE B '
  ssh -o SendEnv=LC_CODE C bash -c '\'' eval "$LC_CODE"'\'
1
27.01.2020, 23:18

Теги

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