Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Joob

call $password .. ssh + chpasswd

Recommended Posts

Boas,

 

Estou a usar SSH em php + o chpasswd.. e quero fazer com que quando eu utilizo este comando

echo $ssh->exec("sudo sh -c 'echo $user:$password | chpasswd'");

que adicione a password da base dados (quando o utilizador se regista).. Ou seja, coloquei o seguinte para chamar a função...

$password = mysql_real_escape_string($_POST['password']);$salt = hash('sha512', $username); //Salt$password = hash('sha512', $salt.$password); $password = $_SESSION['password'];mysql_query("SELECT * FROM `client` WHERE `password`= '$password'");

não está a bater certo ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

A questão é a seguinte..

Estou a usar este comando.. (desta forma, a password está escrita manualmente, código (test))

echo $ssh->exec("sudo sh -c 'echo $user:test | chpasswd'");

E quando executo o script, é dada a permissão, ou seja o "$user" consegue entrar no ssh, etc.. com a password "test"

 

Mas quero que a password seja adicionada com "$password", a password com que o utilizador se regista.

Ou seja, imaginemos que o utilizador se registou com user "user1" e a passord "userpass"..

 

Preciso que o "ssh->exec", faça a colocação da password que ele se registou..

echo $ssh->exec("sudo sh -c 'echo $user:$password | chpasswd'");

Ex:

 

$user = user1 (o user está ok, bate certo..)

$password = userpass (password que o user registou na altura do registo)

 

Tenho só o problema da password que não faz a chamada da password que o user se registou..

 

Não sei se me fiz entender..

 

 

Abraço,

Joob

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você quer usar o mesmo valor que está na variável $password, criada nesta linha?

 

$password = mysql_real_escape_string($_POST['password']);

 

Aparentemente, seu código está correto. O problema é que a o valor da variável $password é alterado nestas duas linhas:

 

$password = hash('sha512', $salt.$password);
$password = $_SESSION['password'];

 

Ou seja, quando você usar $password no SSH ela terá o hash, não a senha original.

 

Então troque o nome da variável (para $password_hash, por exemplo), para manter o valor original em $password, para usar no SSH.

 

Veja se isso resolve

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda não consegui, estive a tentar dessa forma mas não resultou.. tentei outras e nada.. ainda não resultou.. :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mostre como fez.

 

Sugeri fazer algo assim:

 

$password = mysql_real_escape_string($_POST['password']);
$salt = hash('sha512', $username); //Salt
$password_hash = hash('sha512', $salt.$password);
$password_hash = $_SESSION['password'];
mysql_query("SELECT * FROM `client` WHERE `password`= '$password_hash'");
 
// ... 
 
echo $ssh->exec("sudo sh -c 'echo $user:$password | chpasswd'");

 

Também pode estar havendo algum problema por causa das aspas.

Tente trocar isto:

 

echo $ssh->exec("sudo sh -c 'echo $user:$password | chpasswd'");

 

por isto:

 

$cmd = sprintf( "sudo sh -c 'echo %s:%s | chpasswd'", $user, $password );
var_dump( $cmd ); // vai mostrar o comando que será executado. Veja se é o que esperava
echo $ssh->exec( $cmd );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por acaso tinha feito desta forma

$password = mysql_real_escape_string($_POST['password']);
$salt = hash('sha512', $username); //Salt
$password_hash = hash('sha512', $salt.$password);
$password_hash = $_SESSION['password'];
mysql_query("SELECT * FROM `client` WHERE `password`= '$password_hash'");
 
// ... 
 
echo $ssh->exec("sudo sh -c 'echo $user:$password_hash | chpasswd'");

só no ssh é que tinha colocado "$password_hash" .. em vez de "$password".. mas ficou igual..

 

Testei das suas duas formas, e incrivelmente não resultou.. O acesso ao FTP ainda é denied .. já andei a ver outras maneiras, de como tenho na parte do registo.. mas nada bbrrrr...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentou executar desta forma?

 

 

$cmd = sprintf( "sudo sh -c 'echo %s:%s | chpasswd'", $user, $password );
var_dump( $cmd ); // vai mostrar o comando que será executado. Veja se é o que esperava
echo $ssh->exec( $cmd );

 

Qual foi a saída do var_dump?

Se o comando for exibido corretamente, seu problema está com o shell, não com o PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exacto, executei dessa mesma forma..

