Hướng dẫn phpseclib cryptrsa - phpseclib cryptrsa

Giới thiệu SSH và FTP

SSH là gì ?

SSH (viết tắt của từ Secure Socket Shell) là một giao thức mạng được sử dụng để đăng nhập vào một máy tính từ xa. Chẳng hạn bạn có một máy tính ở nhà cài Linux có cài SSH thì bạn có thể đăng nhập vào máy tính đó từ xa để quản lý dữ liệu. Các dữ liệu mà bạn gửi đi hoặc nhận thông qua giao thức SSH sẽ đều được mã hóa lại để bảo mật thông tin an toàn hơn.SSH chính là giao thức được sinh ra để thay thế cho telnet

FTP là gì ?

FTP là chữ viết tắt của File Transfer Protocol (Giao thức chuyển nhượng tập tin), đây là một giao thức giúp bạn dễ dàng trao đổi các dữ liệu giữa máy tính của bạn với host và ngược lại. Tại FTP, bạn sẽ có quyền quản lý toàn bộ các dữ liệu dạng tập tin và thư mục có trên host ngoại trừ database. Tất cả các gói host bạn mua có hỗ trợ control panel cPanel, DirectAdmin,…đều hỗ trợ sẵn FTP qua cổng kết nối 21. SFTP chính là giao thức an toàn của FTP (Secure FTP)File Transfer Protocol (Giao thức chuyển nhượng tập tin), đây là một giao thức giúp bạn dễ dàng trao đổi các dữ liệu giữa máy tính của bạn với host và ngược lại. Tại FTP, bạn sẽ có quyền quản lý toàn bộ các dữ liệu dạng tập tin và thư mục có trên host ngoại trừ database. Tất cả các gói host bạn mua có hỗ trợ control panel cPanel, DirectAdmin,…đều hỗ trợ sẵn FTP qua cổng kết nối 21. SFTP chính là giao thức an toàn của FTP (Secure FTP)File Transfer Protocol (Giao thức chuyển nhượng tập tin), đây là một giao thức giúp bạn dễ dàng trao đổi các dữ liệu giữa máy tính của bạn với host và ngược lại. Tại FTP, bạn sẽ có quyền quản lý toàn bộ các dữ liệu dạng tập tin và thư mục có trên host ngoại trừ database. Tất cả các gói host bạn mua có hỗ trợ control panel cPanel, DirectAdmin,…đều hỗ trợ sẵn FTP qua cổng kết nối 21. SFTP chính là giao thức an toàn của FTP (Secure FTP)

Vì chủ yếu là code và cách thức sử dụng thư viện phpseclib nên mình giới thiệu các thức dùng php để kết nối 2 dịch vụ ssh và ftp. Hoạt động thế nào chắc các bạn đọc code sẽ hiểu 🙂

Kết nối ssh chỉ với user và password :

php
include('Net/SSH2.php');

$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
?>

Kết nối ssh có sử dụng public key

là cách kết nối ssh mà ngoài user và password các bạn phải có public key của ssh server để tăng tính bảo mật , để hiểu thêm về public key là gì các bạn có thể xem ở đây

php
include('Net/SSH2.php');
include('Crypt/RSA.php');

$ssh = new Net_SSH2('www.domain.tld');
$key = new Crypt_RSA();
$key->loadKey(file_get_contents('privatekey'));
$rsa->setPassword('.....');
if (!$ssh->login('username', $key)) {
    exit('Login Failed');
}

echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
?>

Sau khi đã kết nối thành công các bạn hoàn toàn có thể chạy các lệnh conmand trực tiếp bằng code php của mình :

ví dụ :

echo $ssh->exec(‘pwd’); echo $ssh->exec(‘ls -a’); echo $ssh->exec(‘ls -a’);
echo $ssh->exec(‘ls -a’);

nhưng exec là các chạy lệnh không trạng thái, có nghĩa nó sẽ không lưu kết quả của lần chạy trước nên nếu như

echo $ssh->exec(‘cd etc/httpd’); echo $ssh->exec(‘ls -a’); echo $ssh->exec(‘ls -a’);
echo $ssh->exec(‘ls -a’);

thì nó sẽ không list ra được các file và thư mục trong httpd mà  sẽ list ra thư mục mặc định khi login vào

để khắc phục nhược điểm này các bạn có thể chạy nhiều lệnh trong cùng một exec

$ssh->exec('cd /home/username; ls -la'); //Lists all files at /home/username
ngoài ra các bạn có thể sử dụng read và write, chi tiết các bạn xem thêm ở đây

Kết nối ftp :

trường hợp chỉ user và password

php
include('Net/SFTP.php');

$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

trường hợp sử dụng public key

set_include_path(get_include_path() . PATH_SEPARATOR . ‘phpseclib’); include(‘Net/SFTP.php’); include(‘Crypt/RSA.php’); include(‘Net/SFTP.php’); include(‘Crypt/RSA.php’);
include(‘Net/SFTP.php’);
include(‘Crypt/RSA.php’);

$sftp = new Net_SFTP(‘your domain’); $rsa = new Crypt_RSA(); $rsa->setPassword(‘password’); $rsa = new Crypt_RSA(); $rsa->setPassword(‘password’);
$rsa = new Crypt_RSA();
$rsa->setPassword(‘password’);

$rsa->loadKey(file_get_contents(‘public key path’)); if ($rsa) { echo “load key ok \n”; }else { echo ‘not load key’; die; } if (!$sftp->login(‘aloha’, $rsa)) { exit(‘Login Failed’); }else{ echo “Connection success \n”; } if ($rsa) { echo “load key ok \n”; }else { echo ‘not load key’; die; } if (!$sftp->login(‘aloha’, $rsa)) { exit(‘Login Failed’); }else{ echo “Connection success \n”; }
if ($rsa) {
echo “load key ok \n”;
}else {
echo ‘not load key’; die;
}
if (!$sftp->login(‘aloha’, $rsa)) {
exit(‘Login Failed’);
}else{
echo “Connection success \n”;
}

với ftp/ sftp các bạn hoàn toàn có thể đẩy file lên server và lấy file từ server về một cách rất dễ dàng

$sftp -> get(‘đường dẫn file trên serve’,’tên file sẽ lưu ở local’);  // lấy file về

$sftp->put('filename.remote', 'xxx'); // đẩy file lên

Vậy là mình đã hướng dẫn các bạn sử dụng phpseclib để kết nối ssh và ftp rất dễ dàng

nếu có thắc mắc các bạn có thể liên hệ với mình qua FB  hoặc mail : . Chúc các bạn học tốt