phpseclib (PHP Secure Communication Library) uzak sunucuda komut çalıştırma, dinamik SSH anahtarları oluşturma, SFTP aracılığıyla dosya indirme ve yükleme, SSH ya da SFTP bağlantısının testini gerçekleştirme ve bir sunucuda çalıştırılan komutların çıktısını görüntüleme gibi kullanım alanlarına sahip.

phpseclib ile 3 farklı kimlik doğrulama yöntemiyle uzak sunucuya bağlantı kurulabilir. Bu yöntemler RSA anahtarı, parola korumalı RSA anahtarı ve kullanıcı adı – parola şeklindedir. Önemli bir not olması açısından kullanıcı adı ve parola kullanılan doğrulama yöntemi güvenlik açısından önerilmemektedir.

Bağlantıların nasıl gerçekleştirildiğine gelin bir göz atalım.

RSA Anahtarı

Zaten var olan bir RSA anahtarı üzerinden gidelim. Güvenli bir RSA anahtarı oluşturmadıysanız makalenin ilerleyen bölümlerinde nasıl oluşturacağınıza dair bir bölüm bulunuyor.

<?php
include('vendor/autoload.php')
use phpseclib\Crypt\RSA;
use phpseclib\Net\SSH2;

//Oluşturulan RSA anahtarını belirtiyoruz.
$key = new RSA();
$key->loadKey(file_get_contents('rsa/anahtarinin/yolu'));

$hostname = '192.168.0.1';
$port = 22;

//Belirtilmemesi durumunda port numarası varsayılan 22dir.
$ssh = new SSH2($hostname, $port);

$login = $ssh->login('root', $key);

if (!$login) {
    exit('Giriş başarısız!');
}

?>

Parola Korumalı RSA Anahtarı

Eğer RSA anahtarınız parola korumalıysa, phpseclib bunun da üstesinden gelebiliyor. Kullanım örneği aşağıdaki gibi:


<?php
include('vendor/autoload.php')
use phpseclib\Crypt\RSA;
use phpseclib\Net\SSH2;

//Oluşturulan RSA anahtarını belirtiyoruz.
$key = new RSA();
$key->setPassword('rsa-anahtarinin-parolasi');
$key->loadKey(file_get_contents('rsa/anahtarinin/yolu'));

$hostname = '192.168.0.1';
$port = 22;

//Belirtilmemesi durumunda port numarası varsayılan 22dir.
$ssh = new SSH2($hostname, $port);

$login = $ssh->login('root', $key);

if (!$login) {
    exit('Giriş başarısız!');
}

?>

Normal RSA anahtarıyla girişe ek olarak parola korumalı RSA anahtarıyla giriş yaparken
$key->setPassword('rsa-anahtarinin-parolasi'); satırını ekliyoruz.

Kullanıcı Adı ve Parola ile Doğrulama

Daha önce de belirtmiş olduğumuz gibi kullanıcı adı ve parola ile doğrulama güvenlik gerekçeleri nedeniyle iyi bir yöntem değil. Önermemekle beraber nasıl doğrulama yapılacağını gösterelim

<?php
include('vendor/autoload.php')
use phpseclib\Net\SSH2;

$hostname = '192.168.0.1';
$port = 22;
$ssh = new SSH2($hostname, $port);


$login = $ssh->login('kullanici-adi', 'parola');

if (!$login) {
    exit('Giriş başarısız!');
}

?>

Uzak sunucu üzerinde doğrulamalarımızı bu şekilde gerçekleştiriyoruz. Gelelim uzak sunucu üzerinde nasıl komut çalıştıracağınıza.

Uzak Sunucuda Komut Çalıştırma

Uzak sunucu üzerinde SSH bağlantısı başarılı olduktan sonra komut çalıştırma işlemi gerçekten çok basit. Tek yapmanız gereken bağlantı sonrasında $ssh->exec($komut); kodunu kullanmak.

Linux VDS

Linux VDS
$5'dan başlayan fiyatlarla

Hemen Satın Al

Örnek olması açısından giriş ve komut çalıştırma için örnek bir kod parçasını da ekleyelim.



<?php
include('vendor/autoload.php')
use phpseclib\Crypt\RSA;
use phpseclib\Net\SSH2;

//Oluşturulan RSA anahtarını belirtiyoruz.
$key = new RSA();
$key->loadKey(file_get_contents('rsa/anahtarinin/yolu'));

$hostname = '192.168.0.1';
$port = 22;

//Belirtilmemesi durumunda port numarası varsayılan 22dir.
$ssh = new SSH2($hostname, $port);

$login = $ssh->login('root', $key);

if (!$login) {
    exit('Giriş başarısız!');
}

echo $ssh->exec('pwd');
# /home/username
echo $ssh->exec('whoami');
# username

?>

RSA Anahtarı Oluşturma

RSA anahtarı oluşturmanın birden çok yolu var ancak hızlı bir kurulum olması açısından aşağıdaki komutu kullanabilirsiniz.

mkdir ~/.ssh && cd ~/.ssh && ssh-keygen -m pem -t rsa && cat id_rsa.pub >> authorized_keys && cat id_rsa

Bu komutu çalıştırdığınızda mkdir: cannot create directory hatası alabilirsiniz. Bu durumda mkdir ~/.ssh && kısmını silerek tekrar çalıştırabilirsiniz.

Komutun özetle ne yaptığından bahsetmemiz gerekirse; mkdir klasör oluşturmak için kullanılmaktadır. ~/.ssh ile birleştirildiğinde kullanıcıya ait home dizininde .ssh adında klasör oluşturulacağı anlamına gelmektedir. cd, Change Directory kısaltımı olup, belirlenen dizine gitmenizi sağlayacaktır.

ssh-keygen -m pem -t rsa ise güvenli bir anahtar oluşturmaya ilk adımınız olabilir. Makalemizin konusu phpseclib ile SSH bağlantısı olduğu için bu komutun yeterli olacağını düşünüyorum.

cat id_rsa.pub >> authorized_keys komutuyla oluşturduğumuz RSA anahtarının bulunduğumuz sunucu için yetkili olduğunu belirtiyoruz.

En sonda bulunan cat id_rsa komutu ile phpseclib ile bağlanırken kullanacağımız RSA anahtarının bir çıktısını görüntülüyoruz.

Son olarak RSA anahtarını sakladığınız sunucu üzerinde, dosya izinleri olarak 440 verirseniz daha güvenli bir saklama ortamı sağlayabilirsiniz.