Joob 1 Denunciar post Postado Março 20, 2015 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
Beraldo 864 Denunciar post Postado Março 20, 2015 Não entendi. Qual é o problema exatamente? Dá algum erro? Explique melhor Compartilhar este post Link para o post Compartilhar em outros sites
Joob 1 Denunciar post Postado Março 20, 2015 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
Beraldo 864 Denunciar post Postado Março 20, 2015 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
Joob 1 Denunciar post Postado Março 21, 2015 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
Beraldo 864 Denunciar post Postado Março 21, 2015 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
Joob 1 Denunciar post Postado Março 21, 2015 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
Beraldo 864 Denunciar post Postado Março 21, 2015 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
Joob 1 Denunciar post Postado Março 21, 2015 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
Beraldo 864 Denunciar post Postado Março 21, 2015 o var_dump exibe a saída na tela. Se estiver testando no navegador, vai aparecer no próprio navegador. Se testar no terminal, será exibido na própria saída do comando Compartilhar este post Link para o post Compartilhar em outros sites
Joob 1 Denunciar post Postado Março 21, 2015 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
Beraldo 864 Denunciar post Postado Março 22, 2015 é 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
Joob 1 Denunciar post Postado Março 22, 2015 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
Beraldo 864 Denunciar post Postado Março 22, 2015 aparentemente, $password está vindo vazio. Dê um var_dump em $password e veja qual é o valor dela. Veja se $_POST['password'] está, de fato, vindo com valor Compartilhar este post Link para o post Compartilhar em outros sites
Joob 1 Denunciar post Postado Março 22, 2015 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
Beraldo 864 Denunciar post Postado Março 22, 2015 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
Joob 1 Denunciar post Postado Março 23, 2015 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
Beraldo 864 Denunciar post Postado Março 23, 2015 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
Joob 1 Denunciar post Postado Março 23, 2015 Exactamente ! Agora terei de ver como irei buscar o valor original.. Compartilhar este post Link para o post Compartilhar em outros sites
Joob 1 Denunciar post Postado Março 24, 2015 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