[Fehler] Pseudo-terminal will not be allocated because stdin is not a terminal

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Fehler] Pseudo-terminal will not be allocated because stdin is not a terminal

    Hallo zusammen,

    ich habe hier ein komisches Problem.
    Ich versuche per PHP shell_exec() mich über ssh auf einen anderen Server zu verbinden. Das mache ich mittels eines rsa-keys damit ich die passwortabfrage umgehe. Den Linux Befehl habe ioch mir nun zusammengebaut und auch wenn ich den Befehl in der Shell ausführe bekomme ich ein directen connect nun habe ich mir mein Script gebaut:

    PHP-Code:
    <?php

    $command 
    "ssh -T -l myuser -i ~/.ssh/userkey.key myuser@mein_rechner.de";
    shell_exec("$command");
    shell_exec("exit");

    ?>
    Nun habe ich in die Logs des Apache geschaut und bekomme folgende Meldung :

    Pseudo-terminal will not be allocated because stdin is not a terminal.
    Host key verification failed.
    Warning: Identity file ~/.ssh/userkey.key does not exist.


    ich habe mein Freund google schon befragt aber nicht wirklich schlau geworden.

    Ich habe nur in Erfahrung gebracht das ich das -T als option über gebe um
    -T Do not allocate a tty.
    die eine Meldung zu killen

    mit diesem Parameter sieht meine Meldung nur noch so aus :

    Warning: Identity file ~/.ssh/userkey.key does not exist.
    Host key verification failed.

    Kann einer damit was anfangen ?? Ich nämlich nicht ...
    Ein blue screen ist nicht immer was schlimmes... es hängt nur davon ab wo er zu sehen ist !
    www.d-creationz.de

  • #2
    ganz einfach: "~" ist'ne abk. für dein home-verzeichnis,
    und da der apache sicherlich nicht unter deiner id läuft, sucht er halt woanders.
    eval(str_pad(aa|db,4,slarti^~äü_i_)." \"áú¾ïùû䶳Ðäýï©üèíþç£þé\"^~\"no bugs, only features\";");

    Kommentar


    • #3
      Original geschrieben von slarti
      ganz einfach: "~" ist'ne abk. für dein home-verzeichnis,
      und da der apache sicherlich nicht unter deiner id läuft, sucht er halt woanders.
      Das mit der ~ ist mir klar und der apache hat sein homedir in /etc/httpd/
      und dort liegt auch das verzeichniss mit dem key.
      Wenn ich mit exec oder shell_exec was ausführe bin ich immer httpd das kann man nicht ändern. ich habe es auch mit absoluten Pfad angaben versucht vom root aus /etc/httpd/.ssh/userkey.key

      den connect mache ich ja als ein anderer user (-l myuser) für den auch das Zertifikat erstellt wurde. Oder MUSS ich den connect als httpd machen ?
      Hierbei ist nur das Problem das auf dem anderen Server auch ein Apache läuft.
      Ein blue screen ist nicht immer was schlimmes... es hängt nur davon ab wo er zu sehen ist !
      www.d-creationz.de

      Kommentar


      • #4
        Wie isses mit

        "ssh -vT -l myuser -i ".$mein_pfad."/.ssh/userkey.key mein_rechner.de"
        Konrad

        In a world without walls and fences, who needs Windows and Gates ?
        (Sun Microsystems)

        Kommentar


        • #5
          Oder MUSS ich den connect als httpd machen ?
          ...nö, mußt nich.
          Warning: Identity file ~/.ssh/userkey.key does not exist.
          ...aber da steht, das er dat file nicht findet... also muß es am pfad liegen

          mach doch einfach mal 'su httpd' und versuch mal, dich so zu connecten...
          kann sein, das er den ersmal bei ssh.hosts eintragen muß...
          eval(str_pad(aa|db,4,slarti^~äü_i_)." \"áú¾ïùû䶳Ðäýï©üèíþç£þé\"^~\"no bugs, only features\";");

          Kommentar


          • #6
            Original geschrieben von Konrad
            Wie isses mit

            "ssh -vT -l myuser -i ".$mein_pfad."/.ssh/userkey.key mein_rechner.de"
            Der -v Parameter ist ein guter Tip. Wer man ssh lesen kann ist klar im Vorteil.

            Folgende Ausgabe in den Logs...

            debug1: Reading configuration data /etc/ssh/ssh_config
            debug1: Rhosts Authentication disabled, originating port will not be trusted.
            debug1: ssh_connect: needpriv 0
            debug1: Connecting to meinrechner [***.***.***.***] port 22.
            debug1: Connection established.
            debug1: identity file /etc/httpd/.ssh/identity type -1
            debug1: identity file /etc/httpd/.ssh/id_rsa type -1
            debug1: identity file /etc/httpd/.ssh/id_dsa type -1
            debug1: Remote protocol version 1.99, remote software version OpenSSH_3.4p1
            debug1: match: OpenSSH_3.4p1 pat OpenSSH*
            Enabling compatibility mode for protocol 2.0
            debug1: Local version string SSH-2.0-OpenSSH_3.4p1
            debug1: SSH2_MSG_KEXINIT sent
            debug1: SSH2_MSG_KEXINIT received
            debug1: kex: server->client aes128-cbc hmac-md5 none
            debug1: kex: client->server aes128-cbc hmac-md5 none
            debug1: SSH2_MSG_KEX_DH_GEX_REQUEST sent
            debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
            debug1: dh_gen_key: priv key bits set: 122/256
            debug1: bits set: 1584/3191
            debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
            debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
            Host key verification failed.
            debug1: Calling cleanup 0x80660a0(0x0)

            Soweit ich das erkenne läuft es gut bis zu der stelle debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY da er dann failed oder ?
            Ein blue screen ist nicht immer was schlimmes... es hängt nur davon ab wo er zu sehen ist !
            www.d-creationz.de

            Kommentar


            • #7
              Nö, das sieht auch bei ner sauberen Verbindung so aus.

              Dein Problem ist Host key verification failed

              Hab hier mal was gefunden, weiss aber net, ob das hilft oder ggf. unsicher ist:
              Host key verification failed.

              And access will be denied. At this point, you have two options:

              1) Manually edit the file known_hosts in your .ssh directory to remove the offending line. With this option, you will be able to connect the first time you try, but after that, you will have the same problem. (Because each subsquent login will have different host keys).

              2) Create a file called "config" in your .ssh directory and put the following line:

              StrictHostKeyChecking no

              This will tell your ssh client to not check the validity of the host keys of the machines you are connecting with. This is only recommended for users that KNOW they are going to have this problem.
              http://cc.jlab.org/docs/services/uni...grade-faq.html
              Konrad

              In a world without walls and fences, who needs Windows and Gates ?
              (Sun Microsystems)

              Kommentar


              • #8
                Jo danke schonmal,

                ich versuche es mal. Allerding muss das bei mir sicher sein. ich habe mir auch mal nochmehr Parameter mit +vvv ausgeben lassen. mal sehn ob ich es irgendwie hin bekomme daraus schlau zu werden.
                Das mit dem config file hatte ich auch mal gelesen aber das mit der einstellung habe ich allerdings nicht gefunden.
                Mal ausprobieren.
                Die Lösung 2 denke ich würde bestimmt klappen allerdings inakzeptabel wegen secure aspekten.
                Ein blue screen ist nicht immer was schlimmes... es hängt nur davon ab wo er zu sehen ist !
                www.d-creationz.de

                Kommentar


                • #9
                  Hallo nochmal irgenweie funzt es noch immer nicht.
                  Ich habe nun mal alle Rechte auf 600 gesetzt. Da SSH sich weigert eine Connection aufzubauen wenn das .ssh-Verzeichniss oder das home Verzeichniss des Users Schreibrechte der Group haben.

                  PHP-Code:
                  $command "ssh -vTn -l myuser -i /etc/httpd/.ssh/mykey.key myuser@meinrechner";
                  exec($command$encrypted$errorcode);
                  shell_exec("exit");


                  echo 
                  "$command$encrypted$errorcode<br>";
                  $anz count($encrypted);
                  for (
                  $i=0;$i<$anz;$i++)
                  {
                  echo 
                  "$encrypted[$i]<br>";

                  habs mal mit exec probiert und mir den errorcode ausgeben lassen.
                  hier taucht 255 auf. Was bedeutet das ?
                  Ein blue screen ist nicht immer was schlimmes... es hängt nur davon ab wo er zu sehen ist !
                  www.d-creationz.de

                  Kommentar


                  • #10
                    ok der connect klappt jetzt.... endlich.
                    Nun eine kleine Frage. wie führe ich mehrere Befehle hintereinander aus ???

                    Ich dachte mich | was er auch prinzipel macht das problem auf der Falschen maschine.

                    PHP-Code:
                    $command "ssh  -tv -l user-i /home/sites/site1/users/user/.ssh/userkey.key user@rechner | touch /home/sites/home/users/user/test"
                    dann legt er mir auf meiner maschine ein file mit dem namen test an nicht aber auf der ich mich mit ssh verbunden habe.
                    hat einer ne idee ?
                    Ein blue screen ist nicht immer was schlimmes... es hängt nur davon ab wo er zu sehen ist !
                    www.d-creationz.de

                    Kommentar


                    • #11
                      Ok für alle die es interessiert was ja anscheinend nicht viele sind. Ich gebe zu das ist ein sehr spezielles Thema, vielleicht deshalb so wenig Feedback.

                      Howtodo:

                      Hinweise:
                      Php Skripte werden auf der Maschine immer als User HTTPD ausgefüht. Dem entsperchend müssen die Ordner für den User HTTPD zugänglich sein.

                      Step1:
                      Erstelle einen User auf beiden Maschinen ink. Homeverzeichniss z.B. reaven.
                      Nun melde dich als reaven an und erstelle ein Zertifikat

                      Code:
                      ssh-keygen -t rsa
                      Gebe einen Keynamen an und nach wunsch ein Phrases.
                      Nun hast du den private und den public key. schiebe diesen in .ssh

                      Gehe auf die Maschine auf die du dich connecten willst in das homeverzeichnis reaven

                      Code:
                      cd ~reaven
                      erstelle hier das verzeichniss .ssh (1) und wechsel(2) in das Verzeichniss und erstelle weitere Dateien (3):

                      Code:
                      mkdir .ssh   (1)
                      cd .ssh   (2)
                      touch authorized_keys (3)
                      touch known_hosts (3)
                      touch config                (3)    //optional
                      Gehe auf die Maschine 1 mache ein

                      Code:
                      cat Keynamen.pub
                      kopiere die Ausgabe wechsel auf machine 2 und mache ein :

                      Code:
                      vi ~reaven/.ssh/authorized_keys
                      und paste den code des schlüssels.

                      Verbinde dich von Maschine 1 per sftp oder wie auch immer auf die Maschine 2 und schiebe den Keynamen.pub in das .ssh Verzeichniss auf M2.

                      So weit zur Datei anlage. Nun die Rechte vergeben...

                      Maschine 1 ~reaven:
                      Code:
                      chmod 700 -R .ssh
                      cd .ssh
                      chmod 600 Keynamen
                      chmod 644 Keynamen.pub
                      chmod 644 known_hosts
                      cd ..
                      chown httpd -R .ssh
                      Maschine 2 ~reaven:

                      Code:
                      chmod 700 -R .ssh
                      cd .ssh
                      chmod 777 known_hosts 
                      chmod 644 authorized_keys
                      chmod 644 Keynamen.pub
                      chmod 600 config   /wenn vorhanden
                      cd ..
                      chown reaven -R .ssh
                      cd .ssh
                      chown root known_hosts
                      Zu beachten ist noch das die homeverzeichniss des users keine Schreibrechte der Gruppe haben.

                      Soweit die Bedingungen das es funktioniert.
                      nun das eigentliche Skript:

                      PHP-Code:
                      // SSH Connection 
                      $command "ssh  -tv -l reaven -i /home/sites/users/reaven/.ssh/Keynamen.key [email]reaven@maschine2.de[/email]  \"ls ;  touch /home/sites/users/reaven/testfile\"";

                      // SFTP Connecttion
                      $command2 "sftp -oIdentityFile=/home/sites/users/reaven/.ssh/Keynamen.key -b /home/sites/web/batch.ftp  [email]reaven@maschine2.de[/email]";

                      exec($command$encrypted$errorcode);

                      echo 
                      "Command1: $command$encrypted$errorcode<br>";

                      $anz count($encrypted);
                      for (
                      $i=0;$i<$anz;$i++)
                      {
                      echo 
                      "$encrypted[$i]<br>";
                      }
                      //echo "Command2: $command, $encrypted, $errorcode<br>";
                      exec("exit"); 
                      So das wars. Du hast nun auf der Maschine 2 ein Touch ausgeführt.
                      Viel Spass beim einrichten
                      Ein blue screen ist nicht immer was schlimmes... es hängt nur davon ab wo er zu sehen ist !
                      www.d-creationz.de

                      Kommentar

                      Lädt...
                      X