Doküman

Linux’ta SSH Ardısıra Nasıl Kullanılır?

UNIX pipe operatörü, UNIX ve UNIX benzeri işletim sistemlerinin geliştirilmesinde muazzam bir adımdır.  Temel programların giriş ve çıkışlarını birbirine bağlayarak kullanıcıların karmaşık bilgi işlem görevlerini gerçekleştirmelerine olanak tanıdı.  Bu makale, SSH protokolüne sahip bir ağ üzerinden Linux’ta bir UNIX kanalının nasıl kullanılacağını göstererek bunu genişletmektedir.

 

Unix Pipeline’ı Anlamak

Unix’teki (ve buna bağlı olarak Linux) pipe operatörü, programları birbirine zincirlemek ve birlikte çalışmalarını sağlamak için kullanılır.  Örneğin, cat kullanarak bir dosyanın içeriğini gösterebilirsiniz, ancak dikey çizgi (|) kullandıysanız, dosyanın okunmasını kolaylaştırmak için cat komutunu more komutuna zincirleyebilirsiniz.

cat file1 | more

Buradaki temel fikir şudur: program1 fileX |  program2.  Ancak bu sadece bir dosya ve iki programla sınırlı değil.  Pipe operasyonu, aklınıza gelebilecek kadar çok değiştiriciyle ihtiyaç duyduğunuz kadar gelişmiş olabilir.

SSH durumlarında dikey çizgiyi (|) iyi şekilde kullanmanın bazı yolları şunlardır.

 

Sıkıştırılmış Dizinleri Otomatik Olarak Aktarın

UNIX kanallarını kullanmanın en yaygın yollarından biri, bir programın çıktısını yerel sistemin herhangi bir yerindeki bir dosyaya depolamaktır.  Örneğin echo “Merhaba, MakeTechEasier!”  |  tee Hello, “Merhaba, MakeTechEasier!” dizesini saklarken aynı zamanda echo programını çalıştıracaktır.  “Merhaba” dosyasının içinde.

A terminal showing a basic UNIX pipe redirection in a local machine.

Bununla birlikte, dizinleri iki Linux  bilgisayarı arasında aktarmak için bu fikri kullanabilirsiniz.  Bunu yapmak için tar kullanarak göndermek istediğiniz klasörü okuyun ve ardından bunu SSH arka plan programınıza aktarın:

tar czf - "~/Documents/myfolder" | ssh [email protected] "tar xzf - -C ~/Documents/"

Bu komut, klasörünüzü bir tar arşivinde paketleyecek ve onu komutun standart çıktısına gönderecektir.  UNIX kanalı daha sonra bu verileri okuyacak ve SSH kullanarak uzaktaki Linux ana makinenize gönderecektir.

Dosyalarınızı uzak ana bilgisayarlardan çıkarmak için bu komutu da tersine çevirebilirsiniz:

ssh [email protected] "tar czf - ~/Documents/myfolder" | tar xzf - -C "~/Documents/"

 

Uzak Bilgisayarlardan Dosya Aktarma ve Alma

Ağ üzerinden tek tek dosyalar göndermek için pipe operaatörü ve SSH’yi de kullanabilirsiniz.  Bu, bir dosyanın içeriğini yüklemenin ve bunu SSH yoluyla göndermenin bir yolu olarak cat’i kullanarak çalışır:

cat < my.local.file | ssh [email protected] "cat > my.remote.file"

Uzak  bilgisayar, yerel cat işleminden çıktı akışını alacak ve dosyayı olduğu gibi yeniden oluşturacaktır.

Uzak bilgisayardan bir dosya almak için komutun sırasını tersine çevirmeniz ve uzak dosyanızın yolunu sağlamanız gerekir:

ssh [email protected] "cat < my.remote.file" | cat > my.local.file
A terminal showing individual file transfer using an SSH pipe in Linux.

Sürücüleri Uzaktan Yedekleme ve Geri Yükleme

Dosya ve dizin göndermeye benzer şekilde, Linux’taki tüm sürücüleri bir UNIX kanalı ve SSH ile uzaktan yedeklemek mümkündür.  Bu, iş yeri dışında hızlı yedeklemeler oluşturmak istiyorsanız ve şu anda yedek bir fiziksel sürücünüz yoksa yararlı olabilir.

Bir sürücünün tamamını yedeklemek için, yedeklemek istediğiniz sürücüye “if=” değişkeni ayarlanmış olarak dd’yi çalıştırın, ardından bunu SSH arka plan programınıza aktarın:

sudo dd if=/dev/sda | ssh [email protected] "dd of=sda.img"

Bu komutu tersine çevirmek aynı zamanda uzak makinedeki disk görüntüsünü fiziksel diske geri yüklemenize de olanak tanır:

ssh [email protected] "dd if=sda.img" | sudo dd of=/dev/sda

Ayrıca bu SSH kanalı sözdizimi ayrı disk bölümleriyle de çalışacaktır.  Örneğin, sisteminizde “/dev/sda4” içerisinde bir /home bölümü varsa, bunun bir yedeğini oluşturmak için aşağıdaki komutu çalıştırabilirsiniz:

