Raspberry Pi ile C# SSH haberleşmesi

Eğer Raspbian OS kullanıyorsanız otomatik ssh sunucusu kurulu olacağından bir sorun teşkil etmeyecektir. Fakat Ubuntu Mate gibi bir sistemde ssh server varsayılan olarak kurulu gelmeyeceğinden bağlantı için ssh server kurulumu gerekecektir.

Öncelikle cihazınızda ssh server kurulu olmaması durumuna ilişkin, terminal ekranında;

  • sudo su
  • sudo apt-get install openssh-server
    • ssh server'i kuruyoruz.
  • sudo nano /etc/ssh/sshd_config ile ilgili ssh server bilgilerine erişebilirsiniz.
  • Kurulum sonrasında, sudo /etc/init.d/ssh restart komutunu terminalden yollayınız.
    • aksi takdirde ssh server başlamayacaktır.

Cihaz üzerinde yapmanız gereken birşey daha var;

  • Cihazı yeniden başlatıp openssh-server'in her boot olduğunda çalışıp çalışmadığını test etmelisiniz.

Visual Studio üzerinde SSH bağlantısı nasıl sağlayabileceğimiz konusuna geçelim;

  • Öncelikle bir C# form uygulaması açınız,
  • Ardından Tools>Nuget Package Manager>Package Manager Console,
  • Açılan Package Manager Console kısmında en alt kısımda PM> yazısının hemen yanına,
  • Install-Package SSH.NET yazıp enter'a basarak ilgili paketin projemize yüklenmesini sağlıyoruz.
  • Burada Renci'nin SSH kütüphanesini nuget üzerinden yüklemiş olduk.

C# Form Uygulamamıza geçiyoruz;

  • Uygulamamıza iki adet buton ekliyoruz.
  • İlk buton Aç, İkinci buton Kapat olacak şekilde bilgileri düzenliyoruz.
  • Butonlarımızın amacı GPIO pinlerinin yönetilmesini sağlayacak kodları içereceği bilgisini paylaşalım.
  • Projemize using Renci.SshNet; ile ilgili kütüphanelerin kullanımını sağlayalım.

Butonların içerisine yazacağımız kodlara geçelim;

  • Kodlarımızda SSH Connection bilgilerine ilişkin ip adresi, kullanıcı adı ve şifresi bilgilerini yazıyor olacağız.

Aç butonu için kodlarımız;

try
            {
                using (var client = new SshClient("192.168.2.140", "user", "passwOrd"))
                {
                    client.Connect();
                    SshCommand cmd = client.RunCommand("python /var/www/html/test_on.py");
                    cmd.Execute();
                    client.Disconnect(); client.Dispose();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("SSH Bağlantı sorunu oluştu !");
            }

Kapat butonu için kodlarımız;

try
            {
                using (var client = new SshClient("192.168.2.140", "user", "passwOrd"))
                {
                    client.Connect();
                    SshCommand cmd = client.RunCommand("python /var/www/html/test_off.py");
                    cmd.Execute();
                    client.Disconnect(); client.Dispose();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("SSH Bağlantı sorunu oluştu !");
            }

Raspberry Pi'ye komutları terminal üzerinden göndermiş olduk. Buton üzerinden ssh ile gönderdiğimiz komutlar 5sn gecikmeli olarak çalışabilmektedir, bunun sebebi connection ile komut yollamayı using ile tek bir buton üzerinde yazmış olmamızdan dolayıdır. Aksi bir durum olmadığında anlık çalışmaktadır.

Not: Eğer openssh-server kurmadan cihaza bağlanmak isterseniz, C# üzerinde System.Net.Sockets.SocketException hatası alacağınızı unutmamanızı hatırlatmış olayım.

Bu Makaleyi kendimden de birşeyler katarak, Tarık Kızıltan'ın ricası ve kendi döküman notlarından da yararlanarak hazırladım. Emeğinden ve Makale paylaşımı için kendisine ayrıca teşekkür ediyorum.

Bu makaleyi paylaşın:

3 Comments

  1. Merhabalar, güzel bir anlatım olmuş. Öncelikle sizi tebrik ederim. Size bir sorum olacak. Ben kinect için visual studio üstünde yazdığım iskelet izleme kodunu kullanarak raspberry pi 3 ten robot kola bilgi aktarmak istiyorum. Fakat bunun için raspberry pi 3 de ayrı bir kod yazmam gerekirmi yoksa visual studioda eklediğim kodlarla iletişimi sağlayıp kola istediğim bilgileri gönderebilirmiyim? Gönderebilirsem gecikmeli mi olur? Ya da kendi yazdığım programı direk raspberry üstünden sürdürerek kinect kamerayı raspberry pi'a bağlayıp o şekilde kullanabilir miyim? Cevaplarsanız çok sevinirim. iyi Çalışmlar ve Güzel işlerinizin devam etmesi dileğiyle

Bir yorum bırakın