Uzak Linux Sunucusunda Yerel Komut Dosyası Nasıl Çalıştırılır
Yayınlanan: 2022-09-10Yinelenen görevleri komut dosyası yazmak, sistem yönetiminin verimliliğini artırır. Bu, yerel makineler için harika, ancak ya uzak sunucuları denetlerseniz? Uzak bir bilgisayarda yerel bir komut dosyası çalıştırabilir misiniz? Evet!
Uzak Bağlantılar
Uzaktan sistem yönetimi genellikle güvenli bir kabuk bağlantısı üzerinden uzak bilgisayara bağlantı kurmayı içerir. SSH bağlantısı, uzak bilgisayarda size bir komut istemi sağlar. Ardından hemen devam edebilir ve gereken sistem bakımını gerçekleştirebilirsiniz.
Kabuk komut dosyası oluşturma, birçok eylemi tek bir komut satırı talimatında birleştirerek, bir komut dizisini bir programmış gibi çalıştırılabilen bir komut dosyasına sarmanıza izin vererek yardımcı olur.
Zaman geçtikçe, komut dosyalarınızı değiştirecek ve geliştireceksiniz. Yönetmeniz gereken çok sayıda uzak makineniz varsa, her bir sunucudaki her komut dosyasının kopyasını güncel ve güncel tutmak zahmetli ve can sıkıcı bir ek yüktür. Bu, başlı başına bir idari görev haline gelir ve komut dosyalarını kullanmanın sağlaması beklenen zaman tasarrufunu tüketir.
İdeal çözüm, komut dosyalarınızı yerel makinenizde tutmanıza ve bunları SSH bağlantısı üzerinden uzak bilgisayarlarda çalıştırmanıza olanak tanır. Bu, merkezi bir komut dosyası koleksiyonuyla size basitleştirilmiş yönetim sağlar ve aynı güncel komut dosyası tüm bilgisayarlarda çalışır.
Bash ve SSH, tam da bunu yapmanın bir yolunu sunar.
Parolasız SSH Bağlantıları
Bunu yapmanın en iyi yolu, SSH anahtarlarını kullanarak şifresiz bağlantılardır. Yerel bilgisayarınızda SSH anahtarları oluşturup bunları uzak bilgisayarların her birine göndererek, her seferinde parola sorulmadan uzak bilgisayarlara güvenli ve rahat bir şekilde bağlanabilirsiniz.
İlk kez kullananlar için göz korkutucu olabilse de SSH anahtarları gerçekten zor değil. Oluşturulmaları kolay, uzak sunuculara kurulumu basit ve SSH ile kullandığınızda sorunsuzdur. Tek ön koşul, uzak bilgisayarlarda SSH arka plan programı sshd
çalışıyor olması ve uzak bilgisayarda bir kullanıcı hesabınızın olmasıdır.
Bunlarda zaten uzaktan sistem yönetimi yapıyorsanız, bu gereksinimlerin ikisi de zaten karşılanmış olmalıdır.
Bir SSH anahtar çifti oluşturmak için şunu yazın:
ssh-keygen
“fedora-36.local” adlı bir bilgisayarda “dave” adlı bir hesabınız varsa, şu komutla SSH ortak anahtarınızı gönderip yükleyebilirsiniz:
ssh-copy-id [email protected]
Şimdi, her zamanki gibi bir SSH bağlantısı yapmak, SSH anahtarlarını kullanarak kimlik doğrulaması yapacak. Parola sorulmadan uzak sunucudaki bir komut istemine bırakılırsınız.
ssh [email protected]
Yerel Komut Dosyasını Uzaktan Çalıştırma
Bu testler için uzak sunucumuz “fedora-36.local” isimli bir Linux bilgisayardır. SSH anahtarlarını kurduk ve yerel bilgisayarımızdan uzak sunucuya şifresiz bağlantımızı test ettik.
Senaryomuz çok basit. Uzak sunucuda "timestamp.txt" adlı bir dosyaya bir zaman damgası yazar. Komut dosyasının çıkış komutuyla sona erdiğini unutmayın. Bu önemlidir, bazı eski sistemlerde bir betiğin tamamlanması mümkündür, ancak SSH bağlantısı açık tutulur.
#!/bin/bash tarih >> zaman damgası.txt 0 çıkışı
Bu metni bir düzenleyiciye kopyalayın, “local.sh” olarak kaydedin ve ardından yürütülebilir hale getirmek için chmod
kullanın.
chmod +x yerel.sh
Yerel makinemizde betiği şu şekilde başlatacağız:
ssh [email protected] 'bash -s' < local.sh
İşte bu nasıl çalışıyor.
- ssh [email protected] : Uzak makineye yaptığımız SSH bağlantısı. Bu,
ssh
komutunu, uzak sunucuda önceden var olan kullanıcı hesabını ve uzak sunucunun adresini kullanır. - 'bash -s' : Bu, Bash'in standart girdi akışından komutları okumasına neden olur. Bash'in yönlendirilmiş veya yönlendirilmiş girişi okumasını sağlar.
- < local.sh : Komut dosyasını Bash'e yönlendiriyoruz.
Komut dosyası çalıştığında, yerel makinenin komut istemine geri döneriz. Uzak makinemize atlayarak, “timestamp.txt” dosyasının içine bakmak için cat kullanabiliriz.
kedi zaman damgası.txt
Son ve şu anda yalnızca bağlantının zaman damgasını görebiliriz. Yerel komut dosyasını birkaç kez daha çalıştırmak, uzak dosyaya karşılık gelen zaman damgalarını ekler.
kedi zaman damgası.txt
Tabii ki, gerçek dünya durumunda, senaryonuz daha faydalı bir şey yapar. Ancak önemsiz örneğimiz bile, uzak bir sunucuda yerel bir komut dosyasının yürütüldüğünü gösteriyor.
Argümanları Komut Dosyasına Geçmek
Komut satırı bağımsız değişkenlerini komut dosyasına iletebilirsiniz. Komut dosyamızı üç komut satırı parametresi bekleyecek şekilde değiştireceğiz. Bunlar, zaman damgasıyla birlikte “timestamp.txt” dosyasına yönlendirilir.
Bu betiği “local2.sh” olarak kaydedin ve chmod
ile çalıştırılabilir hale getirin.
#!/bin/bash echo "$1 $2 $3" >> timestamp.txt tarih >> zaman damgası.txt 0 çıkışı
Kullanmamız gereken komut, birkaç değişiklikle önceki örneğe benzer.
ssh [email protected] "bash -s" -- < local2.sh "Nasıl Yapılır\ Geek" "Linux" "Makaleler"
Çift tire “ --
” Bash'e aşağıdakilerin ssh
komutu için komut satırı parametreleri olarak kabul edilmemesi gerektiğini söyler. Komut dosyası için üç parametre, her zamanki gibi komut dosyası adını takip eder. “Nasıl Yapılır\ Geek” parametresindeki boşluktan çıkmak için ters eğik çizgi “ \
” kullandığımızı unutmayın.
Parametrelerimizin uzak sunucuda doğru şekilde alındığını ve işlendiğini cat
ile kontrol edebiliriz.
kedi zaman damgası.txt
Bir Komut Dosyasının Bir Bölümünü Uzaktan Çalıştırma
Uzak sunucularda hangi eylemlerin gerekebileceğini belirlemek için bazı yerel işlemler yapması gereken bir komut dosyanız varsa, sizin için uzak eylemleri gerçekleştirmek üzere doğrudan bu komut dosyasına bir bölüm ekleyebilirsiniz.
Bunu buradaki belgeleri kullanarak başarabiliriz. Burada belgeler, bir komut dosyasının etiketli bir bölümünden satırları bir komuta yönlendirmemize izin verir. Yerel işleme, buradaki belgenin üstünde ve altında gerçekleştirilebilir.
Bu, burada bir belge içeren “local3.sh” betiğidir.
#!/bin/bash # yerel işleme burada yapılabilir # uzaktan işlem burada yapılır ssh -T [email protected] << _remote_commands # uzaktan çalıştırılacak komutlar buraya eklenecek cd /home/dave/Belgeler # vb. # Son olarak, zaman damgası dosyasını güncelleyin echo "Script3.sh:" $(tarih) >> /home/dave/timestamp.txt # bu, yeniden yönlendirmenin sonunu belirten etikettir _remote_commands # burada daha fazla yerel işlem yapılabilir 0 çıkışı
ssh
komutunu, öncekiyle aynı bağlantı ayrıntılarıyla kullanıyoruz. “fedora-36.local” adlı uzak bir sunucuda “dave” kullanıcısı olarak bağlanıyoruz. Ayrıca -T
(sözde terminal tahsisini devre dışı bırak) seçeneğini kullanıyoruz. Bu, uzak sunucunun bu bağlantı için etkileşimli bir terminal sağlamasını engeller.
“ <<
” yönlendirmesinin ardından bir etiket adı gelir. Bu örnekte, “_remote_commands” kullanıyoruz. Bu etiketle ilgili özel bir şey yok, sadece bir etiket.
Yönlendirmeyi takip eden satırlarda görünen tüm komutlar SSH bağlantısı üzerinden gönderilir. Etiketle karşılaşıldığında yeniden yönlendirme durur. Komut dosyasının yürütülmesi daha sonra etiketi takip eden satırla devam eder.
Karma yerel/uzaktan işleme komut dosyamızı çalıştıralım.
./local3.sh
Beklendiği gibi, “timestamp.txt” dosyasında yeni bir giriş görüyoruz.
kedi zaman damgası.txt
Erişiminizi Genişletin
Yerel olarak yazılan, depolanan ve bakımı yapılan komut dosyalarını uzaktan çalıştırabilmek, uygun bir yönetim aracı sağlar. Bir komut dosyasının tam olarak aynı sürümünün tüm uzak sunucularınızda çalıştığını bilmek, yönetimi çok daha kolaylaştırır.
İLGİLİ: Kokpit Web Arayüzü ile Linux Sunucuları Nasıl Yönetilir