Impossible d'utiliser ssh en tant qu'utilisateur sans terminal

10

J'essaie d'exécuter une seule commande en invoquant ssh (à l'aide de l'authentification par clé) à partir d'un utilisateur qui n'a pas de tty (l'utilisateur sur lequel mon serveur apache s'exécute) et continue d'obtenir le résultat suivant:

OpenSSH_5.9p1, OpenSSL 1.0.0g 18 Jan 2012
Pseudo-terminal will not be allocated because stdin is not a terminal.
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to localhost [::1] port 54367.
debug1: Connection established.
debug1: identity file nonpublic/id_rsa type 1
debug1: identity file nonpublic/id_rsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9
debug1: match: OpenSSH_5.9 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.9
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA e3:c2:37:8e:8b:d4:77:63:7f:d2:ba:12:e5:e9:d1:9a
debug1: checking without port identifier
debug1: read_passphrase: can't open /dev/tty: No such device or address
Host key verification failed.

L'indicateur -t est défini lors de l'appel de ssh. La clé n'a pas de phrase secrète, ce qui devrait supprimer le besoin de toute entrée, mais apparemment ce n'est pas le cas. Comment puis-je empêcher ssh d'essayer d'ouvrir / dev / tty?

Modifier: les balises de code ne fonctionnent pas?

Edit2: Commande ssh complète:

ssh -i nonpublic/id_rsa -l username -p 54367 -t -v username@localhost /home/username/minecraftserver/Scripts/start 2>&1

J'ai remplacé mon nom d'utilisateur par "nom d'utilisateur".

Edit3: J'ai essayé ssh-ing en utilisant la même clé que root et j'ai obtenu ce résultat:

OpenSSH_5.9p1, OpenSSL 1.0.0g 18 Jan 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to localhost [::1] port 54367.
debug1: Connection established.
debug1: permanently_set_uid: 0/0
debug1: identity file /srv/http/nonpublic/id_rsa type 1
debug1: identity file /srv/http/nonpublic/id_rsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9
debug1: match: OpenSSH_5.9 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.9
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA e3:c2:37:8e:8b:d4:77:63:7f:d2:ba:12:e5:e9:d1:9a
debug1: checking without port identifier
The authenticity of host '[localhost]:54367 ([::1]:54367)' can't be established.
ECDSA key fingerprint is e3:c2:37:8e:8b:d4:77:63:7f:d2:ba:12:e5:e9:d1:9a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:54367' (ECDSA) to the list of known hosts.
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /srv/http/nonpublic/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: key_parse_private_pem: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
Enter passphrase for key '/srv/http/nonpublic/id_rsa':
debug1: No more authentication methods to try.
Permission denied (publickey).

Il m'invite à saisir un mot de passe, même s'il ne devrait pas en avoir besoin. De plus, je peux utiliser la clé pour ssh en utilisant PuTTY sur une machine Windows très bien et cela ne me demande pas de phrase secrète.

Edit4: J'ai ajouté le serveur aux utilisateurs connus d'apache et maintenant j'obtiens ceci:

OpenSSH_5.9p1, OpenSSL 1.0.0g 18 Jan 2012
Pseudo-terminal will not be allocated because stdin is not a terminal.
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to localhost [::1] port 54367.
debug1: Connection established.
debug1: identity file nonpublic/id_rsa type 1
debug1: identity file nonpublic/id_rsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9
debug1: match: OpenSSH_5.9 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.9
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA e3:c2:37:8e:8b:d4:77:63:7f:d2:ba:12:e5:e9:d1:9a
debug1: Host '[localhost]:54367' is known and matches the ECDSA host key.
debug1: Found key in /srv/http/.ssh/known_hosts:1
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: nonpublic/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: key_parse_private_pem: PEM_read_PrivateKey failed
debug1: read PEM private key done: type
debug1: read_passphrase: can't open /dev/tty: No such device or address
debug1: No more authentication methods to try.
Permission denied (publickey).`

En outre, voici le contenu des hôtes connus:

[localhost]:54367 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBILr7jLp5CeYfyrCroaDjkaWgDHXRrQD+G8Fz/CQOY1PcluUFTkrN447bXmC6R27LOClE+RPaveYb4MOlObpGGE=

Pourquoi dit-on ecdsa? C'est une clé rsa.

Edit5: Résolu. Le problème était que la paire de clés a été générée par PuTTY, qui écrit la clé privée dans un format qui n'est pas compatible avec OpenSSH. Solution fournie par cjc dans un commentaire.

Surma
la source
Re: balise de code. Non, soit entourez le code avec une coche arrière, soit mettez 4 espaces devant la ligne.
cjc
Quelle est la commande ssh complète?
cjc
Pourquoi passez-vous un -t?
Zoredache
@Zoredache Pensait que cela aiderait. Certains sites l'ont suggéré.
Surma
1
@Surma, ecdsa fait référence à la clé du serveur, pas à la clé du client.
amcnabb

Réponses:

11

Le problème ne semble pas réellement être qu'il essaie de lire la phrase secrète - c'est juste un avertissement. Il essaie plutôt de faire la vérification de la clé d'hôte mais échoue. Si vous voulez vraiment qu'il ne pose jamais de questions sur les clés d'hôte, pensez à ajouter les options suivantes à la ligne de commande ssh:

-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null

Notez qu'il peut y avoir des implications pour la sécurité, alors assurez-vous de lire ces options dans la ssh_configpage de manuel.

EDIT: Compte tenu de vos messages d'erreur mis à jour, il semble que vous ayez un fichier d'identité corrompu (ou, comme l'a souligné cjc, il peut être dans le mauvais format). Essayez d'en créer un nouveau manuellement avec ssh-keygen et ajoutez-le aux clés autorisées du serveur.

amcnabb
la source
Vous semblez avoir raison, j'ai juste essayé d'utiliser la clé en tant que root. Résultat en OP.
Surma
1
En fait, au lieu d'utiliser StrictHostKeyChecking = no, vous pouvez également obtenir la clé publique du serveur et la coller dans le fichier .ssh / known_host de l'utilisateur. Ou mettez-le dans le fichier connu_hosts à l'échelle du système.
cjc
@cjc, je suis d'accord que c'est généralement la meilleure solution.
amcnabb
@cjc J'ai copié les hôtes connus depuis la racine (qui a ajouté le serveur aux hôtes connus) et j'ai configuré les autorisations appropriées. J'obtiens une sortie différente maintenant, vérifiez l'OP.
Surma
1
@amcnabb Vous avez mentionné que vous avez utilisé la clé dans PuTTY. Avez-vous converti la clé en OpenSSH?
cjc
0

Par intérêt, ce qui est défini comme l'environnement /etc/passwd- le manque de /bin/bashsera probablement votre problème.

Ben Lessani - Sonassi
la source
/ bin / false J'aurais probablement dû mentionner que cela est exécuté par php, qui génère apparemment un shell lorsque vous invoquez shell_exec () (qui est ce que j'utilise pour l'exécuter).
Surma
1
Compris. Dans ce cas, pourquoi n'utilisez-vous pas seulement pecl.php.net/package/ssh2 - plutôt que de pirater avecshell_exec()
Ben Lessani - Sonassi
C'est une bonne idée.
Surma
Bien sûr, vous devez vraiment expliquer dans votre question que vous essayez de le faire via PHP - car la réponse que j'ai fournie est plus précise pour résoudre votre question.
Ben Lessani - Sonassi