PHP SSH2 Kütüphanesi

PHP ile linux server tarafında başka bir linux server a bağlanıp işlem yapmanız gerekiyor ise SSH2 eklentisi tam olarak size göre. Birçok servisimizde ve projemizde kullanmış olduğumuz SSH2 eklentisine ufak bir kütüphane yazdım.

SSH2 kütüphanesini kullanabilmek için kullanmış olduğunuz Linux dağıtımına göre kütüphaneyi kurmanız gerekiyor. Centos 7 için kullanmış olduğum kaynak : https://www.adveyer.com/blog/centos-7-ssh2-php-extension-kurulumu/

/*****************************
 *
 * SSH2 CUSTOM CLASS
 * Author: uğur karadeniz
 * Contributors:
 *    diplomasizmuhendis.com
 *    ugurrkaradeniz@gmail.com
 *    2017/12/21
 *
 ******************************/

class ssh2_uks
{
   
	var $ip;
	var $ssh_user;
	var $ssh_pass;
	var $ssh_port;
	var $ftp_user;
	var $ftp_pass;
	var $ftp_port;
	
	var $ssh;

	function __construct()
	{
		// kütüphane yüklenirken birşeyler yaptırmak isterseniz bu alanı kullanabilirsiniz.
	}
	
	private function check_init_par()
	{
		if( !$this->ip )
			return false;
		if( !$this->ssh_user )
			return false;
		if( !$this->ssh_pass )
			return false;
		if( !$this->ssh_port )
			return false;
		return true;
	}

	public function ssh_connect( $ip = null , $ssh_user = null, $ssh_pass = null, $ssh_port = null )
	{
		ini_set( 'default_socket_timeout', 5 );
		
		$this->ip = $ip;
		$this->ssh_user = $ssh_user;
		$this->ssh_pass = $ssh_pass;
		$this->ssh_port = $ssh_port;
		
		if( $this->ssh )
			return $this->ssh;
		
		$check_init = $this->check_init_par();
		if( !$check_init )
			return false;
		
		// SSH portu kontrol
		$connection = @fsockopen( $this->ip, $this->ssh_port, $err1, $err2, 5 );
		if ( !is_resource( $connection ) )
			return false;
		
		@fclose( $connection );

		// SSH bağlantımızı açıyoruz..
		$this->ssh = @ssh2_connect( $this->ip, $this->ssh_port );
		if( !$this->ssh )
			return false;
		
		// SSH kullanıcı adı şifremiz bağlantımız üzerinden oturum açıyoruz.
		$is_login = ssh2_auth_password( $this->ssh, $this->ssh_user, $this->ssh_pass );
		if( !$is_login )
			return false;
		return $this->ssh;
	}
	
	// komutlarımızdan dönen sonuçları toplamak için kullanacağımız fonksiyon.
	public function shell_result( $cmd )
	{
		if( !$this->ssh || !$cmd )
			return false;
		
		$stream = ssh2_exec( $this->ssh, $cmd );
		stream_set_blocking( $stream, true );
		$stream_out = ssh2_fetch_stream( $stream, SSH2_STREAM_STDIO );
		return stream_get_contents( $stream_out );
	}
	
	public function ssh_file_get( $remote_file, $local_file )
	{
		if( !$remote_file || !$local_file )
			return false;
		
		return ssh2_scp_recv( $this->ssh, $remote_file, $local_file );
	}
	
	function __destruct()
	{
	   unset( $this->ssh );
	}
}

Kullanım örneği;

Önce kullanmış olduğunuz framework yapınıza göre kütüphaneyi yükleyin ( load ).  Sonrası ise standart SSH komutlarınızı istediğiniz gibi basabilirsiniz. 🙂

$ssh = new ssh2_uks();

$host = '127.0.0.1';
$user = 'root';
$pass = 'password';
$port = 22;

$is_conenct =  @$ssh->ssh_connect( $host, $user, $pass, $port );
if( !$ssh->ssh || !$is_conenct )
	die( 'Bağlantı sağlanamadı..' );

$ls = $ssh->shell_result( "ls /home/" );
$ls = explode( "\n", $ls );
print_r( $ls );

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir