Không thể ssh là người dùng ít tty


10

Tôi đang cố gắng chạy một lệnh bằng cách gọi ssh (sử dụng xác thực khóa) từ người dùng không có tty (người dùng máy chủ apache của tôi đang chạy) và tiếp tục nhận được kết quả sau:

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.

Cờ -t được đặt khi gọi ssh. Khóa này không có cụm mật khẩu, điều này sẽ ngăn chặn sự cần thiết của bất kỳ đầu vào nào, nhưng dường như nó không có. Làm cách nào tôi có thể ngăn ssh cố gắng mở / dev / tty?

Chỉnh sửa: Thẻ mã không hoạt động?

Edit2: Lệnh ssh đầy đủ:

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

Tôi đã thay thế tên người dùng của mình bằng "tên người dùng".

Edit3: Tôi đã thử ssh-ing bằng cách sử dụng cùng khóa với root và nhận được kết quả này:

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).

Nó nhắc tôi một cụm mật khẩu mặc dù nó không cần. Hơn nữa, tôi có thể sử dụng khóa để ssh trong việc sử dụng PuTTY trên máy tính windows và nó không nhắc tôi sử dụng cụm mật khẩu.

Edit4: Tôi đã thêm máy chủ vào apache người dùng biết_hosts và bây giờ tôi nhận được điều này:

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).`

Ngoài ra, đây là nội dung của know_hosts:

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

Tại sao nó nói ecdsa? Đó là một chìa khóa rsa.

Chỉnh sửa5: Đã giải quyết. Vấn đề là cặp khóa được tạo bởi PuTTY, ghi khóa riêng ở định dạng không tương thích với OpenSSH. Giải pháp được cung cấp bởi cjc trong một bình luận.


Re: thẻ mã. Không, hoặc là mã vòm với dấu tick ngược hoặc đặt 4 khoảng trắng ở phía trước dòng.
cjc

Lệnh ssh đầy đủ là gì?
cjc

Tại sao bạn đi qua a -t?
Zoredache

@Zoredache Nghĩ rằng nó sẽ giúp. Một số trang web đề nghị nó.
Surma

1
@Surma, ecdsa đang đề cập đến khóa của máy chủ, không phải khóa trên máy khách.
amcnabb

Câu trả lời:


11

Vấn đề thực sự không có vẻ là nó đang cố đọc cụm mật khẩu - đó chỉ là một cảnh báo. Thay vào đó, nó đang cố gắng xác minh khóa máy chủ nhưng không thành công. Nếu bạn thực sự muốn nó không bao giờ hỏi về khóa máy chủ, hãy xem xét thêm các tùy chọn sau vào dòng lệnh ssh:

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

Lưu ý rằng có thể có ý nghĩa bảo mật, vì vậy hãy chắc chắn đọc về các tùy chọn này trong ssh_configtrang man.

EDIT: Đưa ra các thông báo lỗi được cập nhật của bạn, có vẻ như bạn có tệp nhận dạng bị hỏng (hoặc như cjc đã chỉ ra, nó có thể ở định dạng sai). Hãy thử tạo một cái mới theo cách thủ công với ssh-keygen và thêm nó vào ủy quyền của máy chủ.


Bạn có vẻ đúng, tôi chỉ cố gắng sử dụng khóa làm root. Kết quả trong OP.
Surma

1
Trên thực tế, thay vì sử dụng StricthostKeyChecking = no, bạn cũng có thể lấy khóa chung của máy chủ và dán nó vào tệp .ssh / know_host của người dùng. Hoặc đặt nó trong tệp know_hosts trên toàn hệ thống.
cjc

@cjc, tôi đồng ý rằng đó thường là giải pháp tốt hơn.
amcnabb

@cjc Tôi đã sao chép các know_host từ root (người đã thêm máy chủ vào các máy chủ đã biết) và thiết lập quyền chính xác. Tôi nhận được đầu ra khác nhau bây giờ, kiểm tra OP.
Surma

1
@amcnabb Bạn đã đề cập rằng bạn đã sử dụng khóa trong PuTTY. Bạn đã chuyển đổi khóa thành OpenSSH?
cjc

0

Không quan tâm, những gì được đặt là môi trường trong /etc/passwd- thiếu /bin/bashcó lẽ sẽ là vấn đề của bạn.


/ bin / false Có lẽ tôi nên đề cập rằng cái này đang được chạy bởi php, nó dường như sinh ra một shell khi bạn gọi shell_exec () (đây là thứ tôi đang sử dụng để chạy cái này).
Surma

1
Hiểu. Vậy thì trong trường hợp đó, tại sao bạn không chỉ sử dụng pecl.php.net/package/ssh2 - chứ không phải là hack vớishell_exec()
Ben Lessani - Sonassi

Ý tưởng hay đấy.
Surma

Chắc chắn là, bạn nên thực sự giải thích trong câu hỏi của bạn rằng bạn đang cố gắng thực hiện điều này thông qua PHP - vì câu trả lời tôi đã cung cấp chính xác hơn để giải quyết câu hỏi của bạn.
Ben Lessani - Sonassi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.