sudo dd if=/dev/sda4 | ssh [email protected] "dd of=home.img"

 

Ses Girişini Uzak Bir Makineye Yönlendirme

SSH borularının faydalarından biri, uzaktaki makinelerle sanki yerel bir kaynakmış gibi etkileşim kurmanıza olanak sağlamasıdır.  Bu, bir sistemin ses girişi gibi cihaz dosyalarına erişme yeteneğini de içerir.

Bunu yapmak için SSH kullanarak uzak bir ALSA alt kabuğunu çalıştırın ve çıktısını yerel ALSA arka plan programınıza gönderin:

ssh [email protected] "arecord -f cd" | aplay

Bu, uzak makinedeki varsayılan ses giriş cihazını dinleyecek ve sisteminizde duyduklarını çalacaktır.  Bununla birlikte, komutları ters çevirmek, yerel makinenizin ses girişini uzaktaki ana makinenizin ses çıkışına gönderecektir:

A terminal showing an active audio stream using SSH pipes.
arecord -f cd | ssh [email protected] "aplay"

ALSA SSH kanalı, onu diğer ses çalma araçlarıyla birleştirdiğinizde de çalışacaktır.  Örneğin, arecord çıktısını bir SSH kanalından ffmpeg’e gönderebilirsiniz:

ssh [email protected] "arecord -f cd" | ffplay -nodisp -

Uzak Web Kamerasından Canlı Video Akışı

Linux’ta SSH borularının bir başka harika kullanımı da canlı video web kamerası yayınlarının yayınlanmasıdır.  Tıpkı seste olduğu gibi, bu da uzaktaki bir ana bilgisayarın aygıtından yararlanmanıza ve çıktısını yerel makinenizde oluşturmanıza olanak tanır.

Uzak bir ana bilgisayarın web kamerasından akış sağlamak için SSH’yi bir ffmpeg alt kabuğuyla çalıştırın ve ardından bunu yerel makinenizdeki bir video oynatma istemcisine yönlendirin:

ssh [email protected] "ffmpeg  -r 14 -s 640x480 -f video4linux2 -i /dev/video0 -f matroska -" | mpv --demuxer=mkv /dev/stdin

Bu komut, ham video çıkışını uzak makinenizdeki ilk web kamerasından yayınlayacaktır.

A screenshot showing an active webcam video feed going through an SSH pipe in Linux.

Uzak web kameranızdaki görüntüleri ayrı bir dosyaya kaydetmek de mümkündür.  Bunu, verileri video oynatıcınıza yönlendirmeden önce SSH kanalından tee’ye göndererek yapabilirsiniz:

ssh [email protected] "ffmpeg  -r 14 -s 640x480 -f video4linux2 -i /dev/video0 -f matroska -" | tee my_recording.mkv | mpv --demuxer=mkv /dev/stdin

Ses ve videonun yanı sıra, uzaktaki bir makinenin TTY’sine ham metin göndermek için SSH kanallarını da kullanabilirsiniz.  GUI’si olmayan bir sisteme durum mesajları göndermek istiyorsanız bu kullanışlıdır.

Başlamak için yerel makinenizde bir FIFO kanalı oluşturun:

mkfifo my-fifo

FIFO’nuzla bir dinleme kuyruğu komutu çalıştırın ve çıktısını bir SSH arka plan programına gönderin:

tail -f my-fifo | ssh [email protected] "cat > /dev/tty0"

echo komutunu kullanarak metin verileri göndererek yeni FIFO kanalınızın ağ üzerinden çalışıp çalışmadığını test edin:

echo "Hello, MakeTechEasier!" > my-fifo
A terminal showing arbitrary text in a machine's TTY console.

Not: Makinenizin TTY’sine metin göndermek yalnızca makinenin root hesabıyla oturum açtıysanız işe yarar.

Uzak Verileri Yerel Panoya Aktarma

Sistem panosunun en büyük dezavantajı yalnızca yerel makineyle çalışmasıdır.  Birden fazla bilgisayarla çalışıyorsanız ve geçici dosyalar oluşturmadan veri aktarmak istiyorsanız bu bir sorundur.

Bunu düzeltmenin bir yolu, uzak bir dosyayı doğrudan yerel sistem panonuza okuyabilen ve gönderebilen bir SSH kanalı oluşturmaktır:

ssh [email protected] "cat < ~/ramces.txt" | xclip -sel clipboard

Bu komut uzaktaki makinenize bağlanacak, cat yardımcı programını çalıştıracak ve ardından “ramces.txt” dosyasını okumaya başlayacaktır.  İşlem tamamlandıktan sonra uzak verileri yerel makinenize geri gönderecek ve bunu sistem panonuza yönlendirecektir.

A terminal showing the clipboard of the local machine after an SSH pipe.

Ayrıca aşağıdaki komutu kullanarak sisteminizin geçerli panosunu uzaktaki makinenize bir dosya olarak gönderebilirsiniz:

xclip -sel clipboard -o | ssh [email protected] "cat > ~/clip.txt"

 

 

 

Yazının orijinalini buradan okuyabilirsiniz.