下面是我试图实现的:打开一个shell(korn或bash,没关系),从该shell,我想打开一个ssh连接(sshuser@host
)。在某个时候,它可能会发生,我会被提示输入密码,或者我可能会被问到是否确定我想要连接(违规密钥)。
在有人问之前:是的,我知道有一个ssh2 exec调用插件,但是我正在使用的服务器不支持它,也不太可能这样做。
以下是我迄今为止所尝试的:
$desc = array(array('pipe','r'),array('pipe','w'));//used in all example code
$p = proc_open('ssh user@host',$desc,$pipes);
if(!is_resource($p)){ die('@!#$%');}//will omit this line from now on
sleep(1);//omitting this,too but it's there every time I need it
然后我尝试读取控制台输出(stream\u get\u contents($pipes[1])
),查看下一步必须传递的内容(密码,yes或返回'connection failed:')。stream\u get\u contents($pipes[1])
和proc\u close$p。
这给了我以下错误:
不会分配伪终端,因为stdin不是终端。
所以,我认为ssh是在php://
io-stream上下文中调用的,似乎是上述错误的合理解释。
接下来:我考虑了我的第一个SO问题,并决定首先打开bash/ksh shell可能是个好主意:
$p = proc_open('bash',$desc,$pipes);
从这里开始,我得到了完全相同的错误消息,只是这一次,脚本停止运行,但是ssh确实运行了。所以我满怀希望,然后觉得自己很愚蠢,最后绝望了:
$p=proc_open('bash && ssh user@host',$desc,$pipes);
等待几秒钟后,我出现以下错误:
PHP致命错误:允许内存大小为134217728字节耗尽(尝试分配133693440字节)
即使在我最后一次孤注一掷的尝试中,调用堆栈也会不断打开stream\u get\u contents行:
#!/path/to/bin/php -n
<?php
$p = proc_open('bash && ssh user@host',array(array('pipe','r'),array('pipe','w')),$ps);
if (!is_resource($p))
{
die('FFS');
}
usleep(10);
fwrite($ps[0],'yes'."\n");
fflush($ps[0]);
usleep(20);
fwrite($ps[0],'password'."\n");
fflush($ps[0]);
usleep(20);
fwrite($ps[0],'whoami'."\n");
fflush($ps[0]);
usleep(2);
$msg = stream_get_contents($ps[1]);
fwrite($ps[0],'exit'."\n");
fclose($ps[0]);
fclose($ps[1]);
proc_close($p);
?>
我知道,这是一个混乱,大量的fflush
和冗余,但问题是:我知道这个连接将首先提示我有问题的密钥,然后询问密码。我猜$pipes[1]中的流持有ssh连接,因此它的内容是巨大的。我需要的是一根管子里面的管子。。。这可能吗?我一定错过了什么,如果这不可能,烟斗有什么用。。。我猜proc_open命令一开始就错了,(错误:管道断裂)。但我真的看不到任何其他方法来解决第一个错误。。。有什么想法吗?或者,如果上面的咆哮一点也不清楚(很可能不清楚),就跟进问题。
在有人问之前:是的,我知道有一个ssh2 exec调用插件,但是我正在使用的服务器不支持它,也不太可能这样做。
实际上有两个。PECL模块是大多数服务器都没有安装的PITA,phpseclib是一个纯phpsh2实现。其使用示例如下:
<?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');
?>
本文向大家介绍ruby开发的交互式程序例子,包括了ruby开发的交互式程序例子的使用技巧和注意事项,需要的朋友参考一下 实现pry,ronin,msf类似的终端下交互功能,这里主要用到了ripl gem: 1.能够调用定义的方法,如help 2.能够执行系统命令 3.能够类似irb/pry进行ruby语言解析 安装: 示例 ripl这个gem,它也提供很多插件,如下是一个简单的终端下交互实现: 使
我知道当我在Openssl中使用CBC模式时,我可以给出一个块大小的倍数作为输入。但其他模式呢?ECB,CFB,OFB?我看到了一个医生,但我并不完全清楚。我应该打电话给他们吗? 比如说欧洲央行。它一次加密64位。所以伪代码应该是这样的(应该是这样的)? 但是上面的代码并不好。当我将更改为时,没关系。有什么好方法可以做到这一点?我的意思是,我们都知道8x8=64位,所以这应该是正确的,但事实并非如
我有一个问题,在IE和边缘浏览器与使用'Open Sans'字体,在本地. css文件中定义。 open-sans.html: 在Chrome或FF中,我看到了正确的字体(本地我没有安装“开放式SAN”;OS-Windows10)。。。在IE/Edge中-字体不起作用。但是,如果我删除了指向open-sans.css的链接,并将使用指向font.googleapis.com的链接,那么IE/Edg
过程管理/生命周期 瀑布式开发 PCM RUP 敏捷开发 Agile & Scrum 硝烟中的Scrum和XP(http://www.infoq.com/cn/minibooks/scrum-xp-from-the-trenches) Kanban
学习各种组件和工具帮助你对Django应用进行改进和测试:
我想创建一个到RabbitMQ的Openshift路径。 据我了解https://docs.openshift.com/container-platform/3.11/architecture/networking/routes.html,“TLS with SNI”支持应该能够检查SNI标头,然后将流量路由到适当的服务。 不幸的是,我在边缘终止和重新加密终止方面都遇到了问题。在这两种情况下,HA