我需要创建 2 个函数:一个使用 SFTP 上传文件,另一个使用 SCP。我正在使用phpseclib和put方法;我相信我已经完成了 SFTP 功能。
现在,我正在尝试执行 SCP 功能。根据http://adomas.eu/phpseclib-for-ssh-and-scp-connections-with-php-for-managing-remote-server-and-data-exchange/,似乎以下是我需要的东西去做:
In case of SCP:
1. Including the needed file: include('/path/to/needed/file/Net/SFTP.php');
2. Creating object and making connection:
$sftp = new Net_SFTP('host');
if (!$sftp->login('user', 'password')) { exit('Login Failed'); }
3. Reading contents of a file: $contents=$sftp->get('/file/on/remote/host.txt');
4. Copying file over sftp with php from remote to local host: $sftp->get('/file/on/remote/host.txt', '/file/on/local/host.txt');
5. Copying file over sftp with php from local to remote host: $sftp->put('/file/on/remote/host.txt', '/file/on/local/host.txt');
6. …Run Code Online (Sandbox Code Playgroud) 我在 /home/pi/mydir 中有我想执行的脚本,所以我需要做的第一件事是
$ssh->exec('cd mydir');
Run Code Online (Sandbox Code Playgroud)
进而
$ssh->exec('./script');
Run Code Online (Sandbox Code Playgroud)
但它不起作用所以有人可以帮助我吗?
我刚刚为自己发现了 phpseclib,并想将它用于我的代码。不知何故,我不知道如何将文件从一个 sftp 目录复制到另一个 sftp 目录。如果你能帮我解决这个问题,那就太好了。
例如:
复制所有文件
/jn/xml/
到
/jn/xml/备份/
我不明白这个错误:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- don't install phpseclib/bcmath_compat 1.0.3|don't install php 7.3.13
- composer.json/composer.lock requires php 7.3.* -> satisfiable by php[7.3.13].
- Installation request for phpseclib/bcmath_compat 1.0.3 -> satisfiable by phpseclib/bcmath_compat[1.0.3].
Run Code Online (Sandbox Code Playgroud)
我正在运行 PHP 7.3.13。
有任何想法吗?
按照标题,有没有人实现这一目标?将此库包含在codeigniter(v2.1.2)中的最佳做法是什么?
我知道可以通过像任何其他PHP应用程序一样简单地使用include/require语句来完成,但是一旦完成,这个项目将被移交给多个开发人员,我想确保使用CI开发人员想要的设计模式正确构建它.
我在测试控制器中尝试了以下内容
public function index(){
$this->load->library('phpseclib0.3.0/Net/SFTP');
}
Run Code Online (Sandbox Code Playgroud)
不过我受到了欢迎:
不存在的类:SFTP
phpseclib取自这里.
我正在使用php phpseclib.我在执行脚本时遇到以下错误
PHP Fatal error: Class 'Crypt_RSA' not found
in /home/xxxxx/public_html/index.php on line 5
Run Code Online (Sandbox Code Playgroud)
PHP SCRIPT
<?php
include('library/php/Net/SSH2.php');
$key = new Crypt_RSA();
$key->setPassword('891600909v');
$key->loadKey(file_get_contents('891600909'));<--This is the pvt key file in home directory in my ubuntu PC-->
$ssh = new Net_SSH2('www.xxxxx.com');
if (!$ssh->login('xxxxx.com', $key)) {
exit('Login Failed');
}
echo $ssh->read('xxxxx.com@xxxxx.com:~$');
$ssh->write("ls -la\n");
echo $ssh->read('xxxxx.com@xxxxx.com:~$');
?>
Run Code Online (Sandbox Code Playgroud)
我怎么能解决这个问题?
如何获取已执行命令的返回码:
<?php
include('Net/SSH2.php');
$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
exit('Login Failed');
}
echo $ssh->exec('cat /tmp/file_tmp');
//verify the return code
echo $ssh->exec('echo $?');
?>
Run Code Online (Sandbox Code Playgroud)
echo $?(Linux) 和echo %errorlevel%(Win) 不起作用。
有任何想法吗??
我一直在尝试 phpseclib,以运行一个简单的 SSH 会话到各种云服务器。每次使用一键登录。
使用没有密码保护的密钥进行测试是可以的:我在标准端口 22 上尝试了一个,然后在非标准端口上尝试了另一个,两者都有效。(两者都在不同地区的 Amazon EC2 上。)
但是我尝试的第一个测试失败了,原因是:
SSH_MSG_USERAUTH_FAILURE: publickey,password
Run Code Online (Sandbox Code Playgroud)
它有一个受密码保护的密钥,带有一个非标准端口。这是我的脚本(已更改名称以保护无辜者):
include('Net/SSH2.php');
include('Crypt/RSA.php');
$ssh = new Net_SSH2('10.1.2.3', /*port*/999);
$key = new Crypt_RSA();
$key->setPassword('secrets');
$ret = $key->loadKey(file_get_contents('/home/tester/.ssh/my_private_key'));
if(!$ret){
echo "loadKey failed\n";
exit;
}
if (!$ssh->login('ubuntu', $key)) {
print_r($ssh->errors);
exit("Login Failed\n");
}
echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
Run Code Online (Sandbox Code Playgroud)
我做了ssh-agent -d /home/tester/.ssh/my_private_key(强迫它提示我),然后在命令行上使用 ssh,它工作了。如果我跳过设置密码,则loadKey()返回 false。
所以,现在我想知道是否不支持密钥类型?“坏”键是这样开始的:
-----BEGIN DSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,A541E5B6B9077483BCEF845
YMMV4.....
Run Code Online (Sandbox Code Playgroud)
而“好”键以:
-----BEGIN RSA PRIVATE KEY-----
YMMVgIBab54...
Run Code Online (Sandbox Code Playgroud)
我发现了这个问题,其中 Proc-Type 和 DEK-Info 看起来不错,但他是 …
我正在尝试通过PHP应用程序执行SSH命令.
通过PHP应用程序,我输入"./SSDownload.sh".通过我的终端SSH,我输入"./SSDownload.sh".
SSDownload.sh包含:
cd /var/www/html/dev/media/mp3/$1
spotify-to-mp3 songs.txt
Run Code Online (Sandbox Code Playgroud)
通过我的终端SSH,我收到了这样的回复:
Resolving "fancy iggy azalea"
Searching "fancy iggy azalea" on Grooveshark
"Iggy Azalea - Fancy (feat. Charli XCX)" will be downloaded
Downloading tracks...
[1/1] Iggy Azalea - Fancy (feat. Charli 100% [==================================] Time: 00:00:01
Download complete
Run Code Online (Sandbox Code Playgroud)
文件成功下载,并将文件放在正确的目录中.
我使用以下代码尝试使用PHP:
include('Net/SSH2.php');
$ssh = new Net_SSH2('iphere');
if (!$ssh->login('root', 'password')) {
exit('Login Failed');
}
echo "1 : " . $ssh->exec('./SSDownload.sh ' . $_GET['player']) . "<br />";
Run Code Online (Sandbox Code Playgroud)
输出:
Resolving "fancy iggy azalea" Searching "fancy iggy azalea" on Grooveshark …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用phpseclib在我的服务器上运行一些ssh命令.试图在下面,我得到的Class 'Net_SSH2' not found in....似乎表明phpseclib没有正确加载,但回声显示包含正在工作.
我在这做错了什么?
php<?php
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);
$thepath = $_SERVER['DOCUMENT_ROOT']. '/inc/phpseclib/Net/SSH2.php';
echo '<strong>Full include path:</strong> '. $thepath;
include ($thepath);
$included_files = get_included_files();
foreach ($included_files as $filename) {
echo "<br><strong>Included file:</strong>$filename";
}
$ssh = new Net_SSH2('xx.xx.x.xx.x'); // server's ip address
if (!$ssh->login('username', 'password')) { // filled in correctly
exit('Login Failed');
}
echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
?>
Done.
Run Code Online (Sandbox Code Playgroud)
Full include path: /var/chroot/home/content/08/555555555/html/inc/phpseclib/Net/SSH2.php
Included file:/home/content/08/555555555/html/TeamBoard/deploy.php
Included file:/home/content/08/555555555/html/inc/phpseclib/Net/SSH2.php
Fatal error: Class 'Net_SSH2' not …Run Code Online (Sandbox Code Playgroud) 所以我在一个项目中使用PHP Secure Communications Library 2.0并且它被用于很多地方(不同子目录中的不同文件)
目前,为了使其工作,我将 5 个目录和 1 个文件复制到每个子目录中,然后使用include('Net/SSH2.php'); 我确定这是不正确的。
文档说使用以下内容:
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('Net/SSH2.php');
Run Code Online (Sandbox Code Playgroud)
但我无法让它发挥作用。
我有一个文件/var/www/test.php,我有/var/www/phpseclib
到目前为止我所做的。
ini_set('display_errors', 1);
echo get_include_path(); //Gets me .:
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('Net/SSH2.php');
$sftp = new Net_SFTP('10.0.0.15'); //A valid IP for an SFTP host on the network
Run Code Online (Sandbox Code Playgroud)
这会导致致命错误:在 /var/www/test.php 中找不到 Class 'Net_SFTP'...
然后我将 phpseclib 目录移动到/tmp并更改为set_include_path(get_include_path() . PATH_SEPARATOR . '/tmp/phpseclib');
$sftp = new Net_SFTP('10.0.0.15');仍然导致致命错误:在 /var/www/test.php 中找不到 Class 'Net_SFTP'... …
我现在遇到RSA问题.我在Javascript和PHP中有相同的模数和指数.在javascript中都使用PKCS#1,我使用http://www-cs-students.stanford.edu/~tjw/jsbn/rsa.js
var rsa = new RSAKey();
rsa.setPublic("modulus","ex");
var result = rsa.encrypt(text);
Run Code Online (Sandbox Code Playgroud)
在PHP中,我使用http://phpseclib.sourceforge.net/
require_once 'Crypt/RSA.php';
$rsa = new Crypt_RSA();
$n="modulus";
$e="ex";
$rsa->modulus= new Math_BigInteger($n,16);
$rsa->publicExponent= new Math_BigInteger($e,16);
$key=$rsa->getPublicKey();
$rsa->loadKey($key);
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$ciphertext = $rsa->encrypt("1234");
echo bin2hex($ciphertext);
Run Code Online (Sandbox Code Playgroud)
但是2结果是不同的.可以请告诉我原因.非常感谢你
我使用php的net_ssh2模块登录服务器并检索文件以进行实时数据收集.服务器都具有相同的用户名和密码.我面临的问题是,如果其中一个服务器出现故障或由于某种原因有不同的密码,我的脚本就会停止.我需要脚本来跳过有问题的服务器并继续处理数组中的其他服务器.
这是我目前的PHP脚本:
include('Net/SSH2.php');
$servers=array('server1', 'server2','server3', 'server4', 'server5');
foreach ($servers as &$value1) {
$server=$value1."example.net";
$ssh = new Net_SSH2($server);
if (!$ssh->login('username', 'password')) {
exit('Login Failed');
}
Run Code Online (Sandbox Code Playgroud)
如何跳过我无法连接的服务器阵列中的服务器并继续处理其他服务器?
phpseclib ×13
php ×12
ssh ×5
sftp ×2
bash ×1
codeigniter ×1
composer-php ×1
exec ×1
javascript ×1
jsbn ×1
rsa ×1
scp ×1
ubuntu ×1