Onde é que ele me mostra o comando ? é que quando executo o script, ele não me mostra o comando.. nem nos log's do apache2..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não consigo mesmo ver.. ele não me mostra devido a um problema.. o código onde tenho isto.. digamos que é o link do botão, ou seja, quando clico no botão "BOTÃO TEST", é quando ele faz o processamento (por trás) em que não dá para ver, e por fim, assim que termina o processo, volta para a página inicial..

 

Não sei se me fiz entender.. é por isso que não consigo ver o comando..

Compartilhar este post


Link para o post
Compartilhar em outros sites

é via Ajax? Você pode dar um console.log() pelo Javascript e ver o resultado no Firebug

 

Também pode acessar a URL diretamente pelo navegador. Acesse diretamente a URL usada no ajax

 

Também pode, em vez de exibir na tela, escrever em um arquivo, com file_put_contents.

 

Enfim, há várias opções.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já consegui fazer com que ele me desse o erro/afirmação..

Na verdade, não é bem ajax/javascript.. o meu "form" está a fazer a chamada do "test.php", em que nesse php (test.php), é onde está o script SSH.. (onde faz o processo todo, da criação etc..)..

 

Ele no final do processo indica-me o seguinte:

openwriteclosestring(36) "sudo sh -c 'echo test: | chpasswd'"

Será problema de permissão de escrita ?

 

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade vem com valor 0... - string(0) ""

 

Coloquei assim agora..

$password = mysql_real_escape_string($_POST['password']=="$password_hash");

E o resultado já foi "1" .. mas deu do tipo: "test:1" .. e a password não é "1".. :'D


Ele desta forma funciona.. mas assume a password como "1" ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

não, dessa forma você atribui o retorno da comparação das duas strings, que é 0/false (strings diferentes) ou 1/true, string iguais

 

Se $_POST['password'] está vindo vazio, é porque o campo "password" do form está vazio

Compartilhar este post


Link para o post
Compartilhar em outros sites

hmm está certo..

mas é estranho é quando a pessoa se regista.. ele consegue fazer login com a password que se regista..

 

Secalhar tenho que fazer chamar a password por exemplo no login ou no registo..


Porquê que basta só eu ter isto assim:

$password = mysql_real_escape_string($_POST['password']);
$salt = hash('sha512', $username); //Salt
$password = hash('sha512', $salt.$password);

E ele assume esta password toda.. parece que fica codificada...

"sudo sh -c 'echo tester:8fb29448faee18b656030e8f5a8b9e9a695900f36a3b7d7ebb0d9d51e06c8569d81a55e39b481cf50546d697e7bde1715aa6badede8ddc801c739777be77f166 | chpasswd'"

E o login funciona com esse mesma password (gigante)

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ele assume esta password toda.. parece que fica codificada...

Sim, fica pois você sobrescreveu o valor de $password, em vez de criar $password_hash, como tinha feito antes.

Note que, se $_POST['password'] estiver vazio, esse hash é o hash apenas do salt, que é o username

 

 

E o login funciona com esse mesma password (gigante)

Então o comando chpasswd está funcionando. Seu problema é com a variável $password apenas. Você precisa usar a senha original nesse comando, sem aplicar o hash nem o salt. Por isso precisa preservar o valo original de $password

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exactamente !

Agora terei de ver como irei buscar o valor original..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou a tentar descriptar a password.. porque ela no fundo fica encriptada..

Testei deste jeito..

$password = hash('sha512', $password);
mysql_query("SELECT aes_decrypt(password) FROM client WHERE password = '$password'");

mas não está a resultar.. não descripta..

 

Tentei também usar esta função AES_DECRYPT ...

function AES_DECRYPT($value, $secret)
{
    return rtrim(
        mcrypt_decrypt(
            MCRYPT_RIJNDAEL_256,
            $secret,
            base64_decode($value),
            MCRYPT_MODE_ECB,
            mcrypt_create_iv(
                mcrypt_get_iv_size(
                    MCRYPT_RIJNDAEL_256,
                    MCRYPT_MODE_ECB
                ),
                MCRYPT_RAND
            )
        ), "\0"
    );
}

É que quero descriptar na função do ssh exec.. aqui neste $cmd (echo)...

$cmd = sprintf( "sudo sh -c 'echo %s:%s | chpasswd'", $user, $password );

Como será que poderei fazer..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.