我使用过这个脚本,但它不再适合我了。我必须访问mysite.com/serv.php来调用脚本。所以,首先是脚本:
$ip = "ip";
$user = "user";
$pass = "password";
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
if(!($con = ssh2_connect($ip, 22))){
echo "<font color='red'>fail: unable to establish connection</font>\n";
} else {
if(!ssh2_auth_password($con, $user, $pass)) {
echo "fail: unable to authenticate";
} else {
echo "Sucessful";
if (!($stream = ssh2_exec($con, "/home/boza/serv.sh" ))) {
echo "fail: unable to execute command";
} else {
stream_set_blocking($stream, true);
$data = "";
while ($buf = fread($stream,4096)) {
$data .= $buf;
}
fclose($stream);
}
}
}
该脚本运行良好,但我希望对其进行一些更改。 1.我想在其中添加md5哈希,以使其更安全 2.我希望在访问serv.php时不要执行脚本,而是按一个按钮进行ajax调用。 3.我希望有用户反馈,比如“成功”或“失败”...就像我现在做的那样,使用现场的ajax或没有刷新网站的东西。
我用google搜索过,我试图将md5('xxxx')放入脚本中,我遇到了一些奇怪的错误,我确信自己做错了。
有人可以帮我解决这个案子吗?
答案 0 :(得分:0)
MD5
是一种单向哈希,它无法保证您的连接安全。它也很弱,没有以前那么强大。我不建议将其用于任何安全级别
你应该看看authenticating with public key authentication
看看这个
class NiceSSH {
// SSH Host
private $ssh_host = 'myserver.example.com';
// SSH Port
private $ssh_port = 22;
// SSH Server Fingerprint
private $ssh_server_fp = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
// SSH Username
private $ssh_auth_user = 'username';
// SSH Public Key File
private $ssh_auth_pub = '/home/username/.ssh/id_rsa.pub';
// SSH Private Key File
private $ssh_auth_priv = '/home/username/.ssh/id_rsa';
// SSH Private Key Passphrase (null == no passphrase)
private $ssh_auth_pass;
// SSH Connection
private $connection;
public function connect() {
if (!($this->connection = ssh2_connect($this->ssh_host, $this->ssh_port))) {
throw new Exception('Cannot connect to server');
}
$fingerprint = ssh2_fingerprint($this->connection, SSH2_FINGERPRINT_MD5 | SSH2_FINGERPRINT_HEX);
if (strcmp($this->ssh_server_fp, $fingerprint) !== 0) {
throw new Exception('Unable to verify server identity!');
}
if (!ssh2_auth_pubkey_file($this->connection, $this->ssh_auth_user, $this->ssh_auth_pub, $this->ssh_auth_priv, $this->ssh_auth_pass)) {
throw new Exception('Autentication rejected by server');
}
}
public function exec($cmd) {
if (!($stream = ssh2_exec($this->connection, $cmd))) {
throw new Exception('SSH command failed');
}
stream_set_blocking($stream, true);
$data = "";
while ($buf = fread($stream, 4096)) {
$data .= $buf;
}
fclose($stream);
return $data;
}
public function disconnect() {
$this->exec('echo "EXITING" && exit;');
$this->connection = null;
}
public function __destruct() {
$this->disconnect();
}
}
答案 1 :(得分:0)
只有在按下按钮时才能使用表单启动脚本:
$ip = "ip";
$user = "user";
$pass = "password";
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
echo '<form action="#" method="POST">';
echo '<input type="submit" name="launch" value="1" />'
echo '</form>';
if($_POST['launch']==1){
if(!($con = ssh2_connect($ip, 22))){
echo "<font color='red'>fail: unable to establish connection</font>\n";
} else {
if(!ssh2_auth_password($con, $user, $pass)) {
echo "fail: unable to authenticate";
} else {
echo "Sucessful";
if (!($stream = ssh2_exec($con, "/home/boza/serv.sh" ))) {
echo "fail: unable to execute command";
} else {
stream_set_blocking($stream, true);
$data = "";
while ($buf = fread($stream,4096)) {
$data .= $buf;
}
fclose($stream);
}
}
}
}
并且对于密码,您可以使用“baba”类,或者如果它只是源读取的问题,您可以使用简单的可逆加密函数,如XOR加密,请注意,它只是使密码不能直接从源中删除,而是这不是一个完美的证券化
示例:
function XORin($key='asimpletext', $text='pwd'){
for($i=0;$i<strlen($text);$i++)
{
for($j=0;$j<strlen($key);$j++,$i++)
{
$outText .= $text{$i} ^ $key{$j};
}
}
return $outText;
}
function XORout($key='asimpletext', $text='pwd'){(){
for($i=0;$i<strlen($text);$i++)
{
for($j=0;$j<strlen($key);$j++,$i++)
{
$outText .= $key{$j} ^ $text{$i};
}
}
return $outText;
}