Sudo ile ssh'ye komutları ve yerel değişkenleri geçerken gerekli olan alıntı ve kaçışlardan nasıl kaçınılır?


Yanıtlar:


1

İşte basit bir bash betiği örneği.

# Assign values to variables locally.
myvar1="myvalue1"
myvar2="myvalue2"
# Add your local commands here.

ssh myremotehost "$(
cat <<HEREDOC_EXPORT_VARIABLES
export myvar1="$myvar1"
export myvar2="$myvar2"
HEREDOC_EXPORT_VARIABLES

cat <<'HEREDOC_SUDO'
sudo -Eu root /bin/bash <<'HEREDOC_COMMANDS'

# Optionally display your variables.
echo "myvar1: $myvar1"
echo "myvar2: $myvar2"
# Add your remote commands here.

HEREDOC_COMMANDS
HEREDOC_SUDO
)" | tee logfile.log

Farklı parçaların açıklanması.

Yerel olarak atanmış değerler (değişkenler uzak makinede komutları çalıştırmadan önce):

myvar1="myvalue1"
myvar2="myvalue2"

"$(... )"birden fazla komutun birlikte gruplanmasına izin verin ve bu satırda çift tırnak kullanılmasına izin verin.

Burada tek tırnak içinde olmayan belge bloğunu dışa aktar, blokta yerel değişkenlerin kullanılmasına izin verir:

cat <<HEREDOC_EXPORT_VARIABLES
...
...
HEREDOC_EXPORT_VARIABLES

Uzak komutlar için yerel değişkenlerin dışa aktarılması.

export myvar1="$myvar1"
export myvar2="$myvar2"

Tek tırnak içine alınmış dış burada-belge bloğu, sudo komutunu dışlamak ve iç burada-belge için uzak değişkenlerden kaçma gerekliliğini ortadan kaldırmak için kullanılır (potansiyel olarak echosatır beslemesi olmadan değiştirilebilir ):

cat <<'HEREDOC_SUDO'
...
...
HEREDOC_SUDO

Uzak değişkenlerden kaçma zorunluluğunu ortadan kaldırmak için burada tek tırnak içinde bulunan iç belge bloğu.

sudo -Eu root /bin/bash <<'HEREDOC_COMMANDS'
...
...
HEREDOC_COMMANDS

-EBu seçenek, sudodaha önce dışa aktarılan çevre değişkenlerinin korunmasına izin verir.

tee logfile.log aynı anda hem terminale hem de bir günlük dosyasına eko çıkışı sağlar.

Bir bonus olarak, ssh myremotehost "$(çizgiyi değiştirebilir echo "$(ve uzaktan yürütülen parçanızın hata ayıklama amacıyla nasıl görüneceğinin bir çıktısını alacaksınız.

İpucu: Bir yorumda kullansanız bile "$(... )"blok içinde eşleştirilmemiş tek veya çift alıntıdan kaçmanız gerekebilir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.