ไม่สามารถ ssh ในฐานะผู้ใช้ tty-less


10

ฉันพยายามเรียกใช้คำสั่งเดียวโดยเรียกใช้ ssh (โดยใช้การรับรองความถูกต้องของคีย์) จากผู้ใช้ที่ไม่มี tty (ผู้ใช้ apache เซิร์ฟเวอร์ของฉันกำลังทำงานอยู่) และได้รับผลลัพธ์ต่อไปนี้:

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.

แฟล็ก -t ถูกตั้งค่าเมื่อเรียกใช้ ssh คีย์ไม่มีข้อความรหัสผ่านซึ่งควรระงับความต้องการอินพุตใด ๆ แต่เห็นได้ชัดว่าไม่มี ฉันจะป้องกันไม่ให้ ssh พยายามเปิด / dev / tty ได้อย่างไร?

แก้ไข: แท็กรหัสไม่ทำงาน

Edit2: คำสั่ง ssh แบบเต็ม:

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

ฉันได้เปลี่ยนชื่อผู้ใช้ด้วย "ชื่อผู้ใช้"

แก้ไข 3: ฉันลอง ssh-ing โดยใช้คีย์เดียวกับรูทและรับผลลัพธ์นี้:

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

มันแจ้งให้ฉันสำหรับวลีรหัสผ่านถึงแม้ว่ามันไม่จำเป็นต้องมี นอกจากนี้ฉันสามารถใช้ปุ่มเพื่อ ssh ในการใช้ PuTTY บนเครื่อง windows ได้ดีและมันไม่ได้แจ้งให้ฉันสำหรับวลีรหัสผ่าน

แก้ไข 4: ฉันเพิ่มเซิร์ฟเวอร์ไปยังผู้ใช้ apache known_hosts และตอนนี้ฉันได้รับสิ่งนี้:

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

นอกจากนี้นี่คือเนื้อหาของ known_hosts:

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

ทำไมมันถึงบอกว่า ecdsa มันเป็นคีย์ rsa

แก้ไข 5: แก้ไขแล้ว ปัญหาคือว่าคู่กุญแจถูกสร้างขึ้นโดย PuTTY ซึ่งเขียนคีย์ส่วนตัวในรูปแบบที่ไม่เข้ากันกับ OpenSSH โซลูชันที่จัดทำโดย cjc ในความคิดเห็น


เรื่อง: รหัสแท็ก ไม่ไม่ว่าจะเป็นรหัสเซอร์ราวด์ที่มีเครื่องหมายขีดหลังหรือวางช่องว่างไว้ด้านหน้า 4 บรรทัด
cjc

คำสั่ง ssh เต็มคืออะไร?
cjc

ทำไมคุณผ่าน-t?
Zoredache

@Zoredache คิดว่ามันจะช่วยได้ บางเว็บไซต์แนะนำ
Surma

1
@Surma, ecdsa อ้างถึงคีย์ของเซิร์ฟเวอร์ไม่ใช่คีย์บนไคลเอ็นต์
amcnabb

คำตอบ:


11

ดูเหมือนว่าปัญหาจะไม่เกิดขึ้นจริง ๆ ว่าพยายามอ่านข้อความรหัสผ่านซึ่งเป็นเพียงคำเตือน ค่อนข้างพยายามตรวจสอบคีย์โฮสต์ แต่ล้มเหลว หากคุณไม่ต้องการถามเกี่ยวกับคีย์โฮสต์ให้ลองเพิ่มตัวเลือกต่อไปนี้ในบรรทัดคำสั่ง ssh:

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

โปรดทราบว่าอาจมีผลกระทบด้านความปลอดภัยดังนั้นโปรดอ่านเกี่ยวกับตัวเลือกเหล่านี้ในssh_configหน้า man

แก้ไข: จากข้อความแสดงข้อผิดพลาดที่อัปเดตของคุณดูเหมือนว่าคุณมีไฟล์ข้อมูลประจำตัวที่เสียหาย (หรือตามที่ cjc ชี้ให้เห็นอาจเป็นรูปแบบที่ไม่ถูกต้อง) ลองสร้างใหม่ด้วยตนเองด้วย ssh-keygen และเพิ่มเข้าไปใน authorized_keys ของเซิร์ฟเวอร์


คุณดูเหมือนจะถูกต้องฉันแค่พยายามใช้กุญแจเป็นรูต ผลลัพธ์ใน OP
Surma

1
ที่จริงแล้วแทนที่จะใช้ StrictHostKeyChecking = no คุณสามารถรับพับลิกคีย์ของเซิร์ฟเวอร์และติดไว้ในไฟล์. ssh / known_host ของผู้ใช้ หรือวางสิ่งนั้นลงในไฟล์ known_hosts ทั่วทั้งระบบ
cjc

@cjc ฉันเห็นว่ามักจะเป็นทางออกที่ดีกว่า
amcnabb

@cjc ฉันคัดลอก known_hosts จาก root (ผู้ที่เพิ่มเซิร์ฟเวอร์ไปยังโฮสต์ที่รู้จัก) และตั้งค่าสิทธิ์ที่ถูกต้อง ฉันได้ผลลัพธ์ที่แตกต่างตอนนี้ตรวจสอบ OP
Surma

1
@amcnabb คุณพูดว่าคุณใช้กุญแจใน PuTTY คุณแปลงคีย์เป็น OpenSSH หรือไม่
cjc

0

จากสิ่งที่คุณสนใจสิ่งที่ถูกกำหนดให้เป็นสภาพแวดล้อมใน/etc/passwd- การขาดความ/bin/bashน่าจะเป็นปัญหาของคุณ


/ bin / false ฉันอาจจะต้องพูดถึงว่านี่คือการเรียกใช้โดย php ซึ่งเห็นได้ชัดว่าวางไข่เชลล์เมื่อคุณเรียกใช้ shell_exec () (ซึ่งเป็นสิ่งที่ฉันใช้ในการทำงานนี้)
Surma

1
เข้าใจ จากนั้นในกรณีนี้ทำไมคุณไม่ใช้เพียงpecl.php.net/package/ssh2 - แทนที่จะแฮ็คผ่านด้วยshell_exec()
Ben Lessani - Sonassi

เป็นความคิดที่ดี.
Surma

แน่นอนว่าคุณควรอธิบายในคำถามของคุณว่าคุณกำลังพยายามทำสิ่งนี้ผ่านทาง PHP เพราะคำตอบที่ฉันให้ไว้นั้นแม่นยำกว่าในการแก้ปัญหาของคุณ
Ben Lessani - Sonassi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.